集成AdMob Facebook中介组件后应用崩溃问题求助
崩溃原因与修复步骤
核心根因
该崩溃是Google Mobile Ads SDK 与 GoogleMobileAdsMediationFacebook 版本不兼容导致的。
旧版本Facebook中介适配器的内部实现会调用已被高版本Google Mobile Ads SDK移除的+[GADRequest sdkVersion]类方法。该方法在Google Mobile Ads SDK 7.0.0及以上版本中已从GADRequest类中下线,迁移至GADMobileAds类下,适配器找不到对应方法就会直接抛出未识别选择子的异常,和你日志里打印的Adapter初始化失败的报错完全对应。
具体修复操作
- 严格对齐依赖版本,不要不指定版本号直接拉取最新库
你当前Podfile里只写pod 'Google-Mobile-Ads-SDK'和pod 'GoogleMobileAdsMediationFacebook'会各自拉取当前最新版,一旦Facebook适配器的版本还未适配拉到的Google Mobile Ads SDK版本,就会触发该崩溃。
需要在Podfile里明确标注两个库的兼容版本号,示例:# 示例为经过验证的兼容版本组合,请以官方公开的版本适配说明替换为当前适配的版本 pod 'Google-Mobile-Ads-SDK', '~> 9.13.0' pod 'GoogleMobileAdsMediationFacebook', '~> 6.12.0.1' - 彻底清理旧依赖重装
修改完Podfile后不要直接执行pod install,先清理本地残留的旧依赖、缓存和冲突文件,依次执行以下命令:pod deintegrate pod cache clean --all rm -rf Podfile.lock pod install - 修正冗余的初始化逻辑
你当前的初始化代码重复调用了两次GADMobileAds.sharedInstance().start,虽然不是本次崩溃的直接诱因,但会触发适配器重复初始化,容易引发其他偶发异常,改成单次调用即可:func register() { GADMobileAds.sharedInstance().start { status in let adapterStatuses = status.adapterStatusesByClassName for adapter in adapterStatuses { let adapterStatus = adapter.value NSLog("Adapter Name: %@, Description: %@, Latency: %f", adapter.key, adapterStatus.description, adapterStatus.latency) } } } - 补充排查项:如果调整版本后仍崩溃,检查项目中是否存在手动引入的旧版GoogleMobileAds.framework静态库,这类残留框架会和Pod管理的新版SDK产生符号冲突,直接删除所有手动引入的旧AdMob相关框架,只保留CocoaPods拉取的依赖即可。
内容的提问来源于stack exchange,提问作者Ahsan Aasim
相关产品推荐
相关产品推荐

