裝置專用的 Facebook 登入

如果您有 Facebook 入口網站的問題需要協助,請造訪入口網站使用說明

若要輸入裝置專用的 Facebook 程式碼,以登入您的智慧型電視、相機、印表機和其他裝置,請造訪裝置專用的 Facebook 頁面

建置「裝置專用的 Facebook 登入」,讓用戶能用自己的 Facebook 帳號登入您的應用程式或服務。此功能讓用戶可登入輸入或顯示功能有限的裝置,這些裝置包括智慧型電視、數位相框或物聯網裝置。

使用裝置登入,您的裝置會顯示出英數代碼,要求用戶在桌上型電腦或智慧型手機的網頁上輸入。使用您應用程式或服務的用戶則可以授予權限。裝置在應用程式取得權限後會收到存取權杖,讓您的應用程式提出圖形 API 要求,以辨識用戶和取得資訊,將用戶的裝置體驗個人化。

如果您是為 Apple TV、Android TV 或 Fire TV 建立電視應用程式,建議分別使用 Facebook tvOS SDKFacebook Android SDK

本指南說明如何在不使用上述 SDK 下手動整合裝置登入。

用戶體驗

這些指南描述如何在裝置和服務之間設計一個明確、安全且一致的登入體驗。

1.行動呼籲

首先考慮您想要在用戶體驗的哪一部分要求用戶登入或連結 Facebook,部分裝置將立即要求,而有些則可能會在稍後的體驗中要求。

若要確保最可行、一致且可靠的用戶體驗,應盡量將按鈕設計成像官方「Facebook 登入」按鈕。

從視覺設計觀點來看,您應該

  1. 在按鈕上加上「使用 Facebook 帳號登入」或「連結 Facebook」標籤。
  2. 使用白色和官方 Facebook 品牌藍色:#1877F2。
  3. 如果您的裝置支援圖形顯示,您也可以整合官方「f」標誌。根據 Facebook 品牌指南,標誌應該一律為白色或是 Facebook 藍(#1877F2)。

請描述登入的相關優點,例如:「看看你的朋友在看什麼」或是「從你的 Facebook 相簿瀏覽照片」。

2.顯示代碼

當有人點擊行動呼籲時,您的裝置會對傳回程式碼的 Facebook API 進行呼叫。

您的介面會顯示訊息,告知用戶要造訪網站並輸入代碼,訊息內容如下:「下一步,使用桌上型電腦或智慧型手機造訪 facebook.com/device(http://facebook.com/device),然後輸入這組代碼」。顯示從 Facebook 裝置登入 API 收到的完整代碼。這個代碼長度介於 6 到 12 個字元。

您可以加入 CloseCancel 按鈕,讓用戶可以取消裝置登入流程,如此應該會將用戶導回初始登入畫面。

當代碼顯示在螢幕上時,您的裝置會輪詢裝置登入 API,以瞭解是否有人授權您的應用程式。幾分鐘後,如果用戶沒有輸入代碼,裝置登入 API 就會傳回 code_expired 錯誤。當您的裝置收到此錯誤訊息後,您應該要取消登入流程,然後介面應該會顯示行動呼籲。

QR 代碼也可以與網址中內嵌的用戶代碼一起產生,透過將 user_code 參數加入網址可完成此操作:

https://www.facebook.com/device?user_code=<USER_CODE>

3.授權

這是用戶在桌上型電腦或行動瀏覽器造訪 facebook.com/device 時所看到的流程。首先用戶會看到可輸入代碼的文字欄位:

在用戶輸入代碼並點擊 Continue 後,就可以選擇要授予的權限:

因此用戶知道登入程序成功,接著他們會看到確認訊息:

4.確認登入成功

在裝置介面上,您應該也要顯示確認訊息。在理想情況下,這則訊息應該要包含用戶姓名,可能的話也要包含 Facebook 大頭貼照。

在您的裝置持續顯示此確認訊息,直到用戶點擊 Continue 按鈕為止。有些用戶可能需要在其他地點將代碼輸入電腦,因此在繼續操作前,他們需要時間返回到您的裝置,並查看確認訊息。

用戶點擊 Continue 後,您的裝置就可以顯示很棒的個人化體驗。

5.登出或中斷連線

用戶應該能夠從您的裝置登出,而且裝置不應儲存用戶與 Facebook 的連結。若要執行此操作,需要在您的裝置功能表提供 Log out from FacebookDisconnect from Facebook 選項。

當用戶選擇這個選項之後,您的裝置應該會從記憶體中刪除儲存的存取權杖。如果您將存取權杖儲存於資料庫或雲端儲存,您也應該移除這些存取權杖。您不需要進行 API 呼叫,也能將存取權杖設定為無效。

當有用戶登出之後,您的裝置應該要在步驟 1 顯示初始行動呼籲。

建置裝置專用登入

裝置專用的 Facebook 登入可以讓裝置透過網路直接進行 HTTP 呼叫。以下是您的裝置可以進行的 API 呼叫和回應。

1.啟用裝置專用登入

載入您的應用程式主控板,然後將「產品」>「Facebook 登入」>「設定」>「使用裝置登入」變更為「是」。

2.產生代碼

當用戶點擊 Connect to FacebookLog 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 重新導向 URL。回應形式如下:

{
  "code": "92a2b2e351f2b0b3503b2de251132f47",
  "user_code": "A1NWZ9",
  "verification_uri": "https://www.facebook.com/device",
  "expires_in": 420,
  "interval": 5
}

這個回應代表:

  1. 在您的裝置顯示「A1NWZ9」字串
  2. 要求用戶前往「facebook.com/device」並輸入這個代碼
  3. 這個代碼將在 420 秒後過期,如果在此時間內沒有收到存取權杖,您應該要取消登入流程
  4. 您的裝置應該要每 5 秒輪詢裝置登入 API 一次,以查看授權是否已經成功。

3.顯示代碼

您的裝置應該顯示 user_code,並告知用戶在電腦或智慧型手機上造訪 verification_uri,例如 facebook.com/device。請參閱用戶體驗

4.輪詢授權

您的裝置應該要輪詢裝置登入 API,以查看用戶是否成功授權您的應用程式。您應該要每隔 interval 的間隔就進行一次這項動作,回覆您在步驟 1 的呼叫,其中的間隔為每 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 呼叫的回應。您將會收到存取權杖,或是含有用於剖析的特定子代碼的錯誤物件:

錯誤子代碼 回應範例 意義

N/A

{"access_token": "ABCD...", "expires_in" : 5183996 }

用戶已成功授權裝置。裝置現在可以使用 access_token 值來進行已驗證的 API 呼叫。

1349174

{"error":{"message":"This request requires the user to take a pending action","code":31,"error_subcode":1349174,"error_user_title":"Device Login Authorization Pending","error_user_msg":"User has not yet authorized your application. Continue polling."}}

用戶尚未授權您的應用程式。依照步驟 1 回應中指定的頻率持續輪詢。

1349172

{"error":{"message":"User request limit reached","code":17,"error_subcode":1349172,"error_user_title":"OAuth Device Excessive Polling","error_user_msg":"Your device is polling too frequently. Space your requests with a minium interval of 5 seconds."}}

您的裝置輪詢頻率過高。請將輪詢頻率調降至首次 API 呼叫中指定的間隔。

1349152

{"error":{"message":"The session has expired""code":463,"error_subcode":1349152, "error_user_title":"Activation Code Expired","error_user_msg":"The code you entered has expired. Please go back to your device for a new code and try again."}}

裝置代碼已到期。取消裝置登入流程,並將用戶導回初始畫面。

5.確認登入成功

當您收到存取權杖時,這位用戶就已經成功授權您的應用程式。您應該在裝置上保留這個存取權杖。

讓用戶知道登入流程成功,您的裝置應該會顯示用戶名稱和大頭貼照(如果有的話),直到他們點擊 Continue。若要取得用戶的名稱和大頭貼照,您的裝置應該要進行標準圖形 API 呼叫:

GET https://graph.facebook.com/v2.3/me?
      fields=name,picture&amp;
      access_token=<USER_ACCESS_TOKEN>

您會取得以下形式的回應:

{
  "name": "John Doe", 
  "picture": {
    "data": {
      "is_silhouette": false, 
      "url": "https://fbcdn.akamaihd.net/hmac...ile.jpg"
    }
  }, 
  "id": "2023462875238472"
}

顯示用戶的名稱和大頭貼照,直到他們在您的裝置點擊 Continue

6.儲存存取權杖

您的裝置應該要保留存取權杖,以便提出對圖形 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 中的描述,執行裝置登入流程,以取得有效的新權杖。