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
相关产品推荐
相关产品推荐

