You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:28