預設的用戶和粉絲專頁存取權杖是短期的,會在幾小時內到期,但是您可以將短期權杖換成長期權杖。
當您使用 iOS、Android 或 JavaScript SDK 時,如果用戶在過去 90 天內使用了您的應用程式,SDK 將自動重新整理權杖。使用 Facebook SDK 的原生行動應用程式可取得長期的用戶存取權杖,有效期間約 60 天。當使用您應用程式的用戶對 Facebook 的伺服器發出要求時,這些權杖將會每天重新整理一次。如果未發出任何要求,權杖將會在大約 60 天後到期,用戶必須再經過一次登入流程以取得新權杖。
最新的圖形 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}" }
產生長期權杖的工作流程如下所示: