Facebookアプリを使う上で必要となるのがユーザのアクセストークンですが、これは通常2時間で無効になってしまいます。それを回避する上で便利なのがoffline_accessというパーミッションですが、これは今年5月2日から使えなくなってしまいます。
(*ちょっと前までは5月1日で廃止となっていたのですが、いつの間にか2日にズレていました。けど1日と書かれたままの部分もあります。)
対応をまとめたものが残っていたので、今回はそれを紹介します。
以下、その時の資料です。
access_tokenとpermission
ユーザのデータにアクセスしたり、ユーザの代理としてfacebook投稿などするには、アクセストークンだけでなく、必要に応じた許可(パーミッション)を得る必要がある。ユーザ自身の特定の情報にアクセスするためのもの、ユーザの友達に関する特定の情報にアクセスするものや、イベントの作成と参加/不参加表明などの書き込み系のものなど、権限は色々。メッセージボックスの中身を見るパーミッションもある。
offline_accessパーミッションで何が出来るか
- offline_access
- Enables your app to perform authorized requests on behalf of the user at any time. By default, most access tokens expire after a short time period to ensure applications only make requests on behalf of the user when they are actively using the application. This permission makes the access token returned by our OAuth endpoint long-lived.
ロードマップ
http://developers.facebook.com/roadmap/offline_access Permission Removal今は移行期間なので、offline_accessパーミッションを有効/無効にするオプションがアプリ設定にある。この設定変更が有効なのは2012/05/01まで。それ以降はoffline_accessは使えなくなる。
Theoffline_access
permission is deprecated and will be removed May 1, 2012. Until then, you can turn this change on or off using the "Deprecate offline access" migration. Please see the Removal of offline_access Permission doc for more details.
アプリの設定
https://developers.facebook.com/docs/offline-access-deprecation/上記ページのGetting started with the new migration settingに従ってアプリのセッティングをする。
これによりoffline_accessは使えなくなり、access_tokenの新しいルールが適用されるようになる。
以降は60日有効なaccess_tokenが与えられる。
以後のアクセストークンの更新
クライアントサイド更新
ttps://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN
EXISTING_ACCESS_TOKEN(既存のアクセストークン)も期限が来るまでは使い続けられるけど、更新したなら新しい方を使うのが良い。サーバサイドでの更新
ドキュメント内のサーバーサイド手順解説へのリンク(https://developers.facebook.com/docs /authentication/server-side/)が死んでる。多分正しいのは Authentication のServer-side Flowの項目Note: The user must access your application before you're able to get a valid "authorization code" to be able to make the server-side oAuth call again. Apps will not be able to setup a background/cron job that tries to automatically extend the expiration time, because the "authorization code" is short-lived and will have expired.access_tokenの再取得には、これまでの手順通り、ユーザのauthorization codeが必要。authorization codeは短期間で無効になるので、再取得するにはユーザのログイン手順を踏む必要がある => 毎時のバッチ処理などでユーザの関与無しに再取得するのはダメ。
https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&
client_secret=YOUR_APP_SECRET&code=AUTHORIZATION_CODE
注意
今まで通り、ユーザがパスワードを変えたりアプリを削除したタイミングでaccess_tokenは無効になる。対応
必要だった箇所を洗い出す。(ウォールへの投稿のみであれば、publish_streamsパーミッションとアプリ自身のアクセストークンで足りるので何もしないで大丈夫)2時間毎にトークン無効 => 再度ログイン手順を踏ませる、というのを避けるためだったのならば、今後は最大60日有効になるから大丈夫。