如要调用图谱 API,需要用户通过 Facebook 登录您的应用,并授予应用权限。
例如,如果您想要获取用户的邮箱,则您的应用必须获得 email
权限的授权。请务必深入了解以下内容:
您还需要针对 iOS SDK 设置开发环境以及设置应用,详情请参阅 iOS > 入门指南。
SDK 有两个可与图谱 API 一起使用的类:FBSDKGraphRequest
和 FBSDKGraphRequestConnection
,这与 Foundation 框架的 NSURLRequest
和 NSURLRequestConnection
类似。
如要使用 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") } } }