撤消Android应用程序权限而不清除Facebook访问令牌

时间:2015-08-09 10:29:06

标签: android facebook facebook-graph-api facebook-sdk-4.0

我有一个名为StarterActivity的活动,它是我的Android应用程序的启动器活动。我已经提供了一个注销菜单选项,我将撤消所有应用程序权限。我确认所有权限都已被撤销,我的应用已不再列在https://www.facebook.com/settings?tab=applications

然而,访问令牌不会被清除。

    switch(item.getItemId())
    {
        case R.id.action_logout:
            GraphRequest delPermRequest = new GraphRequest(AccessToken.getCurrentAccessToken(), "/{user-id}/permissions/", null, HttpMethod.DELETE, new GraphRequest.Callback() {
                @Override
                public void onCompleted(GraphResponse graphResponse) {
                    if(graphResponse!=null){
                        FacebookRequestError error =graphResponse.getError();
                        if(error!=null){
                            Log.e(TAG, error.toString());
                        }else {
                            finish();
                        }
                    }
                }
            });
            Log.d(TAG,"Executing revoke permissions with graph path" + delPermRequest.getGraphPath());
            delPermRequest.executeAsync();
            break;
    }

我想在注销时再次重新启动我的StarterActivity Intent。

我添加了

startActivity(new Intent(getApplicationContext(),StarterActivity.class));
清除权限后

。但AccessToken.getCurrentAccessToken()Profile.getCurrentProfile()都不为空。也许获得兑现?

我也试过

    AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(
                AccessToken oldAccessToken,
                AccessToken currentAccessToken) {

            Log.d(TAG,"Access token changed");

            if (currentAccessToken == null){
                //User logged out
                startActivity(new Intent(getApplicationContext(),StarterActivity.class));
            }
        }
    };

但它们似乎都不起作用。访问令牌未被清除。如果兑现,我该如何使这些数据无效?我希望它能够在撤销权限时获得批准吗?或者有更简洁的退出方式吗?

我使用的是SDK 4.x.关于烫发的更多细节 - https://developers.facebook.com/docs/graph-api/reference/user/permissions

1 个答案:

答案 0 :(得分:1)

最终起作用的是

LoginManager.getInstance().logOut();

它内部做的是将每个访问令牌和配置文件设置为空

public void logOut() {
    AccessToken.setCurrentAccessToken((AccessToken)null);
    Profile.setCurrentProfile((Profile)null);
}

只是撤销权限不会。您可以手动将令牌和配置文件设置为null,也可以使用上面的API。