facebook offline_access廃止への対応

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

facebookで、無期限のtokenを取得できたoffline_accessパーミッションが廃止され、
代わりに60日間有効のtokenを取得できるようになりました。
https://developers.facebook.com/roadmap/offline-access-removal/

この切り替えの対応をしていたのですが、何故か60日間有効のtokenが取得できませんでした。
上のリンクにある通り、下記を実行しても2時間程度のtokenが返されてしまいます。

https://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

どうやら新規のアプリケーション作成ではなく、既存のアプリケーションに対して切り替えを行う時は注意が必要なようです。
既にアプリケーションを許可しているユーザーの場合、一度アプリケーションへの許可を削除した後でないと、
60日間有効のtokenが取得できませんでした。

こちらのやり取りが参考になりました。

http://developers.facebook.com/bugs/252502434827018?browse=search_4fb4dfe1105a20183185730

ユーザーのアプリケーションの許可の削除は、 Graph API › User で提供されているようです。
PROFILE_ID/permissionsでパラメーターのpermissionを指定しないとアプリケーションの許可自体が削除されるようです。

https://graph.facebook.com/PROFILE_ID/permissions?
access_token=ACCESS_TOKEN

尚、手動での削除は下記の手順で可能です。

  1. facebookにログイン -> ホーム右のメニュー -> アカウント設定
  2. 左のメニューのアプリ
  3. アプリケーションの右の×ボタンを選択