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

如何使用Swift语言展示AdMob应用开屏广告?求实现指导

Swift实现AdMob开屏广告完整指南

没问题!我刚好整理了Swift版本的AdMob开屏广告实现步骤,完全适配最新的SDK,跟着做就能搞定:

1. 前期准备

确保你已经在项目里集成了AdMob SDK,如果还没做,直接用CocoaPods添加pod 'Google-Mobile-Ads-SDK',然后执行pod install就行。另外别忘了在Info.plist里配置你的AdMob应用ID:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>

如果需要用户追踪权限,还要加上:

<key>NSUserTrackingUsageDescription</key>
<string>我们需要该权限来提供更个性化的广告</string>

2. 核心代码实现

开屏广告一般在App启动时展示,推荐在SceneDelegate(iOS 13+)或者AppDelegate里处理,下面是完整的示例代码:

首先导入框架:

import GoogleMobileAds

然后让你的SceneDelegate遵循GADFullScreenContentDelegate协议:

class SceneDelegate: UIResponder, UIWindowSceneDelegate, GADFullScreenContentDelegate {
    var window: UIWindow?
    private var appOpenAd: GADAppOpenAd?
    private var loadTime = Date()
    
    // 开屏广告关闭后的回调
    func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        // 广告关闭后,预加载下一次的开屏广告,方便后续App切换回前台时展示
        loadAppOpenAd()
    }
    
    // 广告展示失败的回调
    func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
        print("开屏广告展示失败: \(error.localizedDescription)")
        // 失败后直接进入主界面,避免卡住用户
        navigateToMainScreen()
    }
    
    // 加载开屏广告的方法
    func loadAppOpenAd() {
        let request = GADRequest()
        GADAppOpenAd.load(withAdUnitID: "ca-app-pub-3940256099942544/5662855259", // 这是官方测试ID,上线务必替换成你的正式ID
                          request: request,
                          orientation: UIInterfaceOrientation.portrait) { [weak self] ad, error in
            guard let self = self else { return }
            if let error = error {
                print("开屏广告加载失败: \(error.localizedDescription)")
                self.navigateToMainScreen()
                return
            }
            self.appOpenAd = ad
            self.appOpenAd?.fullScreenContentDelegate = self
            self.loadTime = Date()
            // 加载成功后尝试展示广告
            self.showAppOpenAdIfAvailable()
        }
    }
    
    // 判断是否具备展示广告的条件
    func showAppOpenAdIfAvailable() {
        // 检查:广告存在、未过期(这里设为1小时)、当前没有其他全屏广告在展示
        guard let ad = appOpenAd,
              Date().timeIntervalSince(loadTime) < 3600,
              !ad.isFullScreenContentVisible else {
            navigateToMainScreen()
            return
        }
        
        // 获取当前根控制器展示广告
        if let rootViewController = window?.rootViewController {
            ad.present(fromRootViewController: rootViewController)
        } else {
            navigateToMainScreen()
        }
    }
    
    // 跳转到主界面的通用方法
    func navigateToMainScreen() {
        // 替换成你自己的主界面初始化逻辑,比如从Storyboard加载或者代码创建
        let mainVC = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
        window?.rootViewController = mainVC
        window?.makeKeyAndVisible()
    }
    
    // App从后台回到前台时,检查是否展示广告
    func sceneWillEnterForeground(_ scene: UIScene) {
        showAppOpenAdIfAvailable()
    }
    
    // App启动完成后,加载广告(如果还没加载的话)
    func sceneDidBecomeActive(_ scene: UIScene) {
        if appOpenAd == nil {
            loadAppOpenAd()
        }
    }
}

3. 关键注意事项

  • 测试阶段用测试ID:代码里的广告单元ID是AdMob官方提供的测试ID,上线前一定要替换成你在AdMob后台创建的专属开屏广告单元ID,避免触发违规。
  • 广告过期处理:代码中设置了1小时的过期判断,你可以根据业务需求调整这个时长,避免展示缓存过久的广告。
  • 失败容错逻辑:不管是加载失败还是展示失败,都要确保能正常进入主界面,绝对不能让用户卡在启动页。
  • 避免重复加载:仅在启动时和广告关闭后触发加载逻辑,App回到前台时只做展示检查,防止频繁请求广告。

这样一套流程下来,就能完美实现Swift版本的AdMob开屏广告啦!如果还有细节问题,随时问我~

内容的提问来源于stack exchange,提问作者mczmma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:34:35