在创建帐户或使用 Facebook 登录功能登录您的应用时,人们可能会授予您请求的权限,也可能选择拒绝授予除公开档案权限以外的所有权限。如果他们觉得不便与您的应用分享某些信息,或者不理解您将以什么方式使用那些信息来改善他们的体验,就可能会选择拒绝。
当人们选择拒绝授予权限时,请务必尊重他们的决定,并依然向他们提供优良的体验。
通常而言,您的应用可通过三种方式进行回应:
在一些情况下,应用无需您请求的某些权限也可正常运行。此时,最简单的处理方法就是尊重用户的选择,继续将他们引导至应用中。
在以下示例中,Flick Finder 如果获得访问 user_likes
的权限,就可以更好地向用户推荐电影。不过,既然用户拒绝授予该权限,那 Flick Finder 就只提供一般性的电影推荐。
这是最简单的处理方法,并可让拒绝授予特定权限的用户深刻感受到您的尊重。
当用户不理解您的应用为何需要相关信息时,即可能拒绝授予权限。此时,您的应用可以向他们显示一个对话框,解释为什么需要相关信息,并说明将如何使用那些信息改善他们的体验。
在以下示例中,Flick Finder 显示了一个对话框,解释说有了电子邮箱,应用即可在新电影上线时通知用户。“Add Email”(添加电子邮箱)按钮可将用户带回 Facebook 登录流程,以便他们授予 email
权限。
请注意:在此示例中,用户仍可以拒绝授予 email
权限。
在请求对应用的功能性而言很关键或非常有用的权限时,可采用这一策略。
您可以自行收集某些简单的信息。
在此示例中,Flick Finder 想要收集用户的生日,以便向他们推荐适当年龄的电影。如果用户在通过 Facebook 登录应用时拒绝分享生日信息,那么 Flick Finder 还是可以在应用内创建一个用于收集此信息的位置,并将其与 Facebook 登录流程分离。我们建议在用户经过一段时间熟悉您的应用后再使用此策略,这样,他们能够更好地理解这一权限能够如何改善他们的体验。
可通过此种方法收集的信息包括:user_hometown
、user_location
、user_birthday
甚至是 email
。
用户在 Facebook 登录流程中拒绝授予某些权限时,我们可让您的应用轻松检测出被拒绝的权限,并通过上述三种策略之一进行回应。
在 Android 环境中,您可以在 Android 版 Facebook SDK 中调用 AccessToken
对象的 getDeclinedPermissions
方法。
在 iOS 环境中,您可以在 iOS 版 Facebook SDK 中调用 [FBSDKAccessToken declinedPermissions]
方法。
要检测被拒绝的权限,您可以调用图谱 API 的 User
对象的 permissions
连线。您可以在响应中通过迭代来收集所有被拒绝的权限:
FB.api('/me/permissions', function(response) { var declined = []; for (i = 0; i < response.data.length; i++) { if (response.data[i].status == 'declined') { declined.push(response.data[i].permission) } } alert(declined.toString()) });
要检测被拒绝的权限,您可以调用图谱 API 的 User
对象的 permissions
连线:
GET https://graph.facebook.com/me/permissions?access_token=USER_ACCESS_TOKEN
它会生成以下形式的响应:
{ "data": [ { "permission": "user_birthday", "status": "granted" }, { "permission": "public_profile", "status": "granted" }, { "permission": "email", "status": "declined" } ]}
从而您的应用将知道用户授予了 user_birthday
和 public_profile
权限,但选择拒绝授予 email
权限。
适当地处理被拒绝的权限是为用户提供良好 Facebook 登录体验的重要组成部分。
实施以上策略有助于确保下载并安装您的应用的用户顺利登录使用,进而提升您的应用的声誉和应用商店评分。