在 iOS 平台分享

您集成 Facebook 登录、Facebook 分享或 Facebook Gaming 之后,如果未禁用应用事件自动记录功能,系统将为事件管理工具自动记录和收集特定的应用事件。建议所有使用 Facebook 登录、Facebook 分享或 Facebook Gaming 的应用开发者都了解上述自动功能的运作方式。如要详细了解系统会收集哪些信息以及如何禁用应用事件自动记录功能,请参阅应用事件自动记录

点击此处,详细了解 iOS 版 Facebook SDK。

本指南详细介绍如何通过 iOS 应用将内容分享到 Facebook。用户通过您的应用分享时,相关内容会在其时间线及其好友的动态中显示。

前提条件

将分享添加到您的应用前,您需要执行以下操作:

  • iOS 版 Facebook 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 商店的链接,我们不会发布您在分享中指定的任何图片或说明,而会发布通过网络爬虫直接从应用商店抓取的一些应用信息,其中可能不包括图片。要预览指向 iTunes 或 Google Play 的链接分享,请在分享调试工具中输入网址。

照片

用户可以使用分享对话框或自定义界面,将照片从您的应用分享到 Facebook:

  • 照片大小必须小于 12MB
  • 用户需要安装 7.0 或更高版本的原生 iOS 版 Facebook 应用

使用 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。
  • 分享内容的用户应安装 26.0 或更高版本的 iOS 版 Facebook 客户端。

使用 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 应用,然后才可打开分享对话框。若未安装 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 的实际测试设备。