17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[iOS]Facebook Graph APIを使って、Facebookアプリを承認しているユーザーのプロフィールを取得する際のパラメータ

Last updated at Posted at 2016-01-18

iOSのFacebook SDKを使ってFacebookログイン機能を実装していて、ユーザーの情報を取得する必要が生じた。
FBSDKGraphRequestを利用する時にパラメータを渡せばいいのは知ってたけど、どんなパラメータがあるのかわからなかったので、公式ドキュメントで探してみた。

##パラメータ一覧

下記のURLを参照。

URL
https://developers.facebook.com/docs/graph-api/reference/user

だが、ユーザーがFacebookアプリを承認してくれたからといって、全部取得できると思ったら大間違い。
まず、プロフィール情報を取得するためにはパーミション「public_profile」が必要。
そして、public_profileで取得できない一部パラメータは、Facebookのレビューが必要。

##public_profileで取得可能なパラメータ

キー 概要
id ユーザーID
email メールアドレス
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のレビューが必要なパーミッションとなっている。

スクリーンショット 2016-01-18 14.27.22.png

※赤枠のところに「使うためにはレビューが必要だよ」って書いてある

##プロフィール画像を取得する

パラメータにpictureがあるので、それを使うと取得することは可能。
でも取得した画像のURLを見てみると、画像がかなり小さい。

そんなわけで、大きい画像を取得できるURLがないか調べてみたら、下記のURLで取得できることがわかった。

URL
http://graph.facebook.com/(facebook_id)/picture?type=large&width=1080&height=1080

(facebook_id)には取得したいFacebookユーザーのFacebook IDを代入する。

でも、下記のURLにするとJSONが返ってくるので、その中のurlの値を使ったほうがいいかもしれない。

URL
http://graph.facebook.com/(facebook_id)/picture?type=large&width=1080&height=1080&redirect=false
JSON
{
   "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

17
16
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?