アクセストークン:デバッグとエラー処理

トークンとデバッグについての情報の取得

アクセストークンを扱う場合、トークンにどのような情報(利用者や有効期限など)が付随しているかを確認することが必要な場合があります。この情報は、Facebookのデバッグツール、またはAPIエンドポイントを使用して取得できます。

APIを使用する場合、グラフAPIリクエストを発行できます。

GET /debug_token?
  input_token={input-token}&
  access_token={access-token}
  • input_token: 情報取得の対象となるアクセストークン
  • access_token: アプリアクセストークンまたはアプリの開発者からの有効なユーザーアクセストークン

API呼び出しの応答は、フィールドのマップを含むJSON配列です。例:

{
    "data": {
        "app_id": 000000000000000, 
        "application": "Social Cafe", 
        "expires_at": 1352419328, 
        "is_valid": true, 
        "issued_at": 1347235328, 
        "scopes": [
            "email", 
            "publish_actions"
        ], 
        "user_id": 1207059
    }
}

注: 短期アクセストークンでは、issued_atフィールドは返されません。

エラーの処理

Facebookは、以前に発行されたアクセストークンが無効になっても通知しません。アクセストークンに付随してアプリに渡されるexpiry時間を監視しない限り、特定のトークンが無効になったことは、APIへのリクエストを次に試行するまで分かりません。 また、セキュリティに関連する特定のイベントが発生した場合、アクセストークンが、想定される有効期限よりも前に無効になることがあります。

ほとんどのアプリにおいて、有効期限切れのトークンを処理する最善の方法は、APIによるエラーメッセージを取り込むことです。エラーが発生するごとに、APIはHTTP 400ステータスコード、コード、サブコードを、エラーの特徴を説明するJSON本体に含めて返します (これらの例にはサブコードは含まれていませんが、エラーリファレンスでサブコードについて説明されています)。

有効期限切れまたは無効なアクセストークン

アクセストークンが有効期限切れになっている

{
  "error": {
    "message": "Error validating access token: Session has expired at unix 
                time SOME_TIME. The current unix time is SOME_TIME.", 
    "type": "OAuthException", 
    "code": 190
  }
}

利用者がログアウトしたか、パスワードを変更したことによってアクセストークンが無効になっている

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

アクセストークンが無効になった場合、利用者がログインをやり直すと解決します。この時点では、利用者の代わりに1回のみAPI呼び出しを行うことができます。新しい利用者用にアプリで使用するログインフローでは、適用する必要のあるメソッドを決定してください。

利用者がアプリの承認を取り消している

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

利用者がアプリの承認を取り消した場合、アプリはその利用者をアプリにとって新しい利用者として扱う必要があります。

その他のエラーについては、APIエラーリファレンスをご覧ください。前述の3つのエラーは、アクセストークンに関連する、最も一般的なエラーです。

iOSアプリでのトークンエラーへの対処

iOS SDKでのAPIエラーは、一般的に、コールバックに渡されるNSErrorインスタンスを通して検知されます。 詳しくは、iOS SDKエラードキュメントをご覧ください。

Androidアプリでのトークンエラーへの対処

Android SDKでのAPIエラーは、一般的に、Requestsのコールバックに渡されるResponseオブジェクトを通して検知されます。具体的には、response.getError()を呼び出して、FacebookRequestErrorインスタンスを取得できます。

アクセストークンの文字数

あらゆる種類のアクセストークンの文字数は、随時変更される可能性があります。これは、Facebookが、トークンに含まれる内容とそれらをエンコードする方法を変更するためです。 アクセストークンのサイズは随時変更されると思ってください。 アクセストークンを格納する場合、特定の最大サイズを使用せずに、可変長のデータ型を使用してください。