使用图谱 API — iOS

使用图谱 API 从 Facebook 社交关系图谱导入和导出数据。

其中包括:

  • 获取个人主页信息,提供社交关系。
  • 获取用户信息,例如赞或照片。
  • 在 Facebook 发布帖子(包括视频或照片)。
  • 在 Facebook 发布开放图谱动态。
  • 如需了解更多功能,请参阅图谱 API 文档

本指南介绍如何通过 iOS 版 Facebook SDK 使用图谱 API。

前提条件

如要调用图谱 API,需要用户通过 Facebook 登录您的应用,并授予应用权限。

例如,如果您想要获取用户的邮箱,则您的应用必须获得 email 权限的授权。请务必深入了解以下内容:

您还需要针对 iOS SDK 设置开发环境以及设置应用,详情请参阅 iOS > 入门指南

获取用户数据

SDK 有两个可与图谱 API 一起使用的类:FBSDKGraphRequestFBSDKGraphRequestConnection,这与 Foundation 框架的 NSURLRequestNSURLRequestConnection 类似。

如要使用 FBSDKGraphRequest,请为请求提供特定的图谱 API 端点。然后调用 FBSDKGraphRequestConnection 以开始请求并处理其完成过程。

为方便起见,SDK 在 FBSDKGraphRequest 中提供了 startWithCompletionHandler: 方法,用于为您隐式创建 FBSDKGraphRequestConnection

例如,如要获取当前登录应用的用户的个人主页信息,请发出以下调用:

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 平台分享

删除对象

您还可以删除应用创建的对象,具体操作为发送 DELETE 请求,并将对象编号用作图谱路径。

例如,假设您在公共主页上发布了照片并收到编号“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 版 Facebook SDK 常见问题和疑难解答 > 图谱 API 调试模式