情况如下:
如果我以前通过
向我的应用程序授予了读取权限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。}
任何想法我做错了什么?
答案 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"))
}