預設用戶和專頁存取憑證為短效憑證,並會在數小時後過期;然而,您可使用短期憑證來獲取長效憑證。
當您使用 iOS、Android 或 JavaScript SDK 時,如果用戶在過去 90 天內使用過您的應用程式,則 SDK 會自動重新整理憑證。使用 Facebook SDK 的原生流動應用程式會獲得有效期為 60 天左右的長期用戶存取憑證。當使用應用程式的用戶向 Facebook 的伺服器作出要求時,這些憑證將會每天重新整理一次。如果未有作出任何要求,憑證將會在大約 60 天後到期,而用戶將必須再經過一次登入流程以取得新憑證。
最新版本 Graph API 為: v21.0
如果您需要使用長期用戶存取憑證,則可透過短期用戶存取憑證產生長期用戶存取憑證。長期憑證的有效期通常為 60 天。
您需要準備好以下項目:
查詢 GET oauth/access_token
端點。
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token? grant_type=fb_exchange_token& client_id={app-id}& client_secret={app-secret}& fb_exchange_token={your-access-token}"
{ "access_token":"{long-lived-user-access-token}", "token_type": "bearer", "expires_in": 5183944 //The number of seconds until the token expires }
長期用戶存取憑證的產生流程如下所示:
取得長期憑證後,您可以從您的伺服器使用憑證,也可以將之傳回用戶端,並從該處使用憑證。
不得使用已過期的憑證來要求獲取長效憑證。一旦憑證到期,您的應用程式就必須讓用戶重新執行登入流程,以產生新的短期存取憑證。
請確保從您的伺服器執行此呼叫,而不是用戶端。您的應用程式密鑰已包含在此 API 調用中,因此切勿從用戶端作出要求。請改為在伺服器端執行會作出要求的代碼,然後將包含長期憑證的回應傳回給您的用戶端代碼。這將會產生與原始憑證不同的字串,因此如果您要儲存這些憑證,請將之取代舊的憑證。
請勿在多個網絡用戶端上使用相同的長效憑證(例如不要在多部電腦上登入)。您應該改為在伺服器上使用長期憑證來產生代碼,然後在用戶端用該代碼來取得長期憑證。請參閱以下使用伺服器端長效憑證產生長效憑證部分,了解相關資訊。
如果您需要使用長期專頁存取憑證,則可透過短期專頁存取憑證產生長期專頁存取憑證。長效專頁存取憑證不設過期日期,而且僅會在特定情況下過期或失效。
您需要準備好以下項目:
查詢 GET {app-scoped-user-id}?accounts
端點。
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/{app-scoped-user-id}/accounts? access_token={long-lived-user-access-token}"
{ "data":[ { "access_token":"{long-lived-page-access-token}", "category":"Brand", "category_list":[ { "id":"1605186416478696", "name":"Brand" } ], "name":"Cute Kitten Page", "id":"{page-id}", "tasks":[ "ANALYZE", "ADVERTISE", "MODERATE", "CREATE_CONTENT", "MANAGE" ] } ], "paging":{ "cursors":{ "before":"MTM1MzI2OTg2NDcyODg3OQZDZD", "after":"MTM1MzI2OTg2NDcyODg3OQZDZD" } } }
Facebook 設有獲取應用程式長期存取憑證的選項,從而避免觸發 Facebook 的垃圾訊息自動偵測系統。適用於符合以下條件的應用程式:
從較高的層面來看,以下是您從用戶端取得長期憑證的方式:
查詢 GET oauth/client_code
端點。重新導向 URI 必須與您透過 Facebook 登入 > 設定用戶端 > OAuth 設定資訊卡的應用程式管理中心所設定的值完全一致。
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/client_code? client_id={app-id}& client_secret={app-secret}& redirect_uri={app-redirect-uri}& access_token={long-lived-user-access-token}"
{ "code":"{code-for-your-client}" }
從 Facebook 的伺服器取擷取代碼後,您需要透過安全管道將代碼傳送至用戶端。傳送完成後,您需要從用戶端向 /oauth/access_token
發出要求:
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token? code={code-for-your-client}& client_id={app-id}& redirect_uri={app-redirect-uri}& machine_id= {your-client-machine-id}"
machine_id
為可識別並追蹤用戶端的選用參數,並可用於保障帳戶安全與防範垃圾訊息。此編號是按用戶端提供的值,而非按用戶提供的值。如果您先前已執行呼叫以取得代碼,並已獲得 machine_id
,您應將其加入代碼要求。
{ "access_token":"{long-lived-access-token}", "expires_in":5183944, //The number of seconds until the token expires "machine_id":"{your-client-machine-id}" }
產生長效憑證的流程如下所示: