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のデバッグモードをご覧ください。