如何在 Android 中撤销 Facebook 登录 SDK 的特定(或全部)用户权限

How to revoke specific (or all) user permissions in Android for Facebook Login SDK

我使用的是最新版本的 Facebook SDK(2015 年 5 月)。在用户通过 Facebook 登录 SDK 在 Android 应用程序中登录后,如何以编程方式 revoke/remove 用户的特定权限(或全部)?我在开发人员文档中找到了以下内容,但我不确定如何以编程方式执行此操作。谢谢。

现在使用 Android

的新 4.x.x 版本的 Facebook Sdk 可以轻松撤销权限

需要读取权限

LoginManager.getInstance().logInWithReadPermissions(fragmentoractivity, Arrays.asList("user_likes"));
//multiple
LoginManager.getInstance().logInWithReadPermissions(fragmentoractivity, Arrays.asList("user_likes", "user_friends"));

发布权限

LoginManager.getInstance().logInWithPublishPermissions(fragmentoractivity, Arrays.asList("publish_actions"));

不需要删除或撤销,只要你想撤销它们就要求这样的权限

例如,如果用户拒绝了权限,那么您也可以简单地使用上述命令再次请求权限。

注意:您必须遵守 facebook 政策,例如您必须在询问 fr 权限之前提示用户,或者在用户单击需要访问权限的操作时询问权限。

更新:

如果您想删除权限,请使用 delete 方法执行图形请求

String graphPath="/me/permissions/user_likes";
GraphRequest deletepermission=new GraphRequest(AccessToken.getCurrentAccessToken(), graphPath, null, HttpMethod.DELETE, new GraphRequest.Callback() {
                        @Override
                        public void onCompleted(GraphResponse graphResponse) {
                        if(graphResponse!=null){
                            FacebookRequestError error =graphResponse.getError();
                            if(error!=null){
                                Log.e(ERRORTAG, error.toString());
                            }else {
                                //permission deleted or revoked
                            }
                        }
                      }         
                    });
deletepermission.executeAsync();
//or
deletepermission.executeAndWait()

以上两条命令或类似命令可用于执行图请求 如果您有多个请求,请使用 GraphRequestBatch(查看 fb 文档)

现在您只需要编辑 String graphPath,您可以将 "user_likes" 替换为您想要撤销的权限,或者您可以删除这部分以立即撤销所有权限。

还要确保 HttpMethod.DELETE 需要删除。

我在最新版本的 Facebook Android SDK(图 API 2.0+ 及更高版本)中找到了如何撤销用户权限的解决方案。这是 2015 年 5 月的数据。开发人员需要使用 GraphRequest.newGraphPathRequest() 并设置 GraphPath 并设置 HttpMethod 删除。

public void graphRevokeUserStatusPermission(){
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        if(accessToken == null)
            return;

        GraphRequest request = GraphRequest.newGraphPathRequest(
                accessToken,
                "/me/permissions/user_status",
                new GraphRequest.Callback() {
                    @Override
                    public void onCompleted(GraphResponse response) {
                        // response
                    }
                }
        );
        request.setHttpMethod(HttpMethod.DELETE);
        request.executeAsync();
    }

如果您想撤销用户访问权限,只需将图表路径更改为

    String userId = accessToken.getUserId();
    //url to revoke login DELETE {user_id}/permissions
    userId + "permissions"

并且不要忘记在 onCompleted 方法调用 LoginManager.getInstance().logOut() 中清除信息,此注销方法不会撤销访问权限,它只会清除令牌和配置文件信息,因此开发人员需要请求 url撤销访问权限

更多信息:

Facebook Permissions Revoking