使用 Graph API 在 Facebook 的社交關係圖寫入及讀取資料。
其中包括:
本指南說明如何透過 Facebook iOS SDK 使用 Graph API。
呼叫 Graph API 需要有人透過 Facebook 登入您的應用程式,並向應用程式提供授權。
例如,如果您想擷取某人的電郵地址,您的應用程式必須取得 email
權限。請確保您已熟悉以下各項:
此外,您也需要完成 iOS SDK 開發環境設定和應用程式設定;詳情請參閱 iOS 新手指南。
SDK 有兩個可配合 Graph API 使用的類別: FBSDKGraphRequest
和 FBSDKGraphRequestConnection
,這與 Foundation 架構的 NSURLRequest
和 NSURLRequestConnection
類似。
如要使用 FBSDKGraphRequest
,請向要求提供特定的 Graph API 端點。然後呼叫 FBSDKGraphRequestConnection
以啟動要求並完成相關操作。
為方便起見,SDK 具有 startWithCompletionHandler:
方法,適用於 FBSDKGraphRequest
,可為您建立一個隱式 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)") } }
在 Graph API 中,您可以透過單一 HTTP 要求提出批量要求;詳情請參閱 Graph 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:
過載指定批量參數,其中包含以獨立要求建立批量要求的功能。
除了隨時透過手動建立 FBSDKGraphRequests
使用 Graph API 端點外,您還可以使用 Facebook iOS SDK,此 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") } } }