Android 权限管理

在基本登录期间,您的应用会收到用户公开资料和邮箱的访问权限。如需访问其他个人主页信息或代表用户向 Facebook 发布内容,则必须请求相关必要权限:

  • 默认公开资料字段 - 支持访问基本个人主页信息。

  • 读取权限 - 用户添加至 Facebook 个人主页的所有其他信息均受其他读取权限保护。

  • 写入权限 - 应用必须获得单独的发布权限才能代表用户发布内容。

以下是管理应用权限的方法:

  • 向用户发送 Facebook 请求时,应用应检查必要的权限并在需要时请求这些权限。

  • 如果 Facebook 提示权限缺失错误,您的应用应请求权限并重试,以处理此问题。

  • 应用用户可以在 Facebook 上撤销权限,但您也可以在应用中实施此功能。

  • 您还可以实施完全撤销登录的机制,让用户从应用中移除基本登录权限。

如需详细了解其他可用权限,请阅读权限指南

用户对授予发布权限很敏感,所以您应该只在用户准备好通过您的应用发布内容时请求发布权限,而不是在最初的登录期间请求。

获取其他权限

在基本登录期间,您的应用会收到用户公开资料和邮箱的访问权限。如需访问其他个人主页信息或代表用户向 Facebook 发布内容,则必须请求相关的必要权限。

本文将以获取 user_status 权限为例予以说明。您可以将这些权限传递至 LoginButton 按钮,或是用于登录和获取权限的自定义用户界面。

MainFragment 类中,修改 onCreateView() 内的代码:

...
LoginButton authButton = (LoginButton)view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList("user_status"));

return view;
...

获取读取权限

LoginManager 是一个单一实例,需借助访问口令的 currentAccessToken 运行。登录成功后,系统就会设置 currentAccessToken。如要请求其他权限,只需调用 logInWithPermissionName 方法。

logInWithPermissionName 方法会始终打开用户界面,并在必要时向用户请求其他权限。如需获取用户的其他权限,请使用 Android 版 Facebook SDK 发送以下请求:

LoginManager.getInstance().logInWithReadPermissions(
    fragmentOrActivity,
    Arrays.asList("email"));

借此请求用户尚未授予的权限。您可以在首次登录后使用此工具。

您可以请求权限参考文档中列出的多项读取权限。

获取发布权限

您可以在登录期间请求许多读取权限或发布权限。但请求四个以上的权限会显著减少登录完成次数。

自 2018 年 4 月 24 日起,我们已移除 pubish_actions 权限。如需了解更多详情,请参阅重大更改更新日志。为便于您的应用用户与 Facebook 分享内容,建议您改用我们的分享产品

在登录期间通过 publish_actions 请求发布权限会在登录用户界面创建第二步。所以您应该在登录期间请求最低的读取权限,然后在用户真正需要时请求任何其他权限或发布权限。如需优化权限请求,请参阅优化权限

如需在应用内请求发布权限,您可以使用 LoginManager

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

上图所示的代码可请求应用在登录期间尚未获得的权限。

重新请求权限

用户可以只授予您请求的部分权限,但必须在登录时授予 public profile 权限。

如需获取与当前访问口令相关联的权限列表,请调用:

AccessToken.getCurrentAccessToken().getPermissions();

如需获取已拒绝的权限列表,请调用:

AccessToken.getCurrentAccessToken().getDeclinedPermissions();

当用户拒绝向应用授予您请求的某个权限时,应用应能处理此类情况。如果您的应用必须获得某个已拒绝的权限才能运行,您可以按照以上示例使用 LoginManager 重新请求。

登录审核

采用 Facebook 登录后,您的应用就可以选择性地向用户请求一些数据的权限。

如果您的应用需要请求除访问默认公开资料字段和邮件以外的权限,必须先通过 Facebook 的审核才能发布。详细了解审核流程以及通过审核的必要条件。

登录审核指南