Facebook SDK 4.0 LoginButton - setReadPermissions 不工作?
Facebook SDK 4.0 LoginButton - setReadPermissions is not working?
我从 Facebook 4.0 SDK 实现了 LoginButton。登录和注销工作正常。
现在我想用 LoginButton.setReadPermissions(Arrays.asList("user_friends"));
设置 "user_friends" 权限
但是好像,这行代码被忽略了?
当我使用 getAccessToken().getPermissions();
成功登录后读取权限时,我只有 "basic_info" 权限。
如果我改用 LoginManager.getInstance().logInWithReadPermissions( HighscoreFragment.this, Arrays.asList("user_friends") );
,我将获得正确的权限。但我想使用 LoginButton.
那么实现 LoginButton 并在登录时设置所需权限的正确方法是什么?
这是我的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_highscore, container, false);
mLoginButton = (LoginButton) view.findViewById(R.id.login_button);
mLoginButton.setReadPermissions(Arrays.asList("user_friends"));
mLoginButton.setFragment(this);
// Callback registration
mLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.i(TAG, "LOGIN SUCCESFUL");
Log.i(TAG, loginResult.getAccessToken().getPermissions().toString());
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if (accessToken != null) {
if(accessToken.getPermissions().contains("user_friends"))
fetchScoreboardEntries();
}
}
@Override
public void onCancel() {
Log.i(TAG, "LOGIN CANCEL");
}
@Override
public void onError(FacebookException exception) {
Log.i(TAG, "LOGIN ERROR");
}
});
我认为你的问题是这样的:
- 您从一个简单的 LoginButton 开始(只需要
basic_info
许可)
- 您测试了登录并获得了有效的访问令牌
- 您更改了代码以使用 LoginButton
请求 user_friends
- 现在您无法使用登录按钮获得额外权限
我已确定这是 SDK 中的错误,我们将在即将发布的版本中修复它。
在开发过程中,当前的解决方法是在更改 LoginButton 时取消对应用程序的授权(从 Facebook 设置)。这样,它会使您的访问令牌失效,下次登录时,您应该会在权限对话框中看到 user_friends
。如果您在应用程序更新之间更改权限数组,这应该只是一个问题。
我从 Facebook 4.0 SDK 实现了 LoginButton。登录和注销工作正常。
现在我想用 LoginButton.setReadPermissions(Arrays.asList("user_friends"));
但是好像,这行代码被忽略了?
当我使用 getAccessToken().getPermissions();
成功登录后读取权限时,我只有 "basic_info" 权限。
如果我改用 LoginManager.getInstance().logInWithReadPermissions( HighscoreFragment.this, Arrays.asList("user_friends") );
,我将获得正确的权限。但我想使用 LoginButton.
那么实现 LoginButton 并在登录时设置所需权限的正确方法是什么?
这是我的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_highscore, container, false);
mLoginButton = (LoginButton) view.findViewById(R.id.login_button);
mLoginButton.setReadPermissions(Arrays.asList("user_friends"));
mLoginButton.setFragment(this);
// Callback registration
mLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.i(TAG, "LOGIN SUCCESFUL");
Log.i(TAG, loginResult.getAccessToken().getPermissions().toString());
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if (accessToken != null) {
if(accessToken.getPermissions().contains("user_friends"))
fetchScoreboardEntries();
}
}
@Override
public void onCancel() {
Log.i(TAG, "LOGIN CANCEL");
}
@Override
public void onError(FacebookException exception) {
Log.i(TAG, "LOGIN ERROR");
}
});
我认为你的问题是这样的:
- 您从一个简单的 LoginButton 开始(只需要
basic_info
许可) - 您测试了登录并获得了有效的访问令牌
- 您更改了代码以使用 LoginButton 请求
- 现在您无法使用登录按钮获得额外权限
user_friends
我已确定这是 SDK 中的错误,我们将在即将发布的版本中修复它。
在开发过程中,当前的解决方法是在更改 LoginButton 时取消对应用程序的授权(从 Facebook 设置)。这样,它会使您的访问令牌失效,下次登录时,您应该会在权限对话框中看到 user_friends
。如果您在应用程序更新之间更改权限数组,这应该只是一个问题。