web-dev-qa-db-ja.com

Facebook Graph API GETリクエスト-「fields」パラメーターを含める必要があります(Swift、Facebook SDK v4.5.1)

私のiOSアプリは、サインアップ中にFacebookのGraph APIリクエストを使用してユーザー情報を取得します。これは、Facebookの最新のSDKにアップグレードする前に正常に機能していました。アップグレード後、「FBSDKLog:Graph API v2.4以降、/ meのGETリクエストには明示的な「フィールド」パラメータが含まれている必要があります」という実行時エラーが表示されます。

コードは次のとおりです。

func requestFacebook() {

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            println("Error: \(error)")
        }
        else if error == nil
        {
            let birthday : NSString = (result.valueForKey("birthday") as? NSString)!

            var currentDate = NSDate()
            var birthdayFormatter = NSDateFormatter()
            let userCalendar = NSCalendar.currentCalendar()
            birthdayFormatter.dateFormat = "MM/DD/YYYY"
            var birthdayNSDate = birthdayFormatter.dateFromString(birthday as String)

            var userAge = self.calculateAge(birthdayNSDate!)

            PFUser.currentUser()!["age"] = userAge

            var facebookID: NSString = (result.valueForKey("id") as? NSString)!
            var pictureURL = "https://graph.facebook.com/\(facebookID)/picture?type=large&return_ssl_resources=1"

            var URLRequest = NSURL(string: pictureURL)
            var URLRequestNeeded = NSURLRequest(URL: URLRequest!)

            NSURLConnection.sendAsynchronousRequest(URLRequestNeeded, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!, error: NSError!) -> Void in
                if error == nil {
                    var picture = PFFile(data: data)
                    PFUser.currentUser()!["picture"] = picture
                    PFUser.currentUser()!.saveInBackgroundWithBlock({ (success, error) -> Void in
                        if error == nil {

                            var userPicture:PFFile = PFUser.currentUser()!.valueForKey("picture") as! PFFile
                            userPicture.getDataInBackgroundWithBlock { (imageData, error) -> Void in
                                if error == nil {

                                    self.meProfileImageView.image = UIImage(data: imageData!)
                                    var userName:String = PFUser.currentUser()!.valueForKey("username") as! String
                                    var userAge:Int = PFUser.currentUser()!.valueForKey("age") as! Int
                                    self.meLabel.text = "\(userName), \(userAge)"

                                    self.findFriends()

                                }
                            }

                        } else {
                            println(error)
                        }
                    })
                }
                else {
                    println("Error: \(error.localizedDescription)")
                }
            })
        }
    })
}

エラーメッセージは次の行にあります。

let birthday : NSString = (result.valueForKey("birthday") as? NSString)!

このコードは、FacebookのSDK v4.5.1にアップグレードする前に完全に正常に実行されましたが、この機能を動作させるために何を変更すればよいかわかりません。私を助けてくれる人に感謝します!

55
Armin

この行には、nilではないパラメーター値が必要です

let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)

たとえば、さらに展開しますが、これは疑似コードです。

したがって、ObjCの場合、これはたとえば次のようになります。したがって、上記は次のようになります。

parameters:@{@"fields": @"id, name"}

Swiftでは、似たようなものになります

このようなもの:

parameters:["fields": "email"]

これはたった2つのフィールドのためのものであり、これも擬似コードですが、パラメータを指定する必要があります


UPDATE:

このアップデートを追加して、上記のフィールドのパラメータを見つけた人に見せるために、クイックリンクを示します:

Paramtersのフィールド情報は次のとおりです(これはFBSDKでほぼ静的なままである必要があります。これは「コア」であり、実際にはそれほど変化しませんが、できる限り更新します)。

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

以下の情報の形式は次のとおりです。私はこれをすぐに行いました。

"parameter" "type"

"description"

id数値文字列

このユーザーのユーザーアカウントのID。このIDは各アプリに固有であり、異なるアプリ間で使用することはできません。アップグレードガイドには、アプリ固有のIDに関する詳細情報が記載されています

about文字列

この人のプロフィールの[自己紹介]セクション

age_rangeAgeRange

この人の年齢区分は、最低年齢と最高年齢として表されます。たとえば、18を超え、21未満です。

bio文字列

人のバイオ

誕生日文字列

人の誕生日。これは、MM/DD/YYYYのような固定形式の文字列です。ただし、生まれた年を月と日とは別に見ることができる人を制御できるため、この文字列は年(YYYY)または月+日(MM/DD)のみになります

contextUserContext

この人の社会的背景

通貨通貨

その人の現地通貨情報

デバイスリスト

その人が使用しているデバイスのリスト。これは、iOSおよびAndroidデバイスのみを返します

educationリスト

人の教育

email文字列

プロフィールにリストされている個人のメインのメールアドレス。有効なメールアドレスが利用できない場合、このフィールドは返されません

favorite_athletesリスト

人が好きな選手

favorite_teamsリスト

人が好きなスポーツチーム

first_name文字列

人の名

gender文字列

この人が選択した性別、男性または女性。性別がカスタム値に設定されている場合、この値は省略されます

hometownページ

人の故郷

inspirational_peopleリスト

人の心に強く訴える人々

install_typeenum

インストールタイプ

installedbool

リクエストを行っているアプリはインストールされていますか?

interested_inリスト

その人が興味を持っている性別

is_shared_loginbool

これは共有ログインですか(グレーのユーザーなど)

is_verifiedbool

多数のフォロワーを持つ人々は、自分の身元の信ity性をFacebookによって手動で検証できます。このフィールドは、個人のプロファイルがこの方法で検証されるかどうかを示します。これは検証済みフィールドとは異なります

言語リスト

この人が知っている言語を表すFacebookページ

last_name文字列

人の姓

link文字列

その人のタイムラインへのリンク

locationページ

プロフィールに入力された人の現在の場所。このフィールドはチェックインとは関係ありません

locale文字列

人のロケール

meeting_forリスト

人が会議に興味を持っているもの

** middle_name文字列

人のミドルネーム

name文字列

人のフルネーム

CoreDefault

name_format文字列

中国語、日本語、または韓国語の注文を正しく処理するようにフォーマットされた個人の名前

payment_pricepointsPaymentPricepoints

その人の支払い価格

test_groupunsigned int32

プラットフォームテストグループ

political文字列

人の政治的見解

relationship_status文字列

人の関係の状態

宗教文字列

人の宗教

security_settingsSecuritySettings

セキュリティ設定

significant_otherユーザー

その人の重要な他者

スポーツリスト

この人が好きなスポーツ

quotes文字列

その人のお気に入りの引用

third_party_id文字列

匿名であるが個人の一意の識別子を含む文字列。この識別子はサードパーティで使用できます

timezonefloat(最小:-24)(最大:24)

UTCからの個人の現在のタイムゾーンオフセット

token_for_business文字列

企業のアプリ間で同じトークン。このトークンにアクセスするには、ユーザーがアプリにログインする必要があります。このトークンは、アプリを所有するビジネスが変更されると変更されます

updated_timedatetime

更新された時間

shared_login_upgrade_required_bydatetime

共有ログインをBusiness Managerにアップグレードする必要がある時間

verifiedbool

アカウントが検証されたかどうかを示します。これはis_verifiedフィールドとは異なります。次のいずれかのアクションを実行すると、誰かが検証済みと見なされます。

Register for mobile
Confirm their account via SMS
Enter a valid credit card

video_upload_limitsVideoUploadLimits

ビデオのアップロード制限

viewer_can_send_giftbool

視聴者はこの人に贈り物を送ることができますか?

website文字列

人のウェブサイト

workリスト

人の仕事の経験の詳細

public_key文字列

その人のPGP公開鍵

coverCoverPhoto


また、現在の「エッジ」のものは次のとおりです。「エッジ」のものの形式は、おおまかに言って、これをすばやく行いました。

"Edge"

"説明"

favorite_requests

Graph APIに対する開発者のお気に入りのリクエスト

request_history

開発者のGraph APIリクエスト履歴

アカウント

この人が管理する/管理者であるFacebookページ

実績

Facebookゲームでの成果

adaccounts

この人がアクセスできる広告アカウント

adaccountgroups

広告アカウントグループ

契約

その人の広告契約

admined_groups

ユーザー管理者をグループ化します

adnetworkanalytics

ユーザーのオーディエンスネットワークアプリのインサイトデータ

アルバム

この人が作成したフォトアルバム

apprequests

この人のアプリからの保留中のリクエスト

apprequestformerrecipients

アプリのリクエスト

この人のプロフィールにリストされている本

ドメイン

ユーザーが管理するドメイン

イベント

この人のイベント。デフォルトでは、これにはその人が辞退した、または返信しなかったイベントは含まれません

家族

この人の家族関係。

stream_filters

ニュースフィードエッジに適用できるフィルターのリスト

friendlists

その人のカスタム友達リスト

ids_for_business

ビジネスエンティティは、ビジネスマネージャーを使用して複数のアプリの所有権を主張できます。このEdgeは、このユーザーが他のアプリで持っているIDのリストを返します

invitable_friends

Facebook Canvasアプリのインストールに招待できる友人のリスト

ゲーム

この人が好きなゲーム

グループ

個人が属するFacebookグループ

likes

この人が気に入ったすべてのページ

映画

この人が好きな映画

音楽

この人が好きな音楽

オブジェクト

オブジェクト

許可

ユーザーがこのアプリに付与した権限

写真

ユーザーがタグ付けされた写真またはアップロードした写真

写真

その人のプロフィール写真

tagged_places

この人のタグ付けされた場所のリスト。動画、投稿、ステータス、またはリンクにタグを含めることができます

promotable_domains

ユーザーが昇格できるすべてのドメイン

promotable_events

ユーザーが昇格できるすべてのイベント。

taggable_friends

Graph APIを介して公開されたコンテンツでタグ付けできる友人

テレビ

この人が好きなテレビ番組

ビデオ

ユーザーがタグ付けまたはアップロードされた動画

video_broadcasts

この人からのビデオ放送

アプリケーション

この人が開発者であるFacebookアプリ。

checkins

この人が作成したチェックイン。

feed

この人が公開した投稿(ステータスの更新を含む)とリンクのフィード。

friendrequests

人の保留中の友人のリクエスト。

友達

人の友達。

home

個人のFacebookホームページフィード。

inbox

個人のFacebookメッセージ受信ボックス。

場所

位置情報を含み、この人物にタグが付けられた投稿と写真のフィード。これは、その人が訪れた場所の年表を作成するのに役立ちます。

相互の友人

二人の間の共通の友人のリスト。

通知

人が持っている未読のFacebook通知。

outbox

人のFacebookメッセージ送信ボックス。

質問

人が作成した質問。

スコア

この人がプレイしたFacebookゲームから受け取ったスコア。

購読者

この人をフォローしているプロファイル。

subscribed

この人がフォローしているプロファイル。

121
Loxx

キーとして「フィールド」を使用し、値をコンマで区切ります

let params = ["fields": "email, friends"]
26
Hugo Perez

Obj-Cでは、logInWithReadPermissionsメソッドに次を挿入します。

parameters:@{@"fields": @"id, name, email"}

パラメータにnilを残すと、結果オブジェクトでidとnameのみを受け取りますが、たとえば次のように設定します:

NSArray *permissionsArray = @[ @"email", @"public_profile"];

ドキュメントではあまり明確ではありませんが、それが役立つことを願っています。

12

私も同じ問題を抱えていましたが、フィールドオプションを追加すると、ユーザーの写真を取得するときにリクエストエラーが発生しました。単純なparameters:@{@"fields": @""}をコードに追加して、この問題を解決しました。

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"me/picture"]
                              parameters:@{@"fields": @""}
                              HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                      id result,
                                      NSError *error) {
    if (!error) {
        // success
    } else {
        // fail
    }}
];

Swiftでは、次のように複数のパラメーターを宣言できます。

let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])
4
dylankbuckley