验证访问令牌时出错:用户未授权应用程序。 Facebook SDK 4

时间:2015-04-23 11:27:55

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

情况如下:

如果我以前通过

向我的应用程序授予了读取权限
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email"));

然后,当我需要共享时,我通过以下方式请求发布权限:

LoginManager.getInstance().logInWithPublishPermissions(getActivity(), Arrays.asList("publish_actions"));

在我删除Web应用程序的权限之前,一切正常。

如果应用程序被终止或停止,我需要分享,我将检查是否仍有权限:

if(userAuthorizedMyApp()){
    LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions"));
} else {
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email"));
}

方法userAuthorizedMyApp()返回false(accessToken null):

private boolean userAuthorizedMyApp() {
    boolean authorized;
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    if(DEBUG) Log.v(TAG, "accessToken [" + accessToken +"]");

    if(accessToken != null){
        Set<String> currentPermissions = accessToken.getPermissions();
        authorized = currentPermissions.contains("public_profile");
    } else {
        authorized = false;
    }
    if(DEBUG) Log.v(TAG, "userAuthorizedMyApp[" + authorized +"]");

    return authorized;
}

我尝试通常登录,就好像这是第一次:

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email"));

我收到了:

public void onError(FacebookException error)
  

onError,错误{HttpStatus:-1,errorCode:190,errorType:null,errorMessage:验证访问令牌时出错:用户未授权应用程序123456789123456。}

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:3)

致电AccessToken.refreshCurrentAccessTokenAsync()为我工作。我在FacebookCallback.onError()的实现中遇到错误,我打电话给我 AccessToken.refreshCurrentAccessTokenAsync()清除Facebook SDK中的访问令牌。

因为这是异步通话,所以我无法立即拨打loginManager.logInWithReadPermissions();没有回调,因此我向用户显示AlertDialog,当用户点击&#34;确定&#34;时,我就拨打loginManager.logInWithReadPermissions()

所以用户体验也不算太差,边缘情况也是可以接受的。

答案 1 :(得分:3)

做一些像:

@Override
public void onError(FacebookException error) {
    Timber.e(error, "Error during facebook login");
    AccessToken.setCurrentAccessToken(null);
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email"))
}