iOS端使用Facebook ShareDialog分享视频的异常问题
问题场景
使用iOS Facebook SDK 17.0.0的ShareDialog分享从相册获取的PHAsset视频时,仅显示空白分享输入框,视频未附加;但图片、链接分享正常,且该视频可在Instagram正常分享。代码实现如下:
let video = ShareVideo(videoAsset: videoAsset) content.video = video self.shareDialog = ShareDialog(viewController: self, content: content, delegate: self.delegate) do { try shareDialog?.validate() } catch { print("error") } self.shareDialog?.show()
可行解决思路
- 转换PHAsset为本地URL后再初始化ShareVideo
直接使用PHAsset初始化ShareVideo可能存在资源加载不完整或权限问题,建议先将PHAsset导出为本地视频URL:
func exportVideo(from asset: PHAsset, completion: @escaping (URL?) -> Void) { let options = PHVideoRequestOptions() options.isNetworkAccessAllowed = true options.deliveryMode = .highQualityFormat PHImageManager.default().requestAVAsset(forVideo: asset, options: options) { avAsset, audioMix, info in guard let urlAsset = avAsset as? AVURLAsset else { completion(nil) return } completion(urlAsset.url) } } // 调用导出方法并创建分享内容 exportVideo(from: videoAsset) { videoURL in guard let url = videoURL else { return } let content = ShareVideoContent() content.video = ShareVideo(url: url) self.shareDialog = ShareDialog(viewController: self, content: content, delegate: self.delegate) do { try self.shareDialog?.validate() self.shareDialog?.show() } catch let error as NSError { print("验证失败: \(error.localizedDescription)") } }
- 确认分享内容类型为ShareVideoContent
确保使用专门的视频分享内容类,避免混用其他分享类型:
let content = ShareVideoContent() // 必须明确使用该类型 content.video = video
检查权限与配置
- 确认
Info.plist中已配置NSPhotoLibraryUsageDescription,以及Facebook应用ID、URL Scheme等必要项; - 登录Facebook开发者后台,检查应用是否开启视频分享权限,且应用状态允许该功能。
- 确认
优先使用原生Facebook应用分享
网页版分享对视频支持有限,可强制使用原生应用(需先判断应用是否安装):
if ShareDialog.canShow(ShareVideoContent.self, in: .native) { shareDialog?.mode = .native }
- 查看具体验证错误
修改错误打印逻辑,获取详细错误信息以定位问题:
do { try shareDialog?.validate() } catch let error as NSError { print("ShareDialog验证错误: \(error.localizedDescription),错误码: \(error.code)") }
内容的提问来源于stack exchange,提问作者Razvan S.
相关产品推荐
相关产品推荐

