デフォルトではユーザーアクセストークンとページアクセストークンは短期であり、数時間で有効期限が切れます。しかし、短期アクセストークンは長期アクセストークンに交換できます。
iOS、Android、JavaScript SDKを使用する場合、ユーザーが過去90日以内にアプリを使っていれば、SDKは自動的にトークンを更新します。FacebookのSDKを使用するネイティブモバイルアプリは、約60日間有効な長期ユーザーアクセストークンを取得します。これらのトークンは、アプリを使用する利用者がFacebookのサーバーにリクエストを行うと、1日に1回更新されます。リクエストがまったく行われないと、トークンは約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 }
長期ユーザーアクセストークン生成のワークフローは次のとおりです。
長期トークンを取得したら、そのトークンを自分のサーバーから使用することも、クライアントに送り返してクライアントで使用することもできます。
有効期限が切れたトークンを使用して長期トークンをリクエストすることはできません。トークンが有効期限切れとなった場合、アプリでは、利用者にログインフローをやり直してもらい、新しい短期アクセストークンを生成する必要があります。
この呼び出しは、クライアントからではなく、お使いのサーバーから発行します。App Secretはこの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}" }
長期トークン生成のワークフローは次のとおりです。