FBSDKShareButton分享链接成功,返回应用时崩溃问题求助
看起来你遇到的崩溃大概率是Facebook SDK的回调处理不完整导致的,毕竟你AppDelegate里的代码只写了一半。我之前踩过这个坑,给你梳理下完整的解决步骤:
1. 补全AppDelegate中的Facebook回调实现
iOS 9之后,application(_:open:sourceApplication:annotation:)已经被弃用了,你需要同时实现新旧两个方法来兼容不同系统版本,确保返回应用时SDK能正确处理回调:
import FBSDKCoreKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 初始化Facebook SDK ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) return true } // 适配iOS 9及以上版本 func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool { let handled = ApplicationDelegate.shared.application( application, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplication.OpenURLOptionsKey.annotation] ) return handled } // 兼容iOS 8及以下版本(如果你的App还支持这些系统) func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { let handled = ApplicationDelegate.shared.application( application, open: url, sourceApplication: sourceApplication, annotation: annotation ) return handled } }
2. 检查Info.plist的关键配置
这一步很容易被忽略,缺少配置会导致跳转回应用时系统无法识别URL,进而崩溃:
- 找到
LSApplicationQueriesSchemes数组(没有的话就新建),添加以下条目:fbapifb-messenger-share-apifbauth2fbshareextension
- 找到
CFBundleURLTypes数组,添加你的Facebook URL Scheme,格式是fb{你的应用ID},比如你的App ID是123456789,就填fb123456789
3. 优化你的分享代码
你直接调用sendActions(for: .touchUpInside)来触发分享,虽然能生效,但按钮没有被添加到视图层级,可能存在潜在的内存问题。推荐用FBSDKShareDialog来替代,更稳定:
func showFBInviteView() { let content = FBSDKShareLinkContent() guard let safeURL = URL(string: "http://mylink.com") else { print("无效的分享链接") return } content.contentURL = safeURL let dialog = FBSDKShareDialog() dialog.fromViewController = self // 这里要传入当前的ViewController,比如你的ViewController实例 dialog.shareContent = content dialog.mode = .automatic // 自动选择分享方式(弹窗/跳转Facebook应用) if dialog.canShow() { dialog.show() } else { print("无法显示Facebook分享弹窗,请检查SDK配置") } }
按照这几步调整后,应该就能解决返回应用崩溃的问题了。
内容的提问来源于stack exchange,提问作者SuperCodeBrah
相关产品推荐
相关产品推荐

