使用 Graph API - iOS

使用 Graph API 在 Facebook 的社交關係圖寫入及讀取資料。

其中包括:

  • 擷取個人檔案資訊以提供社交元素。
  • 擷取用戶資訊(如他們的讚好或相片)。
  • 將帖子(包括影片或相片)發佈到 Facebook。
  • 將開放式圖表動態發佈到 Facebook。
  • 如需了解更多功能,請參閱 Graph API 文件

本指南說明如何透過 Facebook iOS SDK 使用 Graph API。

必要條件

呼叫 Graph API 需要有人透過 Facebook 登入您的應用程式,並向應用程式提供授權。

例如,如果您想擷取某人的電郵地址,您的應用程式必須取得 email 權限。請確保您已熟悉以下各項:

此外,您也需要完成 iOS SDK 開發環境設定和應用程式設定;詳情請參閱 iOS 新手指南

擷取用戶資料

SDK 有兩個可配合 Graph API 使用的類別: FBSDKGraphRequestFBSDKGraphRequestConnection ,這與 Foundation 架構的 NSURLRequestNSURLRequestConnection 類似。

如要使用 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")
        }
    }
}

除錯秘訣

您可以使用 Graph API 測試工具來試驗和測試提出的要求。

您還可以啟用 Graph API 除錯模式;詳情請參閱 iOS SDK 解決疑難 > Graph API 除錯模式