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

iOS项目集成AdMob遇多类问题,求成功集成经验与帮助

iOS AdMob集成常见问题解决方案

问题1:激励广告展示时类型转换错误

报错行:ad.present(fromRootViewController: self),错误信息:"Cannot convert value of type 'ContentView' to expected argument type 'UIViewController'"

原因是ContentView属于SwiftUI视图,而AdMob的present方法需要传入UIViewController类型参数。可以通过以下方式解决:

  • 获取当前应用的根视图控制器来替代self:
private func getRootViewController() -> UIViewController? {
    guard let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
          let window = scene.windows.first,
          let rootVC = window.rootViewController else {
        return nil
    }
    return rootVC
}

修改后的展示函数:

func show() {
    guard let ad = rewardedAd, let rootVC = getRootViewController() else {
        print("广告未准备好或无法获取视图控制器")
        return
    }
    
    ad.present(fromRootViewController: rootVC) {
        let reward = ad.adReward
        print("获得奖励:货币\(reward.amount),数值\(reward.amount.doubleValue)")
        // 在这里实现用户奖励逻辑
    }
}
  • 若项目基于SwiftUI,也可以创建一个UIViewControllerRepresentable的包装器,将广告逻辑放在UIKit控制器中处理,再在SwiftUI中调用。

问题2:Google Utilities中API废弃警告

例如:'subscriberCellularProvider' is deprecated: first deprecated in iOS 12.0

这类警告是SDK依赖库的历史API问题,通常不影响功能运行,可通过以下方式处理:

  • 升级到最新版本的Google Mobile Ads SDK,官方会逐步替换废弃API,减少此类警告。
  • 若需消除警告,可在Xcode的项目Build Settings中,找到Other Warning Flags,添加-Wno-deprecated-declarations来忽略废弃声明警告。注意尽量不要全局屏蔽,可针对特定目标文件或库设置,避免遗漏其他重要警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:01:12