Androidはワンツーパンチ 三歩進んで二歩下がる

プログラミングやどうでもいい話

AndroidアプリでFacebookのパーミッションを取得した話

このポストではFacebook API ver2.0 / Graph API v2.4の時点の情報を書いています。


FacebookのGraph APIを利用したAndroidアプリを作りました。
そのアプリはデモアプリみたいなもので、画面のデザインや素材作成も含めて製作期間は一週間ぐらいの小さなものです。
その時にFacebookに権限を申請したので経緯をまとめておきます。

まずは参考にさせていただいたサイト様にお礼を。

snowadays.jp

こちらのサイト様はこのページ以外もFacebook関係の記事が豊富でとても助かりました。
本当にありがとうございます。おかげでなんとか審査に通過いたしました。


Facebookは2014年4月にAPI2.0にバージョンアップする際に大幅に仕様変更しています。
中でも大きな違いは、public_profile、email、user_friends以外の権限を要求するアプリはFacebookに審査を申し込んで取得しなければいけなくなりました。

developers.facebook.com

snowadays.jp


私が申請したパーミッションはuser_postsとuser_likesでした。
これはユーザーがポストした内容を取得する権限とユーザーがいいね!した項目を取得する権限です。
各権限の情報は公式サイトのこちらに記載されています。

developers.facebook.com


アプリ準備

FacebookSDKを使ったり、権限を必要とする処理のあるアプリを作成する場合、Facebookデベロッパーサイトからアプリを登録する必要があります。アプリ登録については手前味噌で恐縮ですが、こちらのエントリーを見ていただければと思います。

sakura-bird1.hatenablog.com

アプリを作る

ログイン

FacebookSDKを導入して、アプリを作っていきます。
アプリでFacebookのGraph APIを使用する場合、たいていはアクセストークンを必要とします。
アクセストークンはいくつか種類がありますが、多くの場合ユーザーアクセストークンを必要とします。
ユーザーアクセストークンはユーザーにログイン画面からログインしてもらい、Facebookに認証されることで取得できます。
ログインの際に必要なパーミッションを要求することで、そのアプリが必要とする権限を有したアクセストークンが取得できます。

developers.facebook.com


Androidのログイン部分について簡単にまとめた記事があります。
LoginManagerのlogInWithReadPermissionsメソッドを使用してパーミッションを列挙します。

sakura-bird1.hatenablog.com

権限のテスト

ここで、まだFacebookパーミッションを申請もしていないのにどうやってパーミッションが必要な処理のテストをすればよいかという疑問が起こると思います。

参考サイト様のこちらのエントリーにて詳しく説明してくださってますのでご覧ください。
申請の時にレビュアーに使ってもらうテストユーザーを作成するとよいと思います。

snowadays.jp


アプリ完成

いきなりですがアプリが完成したとします。
(このエントリーはパーミッション取得にフォーカスしていますので途中の紆余曲折を端折っております。)
が、実は完成とまで行かないけどFacebookの権限使用部分は再現できるという段階でも申請可能なようです。
私のアプリもプロダクトレベルのアプリにするにはまだまだ作りこむべき点が多い状態でしたが、申請して承認されました。
あくまでも私の体験ですので、確実ではないですよー。

パーミッション申請前に、これらのことに注意してください。

・現在のアプリで必要としている以上の権限を申請しないこと
パーミッションを使用することでユーザーエクスペリエンスが改善されること
Facebook Platform Policyを遵守していること
・ログインのベストプラクティスに従っていること
(https://developers.facebook.com/docs/facebook-login/best-practices)


パーミッション申請準備

App Detailsを埋める

いよいよパーミッションを申請するわけですが、前述のこちらのサイト様にあるように必要事項を埋めていきます。
デベロッパーサイトのタイトルバーのMy Apps > アプリ > App Derailsあたりです。

snowadays.jp

私のアプリはこの画像のように指定しました。こんなんじゃだめかなーと思いましたが大丈夫だったのでお恥ずかしいですが、載せて起きます。

f:id:sakura_bird1:20151003162827p:plain

f:id:sakura_bird1:20151003162843p:plain

テストユーザーの準備

上でも少し触れましたが、レビュアーがパーミッションを使った機能を再現出来るようにテストユーザーを用意しておくとよいと思います。
レビュアーは実際にログインや投稿などもしますので、安全のためにもテストユーザーを使ってもらうようにするといいでしょう。

私はuser_postsとuser_likesを使ったデータを表示するため、テストユーザーで何件か投稿し、ページを作成していいね!しました。
さらに投稿部分といいね!部分のスクリーンショットも用意しておきました。


qiita.com

スクリーンショットの準備

アプリの動きがわかるようスクリーンショットを用意しておきます。最低4枚です。
私はログインダイアログ、ユーザーが許可する画面、申請するパーミッションを使ったデータが表示されている画面、テストユーザーのfeedといいね!の画面(Web) のスクリーンショットを用意しました。
他にもアプリの機能はあるのですが、パーミッションに関係ない部分だったのでスクリーンショットを付けなかったのですが問題なかったみたいです。

2回ほど申請をリジェクトされたので、念を入れてスクリーンショットには番号と説明文を赤字で入れておきました。
一例を挙げておきます。英語がよくわからなくてきっと変です(;´Д`)


パーミッション申請

公式サイトはこちらです。developers.facebook.com

なお、申請は英語で記述します。私は全然自信がないのですがレビュアーさんも慣れているのか?下手くそでも大丈夫でした。

申請前の確認事項

申請の前に、できるだけスムーズに処理を行えるよう次の点を確認しましょう。

・App Detailsの"App Icon","Long Description","Privacy Policy"欄を埋めておきます。
パーミッションのテスト

1.Facebookのログインダイアログに必要な権限を表示しているか確認して下さい。
2.テスト可能な複数のユーザーでテストして下さい。テストユーザー同様、Developers, Admins, Testersを含みます。
3.Read Permissionsを使う場合、それぞれの権限を使用する内容にアプリがアクセス出来るようにして下さい。
4.Write Permissionsを使う場合、期待したようにポスト出来るようにして下さい。

 Rolesタブの中のユーザーはパーミッションのテストが出来ます。
 これらのアカウントを使用してもエラーが発生する場合、デバッグツールここをクリック)にアクセストークンをペーストし、次のことを確認します。
 1.App IDが申請する対象のものになっているか
 2.User IDはRolesタブ内に記述されているユーザーのものになっているか
 3.デバッグツールのScopesの欄に申請するパーミッションが入っているか

 これらを確認してまだエラーになる場合、
https://developers.facebook.com/bugsにアクセストークンとどのAPIリクエストを行おうとしたかを説明し、英語で報告して下さい。

申請を開始する

App Dashboard > Status & Review > 「Start a Submission」ボタンをクリックします。

レビュー対象のパーミッションを選択する

選択したら「Add (x) Items」ボタンをクリックします。

権限ごとに説明を記述する

「Add Notes」ボタンが表示されるのでそれぞれ説明を記述します。
パーミッションを使うことでどのようにユーザーエクスペリエンスが向上するか、アプリでどのようにパーミッションを使用する機能を使っているかを記述していきます。
これは公式サイトの画像です。

https://scontent.xx.fbcdn.net/hphotos-xtp1/t39.2178-6/11891338_1621998478087617_1216753649_n.png

私はこんな風に書きましたよ。
Notes for user_posts

Login with Facebook to the "XXXXXX App."
Accept the "user_posts" permission.
"XXXXX App." will display a list of the user's posts on the top page of left hand side
 of the tabs which use the "user_posts" permission.
 If user click  the one of posts, app shows Facebooks page of the post on the browser.
 And user can save each posts to the "favorites" so that user can access easily and faster.

申請フォームを完成させる

スクリーンショットをアップロードする
・APKをアップロードする
Facebook Login Integrationにアプリで権限を使用するフローを説明する

レビュアーが再現出来るよう手順を書きます。
ここでレビュアーに使って欲しいテストユーザーも明記しておきます。
私はこれをやらず「Test User(optional)」欄にテストユーザーを書いたから大丈夫だろうと思っていましたが、リジェクトされてしまいました。

私はこんな風に書きましたよ。
Facebook Login Integration

Hi, reviewer! Please examin my submission.

1. Launch the app.
2. The app shows the dialog. It says that this app needs to login to facebook.
3. Click OK.
4. Login screen will appear from Facebook SDK.
5. Please log in with this account.
   id : xxxxx_rosenthalsky_1442809748@tfbnw.net
   password : xxxxxx
6. Agree to the permission.
7. "XXXXX App." will get user's recent posts and likes that will appear on the two tabs.(I attached the screenshots No.5 and No.6)
8. On the evidence, you can see the screenshots from No.7 to No.8 that is the test users page you logged in.


Test User
name:Jennifer Alakchgjibbi Rosenthalsky
id:1524507284xxxxx
mail:xxxxx_rosenthalsky_1442809748@tfbnw.net
password:xxxxxx

thanks.

申請実行

「Submit for Review」ボタンをクリックして申請します。
7営業日かかるかもとありますが、2日ぐらいで結果がきました。シルバーウィークでも結果がきたので日本の祝日でもやってくれるみたいですね。まあそうですよね。

感想はめちゃ大変だったです。
このエントリーがどなたかの稼働時間を減らす助けになれればと思います。

以上です。