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

时间:2013-12-17 10:31:12

标签: android facebook facebook-graph-api

现在我必须在用户墙上实现共享状态的代码 在第一时间。用户已通过点击“打开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}并且列出权限总是充满。

1 个答案:

答案 0 :(得分:1)

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

这意味着,在您向Facebook发出请求之前,您不会知道令牌是否仍然有效(这可能来自用户从FB删除您的应用,或更改其FB密码或其他类似方案)。

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

另一种是在你打开一个会话后立即向Facebook发出请求,这可能是一个“/我”请求:

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

如果用户删除了您的应用,那么此请求将会出错,您应该使用我上面链接的错误处理策略来处理它。