Facebookのソーシャルグラフにデータを取り込んだり、データを取り出したりするには、グラフAPIを使います。
例えば、次のような場合です。
このガイドでは、iOS用Facebook SDKでのグラフAPIの使い方について説明します。
グラフAPIを呼び出すには、ユーザーがFacebookを介してアプリにログインし、アプリにアクセス許可を付与する必要があります。
例えば、ユーザーのメールアドレスを取得する場合は、アプリに email
アクセス許可が付与されている必要があります。次の項目を確認してください。
さらに、iOS SDK用の開発環境の設定と、アプリの設定が必要です。詳しくは、iOS用SDKスタートガイドをご覧ください。
SDKには、グラフAPIの処理のために FBSDKGraphRequest
と FBSDKGraphRequestConnection
の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のデバッグモードをご覧ください。