撤销 android 应用权限未清除 Facebook 访问令牌

Revoking android app permission not clearing facebook access token

我有一个名为 StarterActivity 的 activity,它是我的 android 应用程序的启动器 activity。我提供了一个注销菜单选项,按下它我将撤销所有应用程序权限。我确认所有权限都已被撤销,并且我的应用程序不再列在 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));
            }
        }
    };

但其中 none 似乎有效。访问令牌未清除。如果兑现,我如何使这些数据失效?我希望它在撤销权限时得到清除?还是有更简洁的注销方式?

我正在使用 SDK 4.x。有关烫发的更多详细信息 - https://developers.facebook.com/docs/graph-api/reference/user/permissions

最终起作用的是

LoginManager.getInstance().logOut();

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

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

仅仅撤销权限是不行的。您可以手动将令牌和配置文件设置为 null 或使用上面的 API.