当用户在Facebook应用程序中删除我们的应用程序时,Facebook需要重新登录



现在我必须在用户墙上实现共享状态的代码
第一次。用户已经通过点击"打开fb"按钮接受了我的应用程序的许可。然而,在那之后,他们在Facebook应用程序中删除了我的应用程序。接下来,他们点击"关闭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();
                }
            }
        });
}

我设置了一些日志来检查数据回调。应最后一次请求。会话,stage always{iOpened()==true}和list permission always已满。

通常,在用户最初授予您的应用程序权限后,会话会在设备上本地缓存。之后,除非显式调用session.coloseAndClearTokenInformation,否则它将使用缓存的信息。

这意味着,在你向Facebook提出请求之前,你不会知道代币是否仍然有效(这可能来自用户从FB删除你的应用程序,或更改他们的FB密码,或其他类似情况)。

有几种方法可以解决这个问题。一种是像往常一样继续使用您的应用程序,当您向Graph API发出请求时,处理返回的错误(请参阅本页的"处理错误"部分)。

另一种是在你打开会话后立即向Facebook提出请求,这可能是一个"我"的请求:

Request meRequest = Request.newMeRequest(session, callback);
meRequest.executeAsync();

如果用户已经删除了你的应用程序,那么这个请求将出错,你应该使用我上面链接的错误处理策略来处理它。

相关内容

最新更新