iOS Swift接入Google AdMob插屏广告无法正常展示问题求助
插屏广告无法弹出的常见排查点:
- 确认调用展示时广告实例已加载完成
你当前的广告加载是异步操作,若点击按钮时广告还未加载完成或加载失败,interstitialAd为空自然不会有弹窗。可先在展示方法中添加判断和日志定位问题:
func interstitialPresent() { if let ad = interstitialAd { ad.present(fromRootViewController: self) } else { print("广告未就绪,触发重新加载") interstitialSetup() } }
如果日志打印出广告未就绪,可进一步查看interstitialSetup的回调中是否有加载失败的报错,排查广告单元ID、网络、AdMob账号配置的问题。测试阶段建议先使用官方测试插屏IDca-app-pub-3940256099942544/4411468910排除正式广告无填充的问题。
- 确认展示操作在主线程执行
SpriteKit的节点点击回调默认可能不在主队列,而所有UI相关操作(包括广告弹窗)必须在主线程执行才会生效。你在游戏场景中调用interstitialPresent时需要包一层主队列调度:
// SKScene中调用示例 DispatchQueue.main.async { gameViewController.interstitialPresent() }
- 广告展示过一次后未重新加载
GADInterstitialAd是一次性实例,只要成功展示过一次,哪怕用户关闭了广告,当前实例也会失效,下次需要展示必须重新调用加载方法。你可以在广告关闭的回调中添加预加载逻辑:
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("广告已关闭,预加载下一次广告") interstitialSetup() }
- 确认ViewController引用正确
检查你在游戏场景中拿到的GameViewController实例是不是当前活跃的顶层控制器,如果拿到的是已经销毁的、或者未显示的控制器实例,调用present也不会有弹窗。
内容的提问来源于stack exchange,提问作者LittleRocketMan
相关产品推荐
相关产品推荐

