Facebook APIで項目が取得できない!パーミション(権限)についてまとめてみた


b_permissons_01
Facebook APIを使って、ログインしているユーザさんのプロフィール情報を取得しようとしたら一部の情報が取得できない!ということがありました。いろいろ調べたので備忘録します。
やろうとしたことはユーザさんの新規会員登録をFacebookログインから行うというよくある内容です。紐づけたあと新規登録の入力画面で名前などを入力してもらうのですが、そのときFacebookから取得できるユーザ情報は、できるだけはじめから補完しておきます。

サンプル事例

b_permissons_02
例として次のような流れを考えてみます。

  • クライアント(自社サイト)に「Facebookで新規会員登録ボタン」を配置します。
  • ユーザさんはそのボタンをクリックし、しばらくはFacebookとのやり取りが続きます。
  • ユーザさんがクライアントに情報を渡して良いと承認を出せば、Facebookはアクセストークンをクライアントに渡します。

ここまでは、「FacebookとSNS連携!SDKを使わずにOAuth2でアクセストークン取得する/PHP」でまとめました。

  • クライアントはユーザのプロフィール(ユーザ)情報をくださいとFacebookにお願いします。
  • Facebookはユーザさんが許可した範囲内でプロフィール(ユーザ)情報をクライアントに渡します。
  • クライアントは新規会員登録画面をユーザに表示します。そのとき、名前などFacebookから取得できた情報ははじめから入力された状態(入力補完)しておきます。
  • ユーザさんは残りの項目を入力し新規会員登録を行います。

ここまでは、「FacebookとSNS連携!SDKを使わずにユーザ情報取得/PHP」でまとめました。

このとき、ユーザさんがFacebook上で公開しているはずの情報であるメールアドレスや誕生日が取得できません。調べてみると、たとえユーザさんが公開していてもFacebookが指定した一部のデフォルト項目以外はパーミション設定をしてユーザさんまたはFacebookの承認がないと情報が取得できないようです。

Facebookのレビューがいるパーミションがある

b_permissons_03

【参考】Facebook developer > Permissons#categories

パーミションの分類ですが、大きく分けてFacebookによるレビューがいるものと、いらないものがあります。
b_permissons_04

Facebookによるレビューのいらないパーミションの情報だけを取得したい場合は、ユーザさんの承認だけもらえれば情報が取得できます。
上記画像は、API:dialog/oauthでscopeを何も指定しない場合です。公開プロフィールの一部だけ取得できます。scopeの指定は「FacebookとSNS連携!SDKを使わずにOAuth2でアクセストークン取得する/PHP」に記載しました。

b_permissons_05

scopeにFacebookのレビューが必要なパーミションを指定し、まだレビューが終わってない場合は、たとえユーザさんが承認しても情報が取れませんでした。上記図では、誕生日がレビューがいる項目です。
もし、ユーザがアプリの開発者として登録しているアカウントであるならば、上記図のように「レビューしてください」のようなメッセージが出ます。開発者モードですね。リンクをクリックしたらレビューガイドラインのページなどに遷移するので参考になります。

審査にどのぐらい時間がかかるの?ってことで調べてみたらFacebookのサイトには以下のように書かれていました。

一般的に3営業日以内で審査されるが、一部の権限は7日ほどかかることもある。

【参考】Facebook developer > Permissons#requirereview

Facebookのレビューがいらない項目って?

b_permissons_06

Facebookのレビューがいらない項目には以下のようなものがあります。

  • 公開プロフィールの一部(※デフォルト)
    (※Facebookが指定している項目)

    id ユーザID
    name 氏名
    first_name 名前
    last_name 名字
    age_range 年齢が含まれる範囲
    link プロフィールページへのリンク
    gender 性別
    locale 住所
    timezone タイムゾーン
    updated_time 更新日時
    verified ユーザー確認済みチェック
  • 同じアプリを使用する友人のリスト(※オプション)
  • メインのメールアドレス(※オプション)

public_profile

b_permissons_07

公開プロフィールの一部の取得はパーミション「public_profile」です。でもデフォルトなので何もパーミションを指定しなくてもこの情報は取得できました。

user_friends

b_permissons_08

同じアプリを使用する友人のリストの取得はscopeに「user_friends」を指定します。

email

b_permissons_09

メインのメールアドレスの取得はscopeに「email」を指定します。

Facebookのレビューがいる項目って?

それ以外の項目を取得したい場合は、基本Facebookのレビューがいります。APIを使った悪用を防止するためですかね。
b_permissons_10

レビューがいる項目の分類にも、「ユーザさんが公開しているかどうかに関係なく、機密性が高い特徴項目」も対象と書かれています。

レビューのいる項目のパーミションは非常に多いです。どのようなものがあるかは「Facebook Developer >> Permissions#reference」が参考になります。
b_permissons_11
また、レビューのいる項目のパーミションには、「このパーミションにはレビューいるよ!」って書かれています。

Facebookのレビューを通るまでテストできないの?

開発してたらアプリ完成前に情報取得してテストしたいことがあります。それもレビューは完成品でないと、まだ開発中だねとリジェクト食らうようです。
では、どうやってテストするのかというとFacebook側で「Graph API Explorer」というツールを準備してくれてます。

b_permissons_12

Graph API Explorer」にアクセスします。
b_permissons_13
アプリも選択できるので選択し、「Get Token >> Get Access Token」クリックします。既にアクセストークンが発行されている場合は変更作業になります。
また、このツールとアプリが連動しているようで、サイトで開発者アカウントでFacebookログインしたら自動的にツールにアクセストークンが入力されていました。

b_permissons_14

「Get Token >> Get Access Token」クリックしたら、パーミションをチェックする画面が表示されます。これで承認したいパーミションを選択します。「Get Access Token」ボタンをクリックします。

fb_permissons_15

ユーザさんがログインするときに承認を取る画面が表示されます。OKをするとアクセストークンのパーミションが取得(または更新)されます。

このツールを使えば、一旦パーミションを承認してしまったアカウントに対してパーミションを取り消したり追加したりして自由にテスト可能です。

まとめ

以前と比べてSNSも情報に関する扱いに対して厳しくなってきてるようです。また補完は多めの方がユーザビリティはいいのですが、それをするためにユーザさんに対していろいろな情報を取得します!って承認とるのも不信感を抱かせますね。
それに、アカウントの申請に一部のパーミションに対してはレビュー審査の申請とサイト制作者の負担もかかりますし、サイト制作を依頼するお客さんにも負担かかります。
基本はここまでの情報取得で、それ以上はこういう負担がありますよって打ち合わせや設計段階で大事かなと思いました。


[facebook API 関連記事]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です