Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

Facebookのユーザデータ取得について備忘録

少し前に自分が仕事でやった所ですが、
他にこういう情報まとめているところなかったのでまとめる事にしました。


FacebookにはOAuthを用いたユーザ認証の機能が提供されています。
この認証の設定、実装部分については次の記事などに記載がされています。

FacebookのOAuth認証その1:準備編 | cloudpack技術情報サイト


ここでOAuth認証を行った後、認証したユーザの登録情報(メールアドレスなど)を取得する機能の実装を行いました。
取得用APIについては下記に書かれています。

2015年7月9日以降にFacebook認証でメールアドレスが取れない問題とその対策 – paiza開発日誌

この「ユーザデータの取得」の段階で自分が引っかかった部分、
分かりにくかった部分などがあったためそこを備忘録としてまとめます。
これは「上記の実装までは終わった。しかし個々のパラメータの取得でつまづいた」という段階のためのものです。
公式ドキュメントをよく読むと書いてあったりするんですが、そもそも問題が起こらないと認識しにくいようなものばかりで……


また、Facebookは仕様変更が結構よく行われます。
これは2016年9月時点の情報であり、もし時間が経ってからこの記事に辿り着いた方がいればその事を念頭に置いてもらえると助かります。


・氏名はデフォルトでは英字が入ってる

ここに対しては、APIのパラメータで言語設定を指定する事で日本語の氏名が取得できました
下記のページなどを参考にしました。

FacebookのGraph APIで日本語表記の名前を取得する方法 – F.Ko-Jiの「一秒後は未来」


・日本語の氏名ふりがなは取得できない(と思う、今は)

書いてある通りで、そもそもこれを取得するパラメータがありませんでした。

取得する方法がないか調べるにあたり、過去の記事でこのようなものを見かけました。
以前はGraph APIの他にFQLという形式でもデータ取得を受け付けていたようですが
今はそれが廃止されており、ここに書いてあるパラメータも受け付けていませんでした。

FQL:ユーザ名のフリガナを得る方法 : Facebook開発者向けドキュメントの日本語訳とTips


・デフォルトでアクセスが許可されているのは「年齢層」で、生年月日は許可されていない。

 公開情報はデフォルトでデータ取得可能なのですが、
 そこに入っているデータは年齢層(age_range)で、生年月日(birthday)は含まれていません。
 生年月日を取ろうとするとFacebook側にレビューをする必要が生まれます。
 要はFacebookにサービス内容を審査してもらうのですが、
 ここで要求される要件は「年齢に応じて提供されるコンテンツ・機能が変わる」事であり、
 単にサービス側が利用者の年齢情報を収集するのが目的では許可されないとの事。

 自分の感覚的には不可解なんですが、どうもFacebookのポリシーでは

 ・メールアドレスや氏名はデフォルトでアクセスできる情報
 ・生年月日はサービス上利用する必然性がない限りアクセスを許可できない情報

 と考えているみたいです。


・Graph APIエクスプローラでは、アクセスが許可されていない項目も取得できる

 Graph APIエクスプローラという、APIの動作やパラメータを確認するツールがFacebookから提供されています。

63c00dab31bdb6647ad593922231c5fc

5fa2b16cd4a41db3ef3e9c7d3b0aa0a3

 ここの右上のGet User Access Tokunをクリックするとユーザアカウントのパーミッション設定ができます。
 ここのパーミッションに表示される項目は、アプリで本来許可されていないものも全て含みます。

abe9875a685292775191a1b953f15c13

 ユーザアカウント側で情報提供の許可を出すと、そのデータもGraph APIエクスプローラで取得できるようになります。
 そしてこの状態で通常のAPIでアクセスするとその情報も取得できてしまいます。

 つまり、少しややこしいのですが、

 1. Graph APIエクスプローラで、デフォルトでは許可されない項目の許可を(ユーザアカウントに対して)セットする
 2. そのユーザアカウントで実際のAPIにアクセスする。
 3. この時、アプリがアクセス許可していなくてもユーザアカウントが許可していればそのデータを取得できる。

 色々試行錯誤している内に自分のアカウントがそのような状態になっており、
 それで自分のアカウントだけ誕生日が取得できて他のアカウントでは取れない状態になってました。 

 最初ここの仕様の把握が不十分で、何でデータが取れないのかかなり長い間詰まりました。


・メールアドレスが登録されていないユーザアカウントが存在する。

 これもドキュメントには書いてあるんですが、
 気付かないとそもそも考え付かないであろうネタです。
 いつからか分かりませんがFacebookが電話番号でのユーザ登録を許可するようになり、
 そのままメールアドレス登録せずに使ってるというケースです。
 そもそもユーザがメールアドレス登録していないという話なので、
 上記のパーミッションとは別の問題になります。

 自分はユーザデータにメールアドレスが必ず入っている事を前提に考えていたので
 メールアドレスが取れないケースが発生して何かと思い調べたら見つかったケースです。

TrackBack URL :

Leave a comment  

name

email

website

Submit comment