Facebookモバイルアプリ入門-AccessTokenの有効期限-

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

Graph APIを使う

FacebookアプリでGraph APIを用いて各種情報にアクセスする場合、AccessTokenを用いるとFacebookにログインしていない状態でも情報を取得することができます。例えば以下のような書き方をします。

https://graph.facebook.com/me/friends?access_token=XXXXXXXXXXXXXXXXXXXXXXX

AccessTokenの取得

AccessTokenを取得するには、Facebookアプリの承認を行い、Facebook APIを使って取得します。

<html>
<head>
<script src="https://connect.facebook.net/en_US/all.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<p><input id="AccessToken" type="text" value="" width="100%" size="100"/></p>
<div id="fb-root"></div>
<script type="text/javascript">
    $(document).ready(function () {

        FB.init({ 
            appId: '138903622884140', 
            cookie: true, 
            xfbml: true, 
            status: true,
            oauth: true });
			
        FB.Event.subscribe('auth.statusChange', handleStatusChange); 
    });
	
    function handleStatusChange(response) {
        document.body.className = response.authResponse ? 'connected' : 'not_connected';

        if (response.authResponse) {
            console.log(response.authResponse);
            $('#AccessToken').val(response.authResponse.accessToken);
        }
    }
	 
    function login(){
        FB.login(function(response) { }, {scope:'email'});
    }

</script>
</body>
</html>

AccessTokenの有効期限切れ

AccessTokenの有効期限切れは、4つのシナリオが考えられます。

  • 2時間を経過してセッション切れ
  • パスワードの変更
  • アプリの承認解除
  • Facebookからのログアウト

有効期限切れのレスポンス

AccessTokenが有効期限切れになったときに返ってくるJSON文字列についてご紹介します。

2時間を経過してセッション切れ

{ 
  error: {
    type: "OAuthException",
    message: "Session has expired at unix time 
      SOME_TIME. The current unix time is SOME_TIME.”
  }, 
} 

パスワードの変更

{ 
  error: {
    type: "OAuthException",
    message: "The session has been invalidated because 
      the user has changed the password.",
  }, 
}

アプリの承認解除

{
  error: {
    type: "OAuthException",
    message: "Error validating access token: USER_ID
      has not authorized application APP_ID",
  },
}

Facebookからのログアウト

{
  "error": {
    "type":"OAuthException",
      "message":"Error validating 
      access token: The session is invalid because the 
      user logged out."
   }
}

有効期限切れの対処方法

どのエラーもOAuthExceptionですので、レスポンス文字列を比較して判別しましょう。もし、エラーだった場合は再ログインや再承認を促しましょう

まとめ

Graph APIで用いられるAccessTokenの有効期限について理解を深めました。今回はJavaScriptからのみの利用でしたが、サーバーサイドからGraph APIにアクセスする際にも同じように使えるはずです。Facebookの特性を理解してソーシャルアプリデベロッパーになりましょう!

参考資料

How-To: Handle expired access tokens