iOSのFacebook SDKを使ってFacebookログイン機能を実装していて、ユーザーの情報を取得する必要が生じた。
FBSDKGraphRequestを利用する時にパラメータを渡せばいいのは知ってたけど、どんなパラメータがあるのかわからなかったので、公式ドキュメントで探してみた。
##パラメータ一覧
下記のURLを参照。
https://developers.facebook.com/docs/graph-api/reference/user
だが、ユーザーがFacebookアプリを承認してくれたからといって、全部取得できると思ったら大間違い。
まず、プロフィール情報を取得するためにはパーミション「public_profile」が必要。
そして、public_profileで取得できない一部パラメータは、Facebookのレビューが必要。
##public_profileで取得可能なパラメータ
キー | 概要 |
---|---|
id | ユーザーID |
メールアドレス | |
first_name | 名前 |
last_name | 苗字 |
gender | 性別 |
link | ユーザーのFacebookページURL |
locale | 地域 |
name | 氏名(苗字と名前を半角スペースでつないだもの) |
timezone | タイムゾーン |
updated_time | 更新日時 |
verified | ユーザー確認済みチェック |
↓2016/01/29追記
コメントにて「最新のAPIではメールアドレスが取得できなくなっているような気がするんですが取得できますか?」と指摘があったので補足。
上記表の中のメールアドレスを取得するためには、public_profileパーミッションだけでなくemailパーミッションも必要。
うっかりして書き忘れてた、ごめんなさい。
下記のコードでメールアドレスが取得できると思う。
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login
logInWithReadPermissions: @[@"public_profile",@"email"]
fromViewController:viewController
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
NSLog(@"Process error");
} else if (result.isCancelled) {
NSLog(@"Cancelled");
} else {
NSLog(@"Logged in");
if([FBSDKAccessToken currentAccessToken] != nil){
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"me" parameters:@{@"fields": @"email"}];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (error) {
NSLog(@"error");
}
}];
} else {
NSLog(@"Token is nil");
}
}
}];
##public_profileで取得できないパラメータ
たくさんあるので、下記のURLを参照。
例えば、誕生日を取得するためには「user_birthday」パーミッションが必要で、「user_birthday」はFacebookのレビューが必要なパーミッションとなっている。
※赤枠のところに「使うためにはレビューが必要だよ」って書いてある
##プロフィール画像を取得する
パラメータにpictureがあるので、それを使うと取得することは可能。
でも取得した画像のURLを見てみると、画像がかなり小さい。
そんなわけで、大きい画像を取得できるURLがないか調べてみたら、下記のURLで取得できることがわかった。
http://graph.facebook.com/(facebook_id)/picture?type=large&width=1080&height=1080
(facebook_id)には取得したいFacebookユーザーのFacebook IDを代入する。
でも、下記のURLにするとJSONが返ってくるので、その中のurlの値を使ったほうがいいかもしれない。
http://graph.facebook.com/(facebook_id)/picture?type=large&width=1080&height=1080&redirect=false
{
"data": {
"height": 1536,
"is_silhouette": false,
"url": xxx,
"width": 1536
}
}
↓2016/01/23追記
FacebookSDKを使ってプロフィール画像のURLが取得できた。
// プロフィールの画像をURLから生成
[FBSDKProfile setCurrentProfile:[[FBSDKProfile alloc] initWithUserID:(facebook_id)
firstName:nil
middleName:nil
lastName:nil
name:nil
linkURL:nil
refreshDate:[NSDate date]]];
NSURL *profilePictureURL = [[FBSDKProfile currentProfile] imageURLForPictureMode:FBSDKProfilePictureModeSquare size:CGSizeMake(400, 400)];
##参考URL
Facebook APIで項目が取得できない!パーミション(権限)についてまとめてみた
iOS: UIImage is not assignable (FBSDKGraphRequest)
Facebook iOS SDK and swift: how get user's profile picture