如何使用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
相关产品推荐
相关产品推荐

