Android用アクセス許可の管理

基本ログイン時、アプリでは利用者の公開プロフィールとメールアドレスにアクセスできます。その他のプロフィール情報にアクセスしたり、利用者に代わってFacebookでコンテンツを公開したりするには、そのために必要なアクセス許可をリクエストする必要があります。

  • デフォルト公開プロフィールフィールド - 基本プロフィール情報へのアクセスを許可します。

  • 読み取りアクセス許可 - 利用者がFacebookプロフィールに追加するその他のすべての情報は、他の読み取りアクセス許可によって保護されています。

  • 書き込みアクセス許可 - 利用者に代わってコンテンツを投稿するアプリには、投稿アクセス許可が別途必要です。

アプリでアクセス許可を管理する方法は次のとおりです。

  • アプリが他の人にFacebookリクエストを送信する際、必要なアクセス許可を確認して、必要に応じてリクエストしてください。

  • アプリでは、Facebookで不足しているアクセス許可のエラーについて、アクセス許可をリクエストし、再試行して対処してください。

  • アプリの利用者はFacebookでアクセス許可を撤回できますが、アプリ内でアクセス許可を実装することもできます。

  • ログイン全体を取り消すメカニズムを実装して、利用者がアプリから基本ログイン権限を削除できるようにすることも可能です。

提供されている各種のアクセス許可について詳しくは、アクセス許可に関するガイドをご覧ください。

利用者は投稿アクセス許可を付与することに慎重であるため、初回ログイン時ではなく、利用者があなたのアプリから何かを投稿する準備ができたときに初めて、投稿アクセス許可をリクエストするようにしてください。

追加のアクセス許可の取得

基本ログイン時、アプリでは利用者の公開プロフィールとメールアドレスにアクセスできます。その他のプロフィール情報にアクセスしたり、その人の代わりにFacebookでコンテンツを公開したりするには、必要なアクセス許可をリクエストする必要があります。

この例では、user_statusを取得します。これらのアクセス許可を、LoginButtonボタン、またはログインとアクセス許可用のカスタムUIに渡すことができます。

MainFragmentクラスで、onCreateView()のコードを次のように変更します。

...
LoginButton authButton = (LoginButton)view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList("user_status"));

return view;
...

読み取りアクセス許可の取得

LoginManagerはシングルトンインスタンスであり、AccessTokenのcurrentAccessTokenと連動します。正常なログイン後、currentAccessTokenが設定されます。追加のアクセス許可は、logInWithPermissionNameメソッドを呼び出すだけでリクエストできます。

logInWithPermissionNameメソッドは常にUIを開き、必要に応じて利用者に追加のアクセス許可をリクエストします。利用者から追加のアクセス許可を取得するには、Android用Facebook SDKで次のリクエストを行います。

LoginManager.getInstance().logInWithReadPermissions(
    fragmentOrActivity,
    Arrays.asList("email"));

これを使用して、まだアプリに付与されていないアクセス許可をリクエストします。これは初回ログイン後に使用できます。

アクセス許可のリファレンスにリスト表示されているほとんどの読み取りアクセス許可をリクエストできます。

投稿アクセス許可の取得

利用者のログイン中、読み取りアクセス許可や投稿許可はいくつでもリクエストできます。5つ以上のアクセス許可のリクエストがあると、利用者がログインを完了する割合が非常に少なくなります。

2018年4月24日以降、pubish_actionsアクセス許可は削除されています。詳しくは重要な変更の更新履歴をご覧ください。アプリユーザーがFacebookにコンテンツをシェアできるようにするために、シェア製品を代わりに使うことをおすすめします。

ログイン時にpublish_actionsで投稿アクセス許可をリクエストすると、そのログインUIで2番目のステップが設けられます。したがって、ログイン時は最小限の読み取りアクセス許可をリクエストし、実際に許可が必要になったときに、追加のアクセス許可や投稿アクセス許可をリクエストするようにしてください。アクセス許可リクエストを最適化する方法については、アクセス許可の最適化をご覧ください。

アプリで投稿アクセス許可をリクエストするには、LoginManagerを使用できます。

LoginManager.getInstance().logInWithPublishPermissions(
    fragmentOrActivity,
    Arrays.asList("publish_actions"));

これにより、アプリがログイン時にすでに取得したアクセス許可以外のアクセス許可がリクエストされます。

アクセス許可リクエストの再送信

利用者は、リクエストされたアクセス許可のサブセットのみを付与できます。ただし、ログイン時に付与されるpublic profileは例外です。

現在のアクセストークンと関連付けられているアクセス許可のリストを取得するには、以下を呼び出します。

AccessToken.getCurrentAccessToken().getPermissions();

却下されたアクセス許可のリストを取得するには、以下を呼び出します。

AccessToken.getCurrentAccessToken().getDeclinedPermissions();

リクエストしたアクセス許可のいずれかを利用者が却下したケースに、アプリが対応できるようにしておいてください。アプリが動作するために却下されたアクセス許可のいずれかが必要な場合は、上記の例のように、LoginManagerを使用して再度リクエストできます。

ログインレビュー

Facebookログインを実装すると、その利用者のデータのサブセットへのアクセス許可を任意でリクエストすることができます。

デフォルト公開プロフィールフィールドとメールアドレス以外のデータをアプリがリクエストする場合、アプリのリリース前にFacebookによる審査が必要になります。審査プロセスと、審査にパスするための条件について詳しくは、次をご覧ください。

ログインレビューガイド