在 iOS 分享

整合 Facebook 登入、Facebook 分享或 Facebook Gaming 後,除非停用自動應用程式事件記錄功能,否則系統會自動記錄並蒐集某些應用程式事件,以供事件管理工具使用。我們建議所有使用 Facebook 登入、Facebook 分享或 Facebook Gaming 的應用程式開發人員瞭解此功能的運作方式。如需深入瞭解系統會蒐集哪些資訊,以及如何停用自動應用程式事件記錄功能,請參閱自動應用程式事件記錄功能

有關 FB iOS SDK 的更多詳細資訊,請參見此處

本指南詳細說明如何從您的 iOS 應用程式分享內容至 Facebook。當用戶從您的應用程式進行分享時,其內容會顯示在用戶的「動態時報」以及用戶朋友的「動態」中。

必要條件

您需要先進行下列操作,才能夠新增分享至您的應用程式:

  • Facebook iOS SDK 新增至您的行動開發環境
  • 設定並連結您的 Facebook 應用程式編號
  • 將應用程式編號、顯示名稱和人類看得懂的相片存取原因新增至應用程式的 .plist 檔案。
  • FBSDKShareKit.framework 連結至您的專案。

您的應用程式不應該預先填入任何要分享的內容。這和《Facebook 開放平台政策》不一致,請參閱《開發人員政策》。

iOS SDK 新手指南

建立內容模型

每種內容類型都有一個介面,可以用來代表其符合 SharingContent。建立內容模型之後,將符合 Sharing 的分享介面新增至應用程式,或使用所提供的 ShareDialog 類別。

當用戶從您的應用程式分享連結至 Facebook 時,其中會包含與連結一同分享的 contentURL。請使用 ShareLinkContent 模型建立連結的分享內容。

以下是如何觸發分享的範例:

guard let url = URL(string: "https://developers.facebook.com") else {
    // handle and return
}

let content = ShareLinkContent()
content.contentURL = url

let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: self
)
dialog.show()

注意:如果您的應用程式分享連結至 iTunes 或 Google Play 商店,我們不會張貼您在分享中指定的任何圖像或說明,而是會張貼使用 Webcrawler 直接從應用程式商店抓取的部分應用程式資訊。此資訊可能不含圖像。若要預覽 iTunes 或 Google Play 的連結分享,請在分享偵錯工具中輸入您的網址。

相片

用戶可以使用「分享」對話方塊或自訂介面,從您的應用程式將相片分享至 Facebook:

  • 相片大小不得超過 12MB
  • 用戶需要安裝原生 iOS 版 Facebook 應用程式 7.0 或以上版本

請使用 SharePhotoContent 模型建立相片的分享內容。

func imagePickerController(
    _ picker: UIImagePickerController, 
    didFinishPickingMediaWithInfo 
    info: [UIImagePickerController.InfoKey : Any]
) {
    guard let image = info[.originalImage] as? UIImage else {
        // handle and return
        return
    }
    let photo = SharePhoto(
        image: image,
        userGenerated: true
    )
    var content = SharePhotoContent()
    content.photos = [photo]
    // use the content
}

影片

您應用程式的用戶可以使用「分享」對話方塊或您的自訂介面,將影片分享至 Facebook:

  • 影片大小不得超過 50MB。
  • 進行分享的用戶應該安裝 iOS 版 Facebook 用戶端 26.0 版本或更新版本。

請使用 FBSDKShareVideoContent 模型建立影片的分享內容。如需所有屬性的清單,請參閱 FBSDKShareVideoContent 參考資料

func imagePickerController(
    _ picker: UIImagePickerController,
    didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]
) {
    let video: ShareVideo

    if #available(iOS 11, *) {
        guard let videoAsset = info[.phAsset] as? PHAsset else {
            return
        }
        video = ShareVideo(videoAsset: videoAsset)
    } else {
        guard let url = info[.referenceURL] as? URL else {
            return
        }
        video = ShareVideo(videoURL: url)
    }
}

多媒體

您的應用程式用戶可以使用「分享」對話方塊,將相片和影片組合分享到 Facebook。注意事項:

  • 進行分享的用戶應該安裝 iOS 版 Facebook 用戶端。
  • 相片大小不得超過 12MB,影片大小不得超過 50MB。
  • 用戶最多可分享 1 段影片加上最多 29 張相片,或分享 30 張相片。

使用 ShareMediaContent 模型建立多媒體分享內容。

let photo = SharePhoto(...)
let video = ShareVideo(...)

var content = ShareMediaContent()
content.media = [photo, video]

分享方式

透過建立模型完成處理內容之後,您可以觸發「分享」對話方塊或「訊息」對話方塊。

按鈕

在 iOS 上,Facebook 具有可觸發分享的原生按鈕。


「分享」按鈕

藉由「分享」按鈕,您可以允許用戶將內容分享至自己的 Facebook 動態時報、朋友的動態時報,或在社團中分享。「分享」按鈕將會呼叫「分享」對話方塊。若要將「分享」按鈕新增至您的檢視,請在您的檢視中新增下列程式碼片段:

var button = FBShareButton()
button.shareContent = content
// Add button to view

「發送」按鈕

「發送」按鈕可讓用戶使用 Facebook Messenger 應用程式將相片、影片和連結私下傳送給朋友及聯絡人。「發送」按鈕將會呼叫「訊息」對話方塊。若要將「發送」按鈕新增至您的檢視,請在您的檢視中新增下列程式碼片段:

var button = SendButton()
button.shareContent = content
// Add button to view

如果未安裝 Messenger 應用程式,「發送」按鈕將會停用。若要檢查是否可以在目前的裝置上使用「發送」按鈕,請使用 SendButton 屬性 isImplicitlyDisabled

「分享」對話方塊

若要使用 Facebook 建立的分享體驗,您要依前述建立內容模型區段定義您的內容,然後呼叫「分享」對話方塊。例如,若要使用「分享」對話方塊來分享連結:

guard let url = URL(string: "https://developers.facebook.com") else {
    // handle and return
}

let content = ShareLinkContent()
content.contentURL = url

let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: self
)
dialog.show()

在舊版 iOS SDK 中,您的應用程式需要先檢查是否已安裝原生 Facebook 應用程式,然後才能開啟「分享」對話方塊。如果用戶尚未安裝該應用程式,您需要自行提供程式碼以呼叫遞補對話方塊。

現在,SDK 會自動檢查原生 Facebook 應用程式。如果未安裝,SDK 會將用戶切換至其預設瀏覽器並開啟「動態」對話方塊

如果已安裝原生 Facebook 應用程式,用戶將會看到 iOS 分享表單,而不會切換至原生 iOS 版 Facebook 應用程式。

訊息對話方塊

「訊息」對話方塊會切換至原生 iOS 版 Messenger 應用程式,然後在發佈貼文之後將控制權返回至您的應用程式。

MessageDialog(content: content, delegate: delegate).show()

注意:目前 iPad 不支援「訊息」對話方塊。

iOS 整合

iOS 包含原生分享表單,可讓用戶將動態更新、相片、影片和連結張貼至 Facebook,並支援設定貼文的分享對象和使用地點來標註貼文。Facebook SDK 支援使用此原生控制器;這是當您呼叫 Facebook「分享」對話方塊時,用戶在大多數情況下將會看到的體驗。

使用 iOS 分享表單必須遵循《開發人員政策》,包括第 2.3 節說明的應用程式不可預先填入分享表單的內容。這表示應用程式不可在分享表單的 initialText 欄位中預先填入非應用程式用戶先前輸入的內容。

此 API 還使用相同樣式的區塊作為 Facebook SDK 的其他部分。若要顯示原生 iOS 分享對話方塊,請使用:

let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: nil
)
dialog.mode = .shareSheet
dialog.show()

請注意,必須要有 viewController 引數,才能顯示分享表單。

主題標籤

您可以指定單一主題標籤與分享的相片、連結或影片一同顯示。此主題標籤也會顯示在「分享」對話方塊中,且用戶可以在發佈前將其移除。

以下為新增主題標籤到連結分享的範例。

let content = ShareLinkContent()
guard let url = URL(string: "https://developers.facebook.com") else { return }

content.contentURL = url
content.hashtag = Hashtag("#MadeWithHackbook")

進階主題

您可以藉由應用程式連結,從您應用程式發佈的 Facebook 貼文連結回您的應用程式。

當用戶點擊從您的應用程式發佈的 Facebook 貼文時,應用程式便會開啟,您甚至可以連結至應用程式內的特定內容。

iOS 模擬器與測試

如果您使用模擬器測試您的應用程式分享功能並嘗試分享影片或相片,您將會看到錯誤。這是因為您需要安裝 iOS 版 Facebook,以便提供「分享」對話方塊。我們不對模擬器提供與此相關的支援。

對於連結分享的情況,您不需要安裝 iOS 版 Facebook,因此能夠進行此測試案例。若要測試其他分享案例,請設定已安裝 iOS 版 Facebook 的實際測試裝置。