ぺぷしのーげん

大企業からスタートアップに転職したアプリケーションエンジニアのブログ

Facebook SDKをSwiftで使う方法|Graph APIでメンバー一覧取得してみた

f:id:hazakurakeita:20151218233502p:plain

 Facebook SDKを使ってFacebookグループの情報をアプリ内で取得してみました。Facebook SDKとGraph APIを使えば簡単だろうと思ってたらSwiftの情報がなくて泣いた。全然よくないね!!

 

まずはSDKをダウンロードしましょう

Facebook SDKをダウンロードして実装したいプロジェクトに組み込みましょう。公式ページにその方法が掲載されていますが、CocoaPodsで組み込んだ方が早そうです。僕は公式ページの指示に従って組み込んだ後に気がつきました泣。

developers.facebook.com

qiita.com

 

さあ、Graph APIでメンバー一覧取得!と思ったら

Facebookの開発者ページのGraph Explorerでテストできます。ここでクエリ文をテストしてアプリに実装するという流れですかね。実行結果を見てコードに変換できるので楽です。

developers.facebook.com

www.otwo.jp

しかし、

なんとObjective-Cしかサポートしてないじゃないですか。どこの説明を見ても全部Objective-C。うそーん。全然よくないねFacebook。コード取得してもこんなんですよ。

    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/me"
           parameters:@{ @"fields": @"id,name",}
           HTTPMethod:@"GET"];
    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
        // Insert your code here
    }];

しょうがないので、ここからSwiftに自力で変換していきます。調べてもSwiftで使ってる人ってあんまいないんですよ。しょうがないなー。

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id,name"], HTTPMethod: "GET")
        graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
            if ((error) != nil)
            {
                // Process error
                return
            }
            else
            {
                // ここにコードを書きます
                ...

 こんな感じ。データを取得するとresultの中にデータが入ってきます。C#でいうと通信が終わると匿名メソッドが呼ばれるという流れですね。Swiftではこの匿名メソッドなんて呼ぶんですかね?

 

 メンバー一覧も無事成功しました

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "/0000000000", parameters: ["fields": "members.limit(2000)"], HTTPMethod: "GET")
        graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
            if ((error) != nil)
            {
                // Process error
                return
            }
            else
            {
                let members = result.valueForKey("members")
                let data = members!.valueForKey("data") as! NSArray
                ...

 graphPathにはFacebookグループのIDを渡してあげます。Facebookグループを開いたらURLを見てください。そこにある数字がIDです。あとはパラメーターに好きなクエリを入れればOK。今回はグループのメンバー一覧を取得するのでmembersにしています。上限を2000人に今回はしてみました。あとはresultに結果が格納されているので好きに使ってください。UserDefaultsみたいにvalueForKeyで中身取得できます。

 

おしまい。