Facebook Graph API がバージョニングを始め、v2.0を提供するにあたって、今まで一意だったUser ID(Original User ID)の代わりに、アプリ個別のUser ID(App-scoped User ID)が返ってくることになった。
これからFacebookアプリを作る人は大丈夫だが、既存のアプリを移行する+Web版もMobile App版も存在するとなると、話は結構ややこしくなる。
ここでは、そういった話についてまとめる。
基本的な移行時の挙動
- v2.0の時にユーザー登録した人はApp-scoped IDになる。
- v1.0の時に既にユーザー登録していた場合App-scoped IDはOriginalのままになる
バージョンが混ざった時の挙動
携帯ではv1.0, Webではv2.0になっているということもあるのでそういった時に生じる挙動
- v2.0で新規作成されたユーザーがv1.0でアクセスすることも出来る
- v2.0でApp-scoped IDが付与されると、v1.0でアクセスしてもそのApp-scoped IDが返ってくる
- 一度v2.0でログインしてしまうと友達情報はアプリを使っている友達のみの情報になってしまう
Once a user has logged into an app using version 2.0 (or later), calling this edge for v1.0 will continue to return the later version's response.
https://developers.facebook.com/docs/graph-api/reference/v1.0/user/friends
ここでv1.0の結果が返ってくるかどうかは
https://developers.facebook.com/tools/debug/accesstoken
のUser IDの項目にUser last installed this app via API v1.0
と書いているかどうかで判断できるみたい。
(どこにも書いてないけど、実験した限りそうっぽい。)
ユーザーのアプリ間での同一性判定について
2015年の5月以降に全く別のアプリで同じユーザーを突合するのは基本的には不可能になった。
v1.0ではID的な役割であったusername
というものもあったが、それもv2.0では廃止になっている。
もちろん、名前とかプロフィールとかを総合的に見て、賢く突合する事はできるし、2つの異なるアプリのApp-scoped User IDが同じ人のものかどうかは、リダイレクトを元に判断できる。(今後リダイレクトしなくなる可能性もあるけど)
大量のUser IDのリストのマッピングは、賢くやれば出来るとはいえ、とてもめんどくさくなっていると言える。
ただし、同じ会社のアプリなどでは、Business Manager を用いると対応マッピングを得ることが出来る。
バージョンを指定しないアクセス、古いバージョンのアクセスについて
- バージョンを指定しないアクセスは、その時そのアプリが使える一番古いAPIアクセスになる
- APIのバージョンが期限切れになった場合、期限が切れていない一番古いAPIアクセスになる