在基本登录期间,您的应用会收到用户公开资料和邮箱的访问权限。如需访问其他个人主页信息或代表用户向 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"));
借此请求用户尚未授予的权限。您可以在首次登录后使用此工具。
您可以请求权限参考文档中列出的多项读取权限。
您可以在登录期间请求许多读取权限或发布权限。但请求四个以上的权限会显著减少登录完成次数。
在登录期间通过 publish_actions
请求发布权限会在登录用户界面创建第二步。所以您应该在登录期间请求最低的读取权限,然后在用户真正需要时请求任何其他权限或发布权限。如需优化权限请求,请参阅优化权限。
如需在应用内请求发布权限,您可以使用 LoginManager
。
LoginManager.getInstance().logInWithPublishPermissions( fragmentOrActivity, Arrays.asList("publish_actions"));
上图所示的代码可请求应用在登录期间尚未获得的权限。
用户可以只授予您请求的部分权限,但必须在登录时授予 public profile
权限。
如需获取与当前访问口令相关联的权限列表,请调用:
AccessToken.getCurrentAccessToken().getPermissions();
如需获取已拒绝的权限列表,请调用:
AccessToken.getCurrentAccessToken().getDeclinedPermissions();
当用户拒绝向应用授予您请求的某个权限时,应用应能处理此类情况。如果您的应用必须获得某个已拒绝的权限才能运行,您可以按照以上示例使用 LoginManager
重新请求。
采用 Facebook 登录后,您的应用就可以选择性地向用户请求一些数据的权限。
如果您的应用需要请求除访问默认公开资料字段和邮件以外的权限,必须先通过 Facebook 的审核才能发布。详细了解审核流程以及通过审核的必要条件。
登录审核指南