如果您正在寻找 Facebook Portal 的相关帮助,请访问 Portal 帮助中心。
若要输入设备版 Facebook 代码以登录您的智能电视、相机、打印机等设备,请访问设备版 Facebook 页面。
实施设备版“Facebook 登录”后,可以支持用户使用其 Facebook 帐户登录您的应用或服务。通过该功能,用户可以在输入或显示功能有限的设备上登录,如智能电视、数码相框或物联网设备。
使用设备版登录时,您的设备将显示一个字母数字代码,并提示用户将其输入至台式机或智能手机上的网页中。使用您的应用或服务的用户之后可以授予权限。您的应用程序获得权限后,设备将收到访问口令,应用会使用这个访问口令请求图谱 API,从而确定用户身份并获得相关信息,以便为用户打造个性化的设备体验。
若您在构建 Apple TV、Android TV 或 Fire TV 的专用版电视应用,建议您使用 tvOS 版 Facebook SDK 或 Android 版 Facebook SDK。
本指南将介绍如何在不使用上述 SDK 的情况下手动集成设备登录。
以下指南说明如何为各种设备和服务设计明确、安全和一致的登录体验。
首先考虑在用户体验中,您希望在哪里邀请用户登录或通过 Facebook 连接。某些设备需要用户立即登录,而其他设备会在后续体验中才要求用户登录。
为确保用户体验拥有最佳可用性、一致性和可靠性,请尽量按照 Facebook 官方登录按钮设计按钮的外观。
从视觉设计的角度来说,这表示您应该
如果需要,请说明登录的好处。例如,“看看您的好友在看什么”或“查看 Facebook 相册中的照片”。
当用户点击行动号召时,您的设备会调用 Facebook 的 API,这会返回一个代码。
在应用界面中展示以下消息,告诉用户他们需要访问一个网站并输入代码:“下一步,在电脑或智能手机上访问 facebook.com/device (http://facebook.com/device) 并输入此代码”。显示您从 Facebook 的设备登录 API 收到的完整代码。代码长度介于 6 到 12 个字符之间。
您可以添加 Close
或 Cancel
按钮,以便用户取消设备登录流程。此按钮应将用户引导回最初的登录屏幕。
当代码显示在屏幕上时,您的设备应轮询设备登录 API,查看用户是否已向应用授权。几分钟后,如果用户未输入代码,设备登录 API 将返回 code_expired
错误。当设备收到该错误时,您应取消登录流程,然后界面应会显示行动号召。
也可利用网址中的内置用户代码生成二维码。通过将 user_code
参数添加至如下网址,即可完成此过程:
https://www.facebook.com/device?user_code=<USER_CODE>
这是用户在电脑或移动浏览器上前往 facebook.com/device 时看到的流程。首先,用户会看到可以输入代码的文本字段:
输入代码并点击 Continue
后,用户可以选择要授予的权限:
如此,用户便知道登录流程成功,之后他们将看到一条确认消息:
您的设备界面上也应显示一条确认消息。理想情况下,消息中应包括用户的姓名和 Facebook 头像(如有可能)。
在用户点击 Continue
按钮前,设备界面应始终显示这条确认消息。某些用户可能需要在其他位置将代码输入电脑,因此他们可能需要时间返回设备,看到确认消息后才能继续操作。
用户点击 Continue
后,设备将呈现卓越的个性化体验。
用户应可以从您的设备退出,且设备不应存储他们与 Facebook 的关联。为此,请在设备的菜单中加入 Log out from Facebook
或 Disconnect from Facebook
选项。
当用户选择该选项时,您的设备应从内存中删除存储的访问口令。如果您将访问口令存储在数据库或云存储中,还应从这些地方删除。您无需调用 API,也可使访问口令失效。
用户退出后,您的设备应显示第 1 步中的初始行动号召。
设备版 Facebook 登录适用于直接从互联网调用 HTTP 的设备。以下是您的设备可以执行的 API 调用和响应。
加载应用面板,将“产品”>“Facebook 登录”>“设置”>“从设备登录”更改为“是”。
当用户点击 Connect to Facebook
或 Log in with Facebook
行动号召时,设备应发出如下 HTTP POST 请求:
POST https://graph.facebook.com/v2.6/device/login access_token=<YOUR_APP_ID|CLIENT_TOKEN> scope=<COMMA_SEPARATED_PERMISSION_NAMES> // e.g. public_profile,user_likes redirect_uri=<VALID_OAUTH_REDIRECT_URL>
scope
为可选参数,其中必须包含登录权限的逗号分隔列表,该列表已获准用于登录审核流程。
可在“应用设置”->“高级”中找到 CLIENT_TOKEN
,该口令应结合您的应用编号(以竖线 |
分隔),以形成完整的 access_token
。
redirect_uri
是可选参数。当您提供网址时,用户将在成功登录后被重定向至该网址。这样您就可以让用户登录应用的网站,从而进一步管理帐户。该网址必须是在“应用设置 -> 高级”中配置的有效 OAuth 重定向网址。响应的形式为:
{ "code": "92a2b2e351f2b0b3503b2de251132f47", "user_code": "A1NWZ9", "verification_uri": "https://www.facebook.com/device", "expires_in": 420, "interval": 5 }
该响应表示:
您的设备应显示 user_code
,要求用户在电脑或智能手机上访问 verification_uri
,例如 facebook.com/device。请参阅用户体验。
您的设备应轮询设备登录 API,查看用户是否已向应用成功授权。该操作应按第 1 步中调用响应的 interval
执行,即间隔为每 5 秒一次。您的设备应轮询:
POST https://graph.facebook.com/v2.6/device/login_status access_token=<YOUR_APP_ID|CLIENT_TOKEN> code=<LONG_CODE_FROM_STEP_1> // e.g. "92a2b2e351f2b0b3503b2de251132f47"
对此次 API 调用的响应取决于用户在授权流程中的位置。您会收到访问口令或者错误对象及要解析的特定子代码:
错误子代码 | 响应示例 | 含义 |
---|---|---|
|
| 用户已成功授权设备。设备现可使用 |
|
| 用户尚未向您的应用程序授权。继续以在第 1 步的响应中指定的速率轮询。 |
|
| 设备轮询过于频繁。将轮询的频率降低为首次调用 API 中指定的时间间隔。 |
|
| 设备代码已过期。取消设备登录流程,并将用户引导回初始屏幕。 |
您收到访问口令时,表示用户成功授权应用。您应将访问口令留存在设备上。
如此用户便知道登录流程成功,且您的设备应会显示用户的姓名和头像(如可用),直到他们点击 Continue
。如要获取用户的姓名和头像,您的设备应执行以下标准图谱 API 调用:
GET https://graph.facebook.com/v2.3/me? fields=name,picture& access_token=<USER_ACCESS_TOKEN>
您将获得如下形式的响应:
{ "name": "John Doe", "picture": { "data": { "is_silhouette": false, "url": "https://fbcdn.akamaihd.net/hmac...ile.jpg" } }, "id": "2023462875238472" }
请始终展示用户的姓名和头像,直至用户在设备上点击 Continue
。
您的设备应存留访问口令,以便发出其他的图谱 API 请求。
设备登录访问口令可能有最长 60 天的有效期,但也可能在多种情形下失效。例如,当用户更改 Facebook 密码时,他们的访问口令即失效。
如果口令无效,您的设备应从内存中删除口令。使用设备的用户需要再次从第 1 步开始执行设备登录流程,重新获得有效的新口令。
能否通过 HTTP 提出设备流程请求?
OAuth 2 需要使用 TLS/HTTPS。
能否通过 GET 方法提出设备流程请求?
所有设备流程请求都应是 POST
请求。
如何刷新设备登录访问口令?
设备登录访问口令的有效期最长可能为 60 天。
如果口令无效,您的设备应从内存中删除口令。设备用户需要再次执行第 1 步中说明的设备登录流程,重新获取有效的新口令。
如要详细了解刷新口令,请参阅访问口令。
我在提出 POST 请求时遇到了 Invalid API method
错误,问题出在哪里?
如果您在提出 POST 请求时遇到如下错误:
{"error":{"message":"Invalid API method","type":"OAuthException","code":3}}
您可能需要在应用中启用“从设备登录”。
加载应用面板,将“产品”>“Facebook 登录”>“设置”>“从设备登录”设为“是”。
我的设备登录访问口令无效。我该怎么办?
如果访问口令无效,您的设备应从内存中删除口令,并获取新口令。设备用户需要再次执行第 1 步中说明的设备登录流程,重新获取有效的新口令。