SpriteKit集成AdMob:如何实现特定场景加载时显示横幅广告
实现特定场景加载AdMob横幅广告的完整方案
我来帮你把代码补全,确保每次进入特定场景时都能正常显示AdMob横幅广告~你已经完成了BannerView的基础初始化,接下来把关键步骤补上就行:
1. 完成广告加载与视图添加
在你现有的代码后面,添加这两行来发起广告请求,并把横幅广告添加到当前场景的视图层级里:
// 发起广告加载请求 BannerAd.load(request) // 将横幅广告添加到当前页面的视图中 view.addSubview(BannerAd)
2. 优化广告位置(推荐替代硬编码frame)
你当前用CGRect(x: 0, y: 0, width: 320, height: 50)固定了位置,这在不同尺寸的屏幕上可能显示异常。推荐用AutoLayout来适配,比如把广告固定在屏幕底部:
// 关闭自动布局适配,启用自定义约束 BannerAd.translatesAutoresizingMaskIntoConstraints = false // 添加约束,让广告贴紧屏幕底部和左右边缘 NSLayoutConstraint.activate([ BannerAd.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), BannerAd.leadingAnchor.constraint(equalTo: view.leadingAnchor), BannerAd.trailingAnchor.constraint(equalTo: view.trailingAnchor), BannerAd.heightAnchor.constraint(equalToConstant: 50) ])
3. 绑定场景生命周期,确保每次进入都加载
如果你的“特定场景”是一个UIViewController,把广告加载逻辑放到viewWillAppear方法里,这样每次用户进入这个页面都会触发广告加载:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 每次进入场景重新发起广告请求 BannerAd.load(GADRequest()) }
4. 可选:实现Delegate监控广告状态
为了更好地排查问题或做交互逻辑,你可以实现GADBannerViewDelegate的回调方法:
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { print("横幅广告加载成功") // 这里可以加广告显示的动画效果 } func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { print("横幅广告加载失败:\(error.localizedDescription)") }
完整整合代码示例
把所有部分拼起来,最终代码大概是这样:
import UIKit import GoogleMobileAds class YourSpecificSceneVC: UIViewController, GADBannerViewDelegate { private var bannerAd: GADBannerView! override func viewDidLoad() { super.viewDidLoad() setupBannerAd() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 每次进入场景刷新广告 bannerAd.load(GADRequest()) } private func setupBannerAd() { bannerAd = GADBannerView(adSize: kGADAdSizeBanner) bannerAd.delegate = self bannerAd.adUnitID = "ca-app-pub-##/##" // 替换成你的真实广告单元ID bannerAd.rootViewController = self // 用AutoLayout设置底部位置 bannerAd.translatesAutoresizingMaskIntoConstraints = false view.addSubview(bannerAd) NSLayoutConstraint.activate([ bannerAd.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), bannerAd.leadingAnchor.constraint(equalTo: view.leadingAnchor), bannerAd.trailingAnchor.constraint(equalTo: view.trailingAnchor), bannerAd.heightAnchor.constraint(equalToConstant: 50) ]) // 测试设备配置(仅开发阶段使用) let request = GADRequest() request.testDevices = [kGADSimulatorID, "*************************"] bannerAd.load(request) } // MARK: - GADBannerViewDelegate func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { print("横幅广告加载成功") } func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { print("横幅广告加载失败:\(error.localizedDescription)") } }
这样设置后,每次用户进入这个场景,都会自动加载并显示AdMob横幅广告啦~
内容的提问来源于stack exchange,提问作者Alim2
相关产品推荐
相关产品推荐

