使用圖形 API:iOS

使用圖形 API 可讀取 Facebook 的社交關係圖資料與存入資料。

這包括:

  • 擷取個人檔案資訊以提供社交元素。
  • 擷取用戶資訊,例如他們的按讚內容或相片。
  • 將貼文(包括影片或相片)發佈到 Facebook。
  • 將開放社交關係圖動態發佈到 Facebook。
  • 如需更多功能,請參閱圖形 API 文件

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

必要條件

若要呼叫圖形 API,則需要有人透過 Facebook 登入您的應用程式,然後授權給應用程式的權限。

例如,如果您想要擷取某人的電子郵件地址,則您的應用程式必須取得 email 權限授權。請務必熟悉:

您還必須設定適用於 iOS SDK 的開發環境以及應用程式,請參閱 iOS 快速入門指南

擷取用戶資料

SDK 有兩種類別可以使用圖形 API:FBSDKGraphRequestFBSDKGraphRequestConnection,其與 Foundation 架構的 NSURLRequestNSURLRequestConnection 類似。

若要使用 FBSDKGraphRequest,您應透過特定圖形 API 端點提出要求,然後呼叫 FBSDKGraphRequestConnection 啟動要求並處理其完成作業。

為了方便起見,SDK 具有適用於 FBSDKGraphRequeststartWithCompletionHandler: 方法,可為您以暗示方式建立 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: 重載(具有以獨立要求建立批次的功能)指定批次參數。

分享相片和影片

您除了可以隨時手動建立 FBSDKGraphRequests 以使用圖形 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")
        }
    }
}

偵錯秘訣

您可以使用圖形 API 測試工具,實驗和測試提出的要求。

您還可以啟用圖形 API 偵錯模式,請參閱 iOS SDK 疑難排解:圖形 API 偵錯模式