ネモウスドットコム

エンジニア兼プロデューサーがWebサービス制作について考えるブログ

このサイトはかみさまのWebサービス制作研究所に移転しました。
こちらのサイトもぜひご覧ください。

Facebook PHP SDKのgetAccessToken()が返すトークンの種類について

Facebookアプリ開発において、アクセストークンの取得にはgetAccessToken()を用いる訳ですが、この関数は状況によって返す値が異なるので注意が必要。

僕も少しつまづいてしまったので、備忘録のためにもまとめておきます。

ちなみに今回使用したSDKのバージョンは3.2.2です。

アクセストークンの取得・設定方法

まずアクセストークンの取得方法についてですが、以下のコードにより取得できます。

$facebook = new Facebook(array(
    'appId' => 'App ID',
    'secret' => 'アプリのシークレットキー'
));
$access_token = $facebook->getAccessToken();

また、取得したアクセストークンの設定方法は以下の通りです。

$facebook->setAccessToken($access_token);

getAccessToken()の動き

さて、このgetAccessToken()について、ユーザの状況によって以下の2パターンの値を返します。

  1. アプリを許可しているとき:UserAccessTokenを返す
  2. アプリを許可していないとき:ApplicationAccessTokenを返す

1. UserAccessToken

ユーザがアプリを許可している場合は、ユーザ情報を取得できるトークン(UserAccessToken)が返されます。 これをsetAccessToken()することにより、ログインURL取得時にscopeで設定した情報等を取得できます。 例えば、

  • ユーザID
  • メールアドレス
  • 「いいね!」したページ

等が取得できます。

このUserAccessTokenは、アプリ内のどこででも利用できるようセッションに保持しておくと便利です。

2. ApplicationAccessToken

ユーザがアプリを許可していない場合、アプリケーションのトークン(ApplicationAccessToken)が返されます。

このトークンは名前の通りアプリのトークンであり、ユーザのトークンではありません。 つまり、これをsetAccessToken()してもユーザ情報を取得することはもちろんできません

これを勘違いしていると、APIを叩いたりgetSignedRequest()した時にやたらとreturn nullされます。

getAccessToken=ユーザのトークンを取得とは限らない

ので注意が必要です。

おわりに

Facebook PHP SDKのコードはそんなに長くないので、開発で困ったらとりあえず読んでみるといいと思います。

開発で困ったことがありましたらお気軽にご連絡くださいね。