iOSでのグラフAPIの使用

Facebookのソーシャルグラフにデータを取り込んだり、データを取り出したりするには、グラフAPIを使います。

例えば、次のような場合です。

  • ソーシャルコンテキストを提供するプロフィール情報を取得する。
  • 「いいね!」や写真などのユーザー情報を取得する。
  • 投稿(動画や写真を含む)をFacebookに公開する。
  • Open GraphストーリーをFacebookに公開する。
  • その他の機能については、グラフAPIのドキュメントをご覧ください。

このガイドでは、iOS用Facebook SDKでのグラフAPIの使い方について説明します。

前提条件

グラフAPIを呼び出すには、ユーザーがFacebookを介してアプリにログインし、アプリにアクセス許可を付与する必要があります。

例えば、ユーザーのメールアドレスを取得する場合は、アプリに email アクセス許可が付与されている必要があります。次の項目を確認してください。

さらに、iOS SDK用の開発環境の設定と、アプリの設定が必要です。詳しくは、iOS用SDKスタートガイドをご覧ください。

ユーザーデータの取得

SDKには、グラフAPIの処理のために FBSDKGraphRequestFBSDKGraphRequestConnection の2つのクラスがあります。これらは、Foundationフレームワークの NSURLRequest および NSURLRequestConnectionと似ています。

FBSDKGraphRequest を使うには、特定のグラフAPIエンドポイントをリクエストに提供します。次に、 FBSDKGraphRequestConnection を呼び出してリクエストを開始し、完了時の処理をします。

開発の便宜を図るため、SDKでは、 FBSDKGraphRequestConnection を暗黙のうちに作成する startWithCompletionHandler メソッドが FBSDKGraphRequest に用意されています。

例えば、現在アプリにログインしているユーザーのプロフィール情報を取得するには、次の呼び出しを実行します。

guard AccessToken.current != nil else { return }

let request = GraphRequest(graphPath: "me", parameters: [:])
request.start() { connection, result, error in
    if let result = result, error == nil {
        print("fetched user: \(result)")
    }
}

バッチリクエスト

グラフAPIでは、単一のHTTPリクエストでバッチリクエストを実行できます。詳しくは、グラフAPI、バッチリクエストの実行をご覧ください。

SDKを使うことにより、複数のリクエストを作成して、それらを同一の FBSDKGraphRequestConnection インスタンスに追加できます。ネットワークトラフィックを最小にするため、可能な場合はバッチリクエストを実行してください。

次の例では、ユーザーの「いいね!」をリクエストしています。

guard let token = AccessToken.current else { return }

if token.hasGranted("user_likes") {
    let meRequest = GraphRequest(graphPath: "me", parameters: [:])
    let likesRequest = GraphRequest(graphPath: "me/likes", parameters: [:])

    let connection = GraphRequestConnection()
    connection.add(meRequest) { connection, result, error in
        // Process the 'me' information
    }
    connection.add(likesRequest) { connection, result, error in
        // Process the 'likes' information
    }

    connection.start()
}

さらに、 addRequest:completionHandler: オーバーロードでバッチパラメーターを指定できます。これには、依存リクエストでバッチ処理を作成する機能が含まれています。

写真と動画のシェア

グラフAPIエンドポイントで使う FBSDKGraphRequests はいつでも手動で作成できますが、iOS用Facebook SDKでは、 FBSDKShareKit.frameworkによって写真と動画のシェアを簡略化できます。例えば、写真をシェアするには、次のようにします。

let image: UIImage!
let content = SharePhotoContent()
content.photos = SharePhoto(image: image, isUserGenerated: true)

// Assuming self implements SharingDelegate
let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: self
)
dialog.show()

また、 FBSDKShareVideoContent タイプを使って動画をシェアすることもできます。iOSでのシェアをご覧ください。

オブジェクトの削除

オブジェクトのIDをグラフパスとして指定して DELETE リクエストを送信することにより、アプリが作成したオブジェクトを削除することもできます。

例えば、ページに写真を公開し、IDとして1234を受け取ったとします。次のコードを使うと、写真が削除されます。

guard let token = AccessToken.current else { return }

if token.hasGranted("pages_manage_posts") {
    let request = GraphRequest(graphPath: "1234", parameters: [:], httpMethod: .delete)
    request.start { connection, result, error in
        if error == nil {
            print("Deleted photo")
        }
    }
}

デバッグのヒント

グラフAPIエクスプローラを使うことにより、リクエストを試したりテストしたりできます。

また、グラフAPIのデバッグモードを有効にすることができます。詳しくは、iOS SDKのトラブルシューティング、グラフAPIのデバッグモードをご覧ください。