ログインダイアログの起動において最も重要な工程の1つが、アプリがアクセスするデータの選択です。以下のすべての例では、scope
パラメーターを使用しています。これらは、利用者のデータへのアクセスをリクエストする方法です。これらはすべてアクセス許可と呼ばれます。
アクセス許可については、アクセス許可ガイドに詳しい説明があります。ただし、アクセス許可とログインダイアログを扱うときに覚えておくべき事柄がいくつかあります。
email
アクセス許可以外の情報をリクエストするアプリは、一般公開される前にFacebookのレビューを受ける必要があります。ログインのレビューとFacebookの一般的なレビューガイドラインについては、Facebookのドキュメントで詳細をご確認ください。Facebookログインのベストプラクティスの1つは、読み取りアクセス許可と公開アクセス許可を同時にリクエストしないことです。これをアプリに適用するには、利用者がログインした後で、追加のアクセス許可をリクエストします。そのために必要なのは、リクエストしている新しいアクセス許可でログインダイアログを起動することだけです。
たとえば、次のアクセス許可を含むログインボタンがあるとします。
<fb:login-button scope="public_profile" onlogin="checkLoginState();"> </fb:login-button>
/me/permissions
で、利用者の承諾後に付与されたアクセス許可をチェックすると、以下が見つかります。
{"data": [ { "permission":"public_profile", "status":"granted" } ] }
後ほどemail
アクセス許可を追加したい場合は、次のようにFB.login()
関数を使用して再起動できます。
FB.login(function(response) { console.log(response); }, {scope: 'email'});
(この関数はボタンのイベントハンドラから呼び出す必要があります。そうしないと、ブラウザーのポップアップブロッカーによってブロックされる可能性があります。)
なお、これは新しいアクセス許可をリクエストしているだけです。新しいアクセス許可が承諾された場合、/me/permissions
をチェックすると次のようになります。
{"data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"email", "status":"granted" } ] }
新しいemail
アクセス許可が、承諾済みのアクセス許可のリストに追加されていることに注意してください。
Facebookログインでは、利用者は特定のアクセス許可をアプリと共有することを拒否できます。利用者がuser_likes
(いいね!)を却下した場合、/me/permissions
でどのアクセス許可が付与されているかをチェックすると、次のようになります。
{ "data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"user_likes", "status":"declined" } ] }
user_likes
が付与されず、却下されたことがわかります。
利用者がアプリに対して却下したアクセス許可の付与を一度だけリクエストできます。その場合は、アクセス許可の付与が必要な理由を説明する画面を表示して、再リクエストします。ただし、前のセクションで説明した方法を使用している場合、ログインダイアログはそのアクセス許可をリクエストしません。
これは、利用者がアクセス許可を一度却下した場合、却下されたアクセス許可の再リクエストを明示的にダイアログに表示しない限り、ログインダイアログが同じアクセス許可を再リクエストすることはないからです。
再リクエストを行うには、FB.login()
呼び出しにauth_type: rerequest
フラグを追加します。
FB.login( function(response) { console.log(response); }, { scope: 'user_likes', auth_type: 'rerequest' } );
これにより、ログインダイアログは却下されたアクセス許可を再リクエストします。このダイアログは、アクセス許可の再リクエストに関するセクションのダイアログと非常によく似ていますが、これは却下されたアクセス許可を再リクエストするために使用するものです。