现在我必须在用户墙上实现共享状态的代码 在第一时间。用户已通过点击“打开fb”按钮接受我的应用程序的授权。但是,他们之后删除了我的应用程序Facebook app。接下来,他们点击“关闭fb”按钮并再次点击“打开fb”按钮。 - >实际:此按钮在没有任何请求权限对话框的情况下打开 - >期望:必须关闭此按钮,并且必须显示请求权限对话框。
public void loginFragment(final ILoginFacebook loginFacebook) {
Session.openActiveSession(mContext, mFragment, true,
new StatusCallback() {
//to only confirm permission one time
private boolean isRequestPublishPermission = false;
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
if (!isSubsetOf(mFacebookPermission.getPermissions(),
session.getPermissions())) {
if (!isRequestPublishPermission) {
session.requestNewPublishPermissions(new NewPermissionsRequest(
mFragment,
mFacebookPermission.getPermissions()));
isRequestPublishPermission = true;
} else {
loginFacebook.onLoginFBFailure();
}
} else {
loginFacebook.onLoginFBSuccess();
}
} else {
int numCurrentPer = session.getPermissions().size();
int numOldPer = Session.getActiveSession().getPermissions().size();
if(numCurrentPer < numOldPer){
session.closeAndClearTokenInformation();
isRequestPublishPermission = false;
}
loginFacebook.onLoginFBFailure();
}
}
});
}
我设置了一些Log来检查数据回调。在最后一个请求。会话,总是暂停{iOpened()== true}并且列出权限总是充满。
答案 0 :(得分:1)
通常,在用户最初授予您的应用权限后,会话将在设备上本地缓存。之后,除非您明确调用session.closeAndClearTokenInformation,否则它将使用缓存的信息。
这意味着,在您向Facebook发出请求之前,您不会知道令牌是否仍然有效(这可能来自用户从FB删除您的应用,或更改其FB密码或其他类似方案)。
有几种方法可以解决这个问题。一种是像往常一样继续使用你的应用程序,当你向Graph API发出请求时,处理返回的错误(参见this page的处理错误部分)。
另一种是在你打开一个会话后立即向Facebook发出请求,这可能是一个“/我”请求:
Request meRequest = Request.newMeRequest(session, callback);
meRequest.executeAsync();
如果用户删除了您的应用,那么此请求将会出错,您应该使用我上面链接的错误处理策略来处理它。