You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS使用UIActivityViewController分享至Facebook的异常问题求助

解决iOS 12 + Facebook SDK 13.2.0分享视图关闭异常问题

你的问题核心在于UIActivityViewController的Facebook分享通道与高版本Facebook SDK在iOS 12上的兼容性冲突,导致系统回调失效、视图无法正常关闭。以下是具体解决方案:

方案一:改用Facebook SDK原生分享组件(推荐)

放弃通过UIActivityViewController调用Facebook分享,直接使用SDK提供的FBSDKShareDialog,它能可靠触发回调并控制视图生命周期:

代码实现

import FBSDKShareKit

// 1. 构建分享内容
let shareContent = FBSDKShareLinkContent()
shareContent.contentURL = URL(string: "你的目标分享链接")!
shareContent.quote = "要分享的文本内容"

// 2. 初始化并展示分享对话框
let shareDialog = FBSDKShareDialog()
shareDialog.fromViewController = self
shareDialog.shareContent = shareContent
shareDialog.delegate = self

if shareDialog.canShow() {
    shareDialog.show()
}

// 3. 实现分享回调协议
extension YourViewController: FBSDKSharingDelegate {
    // 分享成功
    func sharer(_ sharer: FBSDKSharing!, didCompleteWithResults results: [AnyHashable : Any]!) {
        dismiss(animated: true, completion: nil)
    }
    
    // 分享失败
    func sharer(_ sharer: FBSDKSharing!, didFailWithError error: Error!) {
        dismiss(animated: true, completion: nil)
        // 可选:处理错误信息,如提示用户分享失败
    }
    
    // 用户取消分享
    func sharerDidCancel(_ sharer: FBSDKSharing!) {
        dismiss(animated: true, completion: nil)
    }
}

这种方式能完全解决取消/成功后视图无法关闭的问题,因为所有状态回调都由SDK直接通知,你可以主动调用dismiss关闭分享视图。

方案二:兼容UIActivityViewController的临时修复

如果必须保留UIActivityViewController的使用方式,可尝试以下操作:

  • 降级Facebook SDK:将SDK版本降至12.x系列(Facebook SDK 13.x开始对iOS 12的支持逐步弱化),旧版本SDK与iOS 12的系统分享通道兼容性更好。
  • 检查Info.plist配置:确保LSApplicationQueriesSchemes包含fbapi、fb-messenger-share-api等Facebook相关Scheme,FacebookAppID、FacebookDisplayName配置正确。

注意:UIActivityViewController的completionWithItemsHandler对Facebook分享不触发是系统与SDK的兼容性问题,无法通过代码直接修复,因此方案一才是长期可靠的解决方式。

内容的提问来源于stack exchange,提问作者Wonton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:10:31