Facebook SDK 4.0 LoginButton - setReadPermissions不工作?

时间:2015-04-21 09:54:32

标签: android facebook permissions facebook-login facebook-sdk-4.0

我从Facebook 4.0 SDK实现了 LoginButton 。登录和注销工作正常。

现在我想设置" user_friends" 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");
            }
        });

1 个答案:

答案 0 :(得分:6)

我认为你的问题是:

  1. 您刚开始使用一个简单的LoginButton(仅询问basic_info权限)
  2. 您测试了登录并获得了有效的访问令牌
  3. 您已将代码更改为使用LoginButton
  4. 请求user_friends
  5. 现在,您无法使用LoginButton
  6. 获得其他权限

    我已将此识别为SDK中的错误,我们将在即将发布的版本中对其进行修复。

    当您进行开发时,当前的解决方法是在进行LoginButton更改时取消对您的应用程序的授权(来自您的Facebook设置)。这样,它将使您的访问令牌无效,并且在您下次登录时,您应该在权限对话框中看到user_friends。如果您在应用更新之间更改权限数组,那么这应该只是一个问题。