Facebook Portalについてヘルプが必要な場合は、Portalヘルプセンターをご覧ください。
ログインのためのデバイス用FacebookコードをスマートTV、カメラ、プリンタなどのデバイスに入力する場合は、デバイス用Facebookのページをご覧ください。
デバイス用Facebookログインを実装することにより、利用者が自分のFacebookアカウントでアプリやサービスにログインできるようにしてください。この機能により利用者は、スマートTV、デジタルフォトフレーム、IoT(Internet of Things)機器など、入力機能や表示機能が限られているデバイスにログインできるようになります。
デバイスログインでは、デバイスに英数字のコードが表示され、デスクトップPCやスマートフォンのウェブページでそのコードを入力するように求められます。アプリやサービスの利用者はそこでアクセス許可を付与できます。アプリがアクセス許可を取得すると、機器がアクセストークンを受け取ります。アプリはこのアクセストークンを使用してグラフAPIリクエストを実行し、利用者を特定したり、機器でのエクスペリエンスをカスタマイズするための情報を取得したりします。
Apple TV、Android TV、Fire TV用のTVアプリを開発している方は、tvOS用Facebook SDKまたはAndroid用Facebook SDKを使用してください。
このガイドでは、上記のSDKを使用せずにデバイスログインを手動で統合する方法について説明します。
このセクションでは、さまざまなデバイスやサービス向けに、わかりやすくて安全かつ一貫性のあるログイン操作の設計方法を説明します。
最初に、サービスの利用者に対して、どのタイミングでFacebookでのログインや接続をリクエストするのかを検討します。開始直後にリクエストした方がよいデバイスもあれば、後の操作時にリクエストする方がよいデバイスもあります。
最適な操作性、一貫性、信頼性を確保するために、できるだけ公式のFacebookログインボタンに似たデザインのボタンを使用します。
ビジュアルデザインの観点では、次の設定が必要になります。
必要に応じて、「友達が何を視聴しているのかをチェックしよう」や「Facebookアルバムの写真を閲覧しましょう」など、ログインのメリットを説明します。
利用者がコールトゥアクションをクリックすると、デバイスからFacebookのAPIに対して呼び出しが実行され、APIからコードが返されます。
インターフェイスに「次に、デスクトップまたはスマートフォンでfacebook.com/device (http://facebook.com/device)にアクセスし、このコードを入力してください」といったメッセージを表示して、利用者にウェブサイトにアクセスしてコードを入力する必要があることを伝えます。FacebookのDevice Login APIから返されたコード全体を表示します。コードの長さは6文字以上、12文字以下です。
[Close
]ボタンまたは[Cancel
]ボタンを追加しておくと、デバイスログインフローをキャンセルできるようになります。利用者がこのボタンを使用した場合は、最初のログイン画面に戻るように設定します。
画面にコードが表示されると、デバイスがデバイスログインAPIをポーリングし、利用者がアプリケーションを認証したかどうかを確認します。数分経っても利用者がコードを入力しない場合は、デバイスログインAPIからcode_expired
エラーが返されます。デバイスがこのエラーを受け取ると、ログインフローをキャンセルし、インターフェイスにコールトゥアクションを表示します。
URLに組み込まれたユーザーコードによりQRコードが生成される場合もあります。これを行うには、次のようにURLにuser_code
パラメーターを追加します。
https://www.facebook.com/device?user_code=<USER_CODE>
デスクトップまたはモバイルブラウザでfacebook.com/deviceにアクセスすると、このフローが表示されます。最初に、コードを入力するためのテキストフィールドが表示されます。
コードを入力して[Continue
]をクリックすると、アクセス許可を付与するかどうかを選択できるようになります。
ログインプロセスが正しく処理されると、次のような確認メッセージが表示されます。
デバイスのインターフェイスには、確認メッセージも表示する必要があります。可能であれば、利用者の名前やFacebookプロフィール写真もあわせて表示します。
利用者が[Continue
]ボタンをクリックするまで、確認メッセージをデバイスに表示しておきます。別の場所にあるコンピューターでコードを入力する場合などは、続行する前にデバイスで確認メッセージを再度見る時間が必要になるためです。
[Continue
]がクリックされてから、カスタマイズされたサービスをデバイスに表示します。
利用者にはデバイスからログアウトする機能を提供する必要があります。この場合、デバイスではFacebookとの接続が保存されないようにします。この機能を実装するには、デバイスのメニューに[Log out from Facebook
]オプションや[Disconnect from Facebook
]オプションを表示します。
このオプションが選択されたら、デバイスのメモリに格納されているアクセストークンを削除します。アクセストークンをデータベースやクラウドストレージに格納している場合は、そこからも削除する必要があります。アクセストークンを無効にするためのAPIを呼び出す必要はありません。
ログアウトしたら、デバイスにステップ1のコールトゥアクションを表示します。
デバイス用Facebookログインは、インターネット経由で直接HTTP呼び出しを行うデバイス向けの機能です。デバイスでは次のようなAPI呼び出しや応答を利用できます。
アプリのダッシュボードを開き、[製品] > [Facebookログイン] > [設定] > [デバイスログイン]を[はい]に変更します。
Connect to Facebook
またはLog in with Facebook
のコールトゥアクションがクリックされたら、デバイスから次のようなHTTP POSTを実行します。
POST https://graph.facebook.com/v2.6/device/login access_token=<YOUR_APP_ID|CLIENT_TOKEN> scope=<COMMA_SEPARATED_PERMISSION_NAMES> // e.g. public_profile,user_likes redirect_uri=<VALID_OAUTH_REDIRECT_URL>
scope
は任意のパラメーターで、ログインレビューでの使用が承認されたログインアクセス許可のコンマ区切りリストが含まれていなければなりません。
CLIENT_TOKEN
は[アプリ設定] > [詳細]で確認できます。アプリIDとパイプ|
で区切って組み合わせてaccess_token
の形式にします。
redirect_uri
は任意のパラメーターです。URLを指定すると、利用者はログインした後にそのURLにリダイレクトされます。これにより、利用者はアプリのウェブサイトにログインして追加アカウントを管理できるようになります。このURLは[アプリ設定] > [詳細]で設定されている有効なOAuthリダイレクトURLである必要があります。応答は次の形式で行われます。
{ "code": "92a2b2e351f2b0b3503b2de251132f47", "user_code": "A1NWZ9", "verification_uri": "https://www.facebook.com/device", "expires_in": 420, "interval": 5 }
応答の意味:
デバイスにuser_code
を表示し、PCやスマートフォンからverification_uri
(facebook.com/deviceなど)にアクセスするように利用者に指示します。「操作性」をご覧ください。
デバイスでデバイスログインAPIをポーリングし、利用者がアプリを正しく認証したかどうかを確認します。ポーリングは、ステップ1の呼び出しに対する応答のinterval
の間隔で実行します。この場合は5秒おきに実行されます。デバイスは次に対してポーリングします:
POST https://graph.facebook.com/v2.6/device/login_status access_token=<YOUR_APP_ID|CLIENT_TOKEN> code=<LONG_CODE_FROM_STEP_1> // e.g. "92a2b2e351f2b0b3503b2de251132f47"
このAPI呼び出しに対する応答は、利用者が認証フローのどこにいるかによって異なります。解析する特定のサブコードを含む、アクセストークンまたはエラーオブジェクトを受け取ります。
サブコードエラー | 応答の例 | 意味 |
---|---|---|
|
| 利用者はデバイスを正しく認証しました。デバイスで |
|
| 利用者はアプリケーションをまだ認証していません。ステップ1の応答に指定した間隔で引き続きポーリングを行います。 |
|
| デバイスのポーリング間隔が短すぎます。ポーリング間隔を広げて、最初のAPI呼び出しで指定した間隔に近づけます。 |
|
| デバイスコードの有効期限が切れています。デバイスログインフローをキャンセルし、最初の画面に戻します。 |
利用者がアプリケーションを正しく認証すると、アクセストークンが送信されます。このアクセストークンはデバイス上に保持します。
利用者にログインプロセスが成功したことがわかるよう、[Continue
]がクリックされるまでは、デバイスに利用者の名前と、可能な場合はプロフィール写真を表示します。利用者の名前とプロフィール写真を取得するには、デバイスで次の標準のグラフAPI呼び出しを実行してください。
GET https://graph.facebook.com/v2.3/me? fields=name,picture& access_token=<USER_ACCESS_TOKEN>
応答は次の形式になります。
{ "name": "John Doe", "picture": { "data": { "is_silhouette": false, "url": "https://fbcdn.akamaihd.net/hmac...ile.jpg" } }, "id": "2023462875238472" }
利用者がデバイスでContinue
をクリックするまで、その利用者の名前とプロフィール写真を表示します。
Graph APIに他のリクエストを行うには、デバイスにアクセストークンを保持する必要があります。
デバイスログインのアクセストークンの有効期間は最長60日ですが、状況に応じて無効にすることもできます。たとえば、利用者がFacebookパスワードを変更すると、アクセストークンは無効になります。
トークンが無効になったら、デバイスのメモリからトークンを削除する必要があります。デバイス利用者は、ステップ1のデバイスログインフローを再実行して、有効なトークンをあらためて取得する必要があります。
HTTP経由でデバイスフローリクエストを行うことはできますか。
OAuth 2にはTLS/HTTPSが必要です。
GETメソッドを使用してデバイスフローリクエストを行うことはできますか。
デバイスフローリクエストはすべてPOST
リクエストで行う必要があります。
デバイスログインのアクセストークンを更新するにはどうすればよいですか。
デバイスログインのアクセストークンの有効期間は最長60日間です。
トークンが無効になったら、デバイスのメモリからトークンを削除する必要があります。デバイス利用者は、ステップ1に記載されているデバイスログインフローを再実行して、有効なトークンをあらためて取得する必要があります。
トークンの更新について詳しくは、「アクセストークン」をご覧ください。
POSTリクエストを行うと、Invalid API method
エラーとなります。どうしたらよいですか。
POSTリクエストを行い、次のようなエラーが発生する場合は、
{"error":{"message":"Invalid API method","type":"OAuthException","code":3}}
アプリでデバイスログインを有効にする必要があるかもしれません。
アプリのダッシュボードを開き、[製品] > [Facebookログイン] > [設定] > [デバイスログイン]を[はい]に設定します。
デバイスログインのアクセストークンが無効です。どうすればよいですか。
アクセストークンが無効な場合は、デバイスのメモリからトークンを削除して新しいトークンを取得してください。デバイス利用者は、ステップ1に記載されているデバイスログインフローを再実行して、有効なトークンをあらためて取得する必要があります。