iOS集成Google Ads测试横幅广告不显示问题排查
iOS集成Google Ads测试广告返回Code=1无填充的配置层排查方案
已知相同代码、依赖版本、测试广告位、Info.plist参数下,官方示例、新建空白工程均可正常加载广告,仅自研App触发com.google.admob Code=1 "Request Error: No ad to show."报错,问题锁定在项目编译/运行配置层面,按以下优先级逐一排查:
- 检查ATS配置冲突
老项目通常会为了兼容旧业务接口调整ATS规则,若规则中对googleads.g.doubleclick.net、googlesyndication.com、google.com等AdMob请求域名做了连接限制,或是全局配置了强制HTTPS降级/自定义证书校验,都会导致广告请求被拦截。测试阶段可临时配置ATS全局放开规则验证:
若调整后广告正常加载,再针对性收窄ATS权限即可。<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> - 检查链接参数配置缺失
若项目Target的Other Linker Flags未添加-ObjC参数,会导致AdMob SDK的分类方法、全局初始化逻辑无法正常加载,是这类配置问题的最高发原因。同时确认链接参数中已正确引入GoogleMobileAds框架,多Target项目注意核对当前运行Target的配置,不要仅修改Project层级的通用配置。 - 排查全局网络Hook/拦截逻辑冲突
自研App集成的流量监控、抓包调试、全局代理、VPN类基础组件,若通过Swizzling Hook了NSURLSession、NSURLConnection的请求/响应方法,很可能篡改AdMob的请求头、响应内容,导致SDK判定响应无效返回无填充。排查时临时关闭所有自定义网络拦截逻辑、退出本地抓包工具(如Charles、Proxyman)后重试。 - 检查设备标识获取权限限制
AdMob依赖IDFA、IDFV等设备标识完成广告请求匹配,若项目中集成的隐私合规组件强制拦截了设备标识获取、返回空值,或是iOS14+未正确配置ATT权限流程、用户拒绝广告跟踪,都可能导致测试广告无填充。测试阶段可先在系统设置中手动开启App的广告跟踪权限,临时关闭标识拦截逻辑验证。 - 检查预处理宏定义冲突
核对Build Settings中Preprocessor Macros配置,若自定义宏和Google Mobile Ads SDK的内置宏重名(比如自定义了和SDK版本、日志开关相关的同名宏),会导致SDK运行时执行错误分支逻辑。直接对比正常空白工程的宏配置,删除自研工程中多余的自定义宏即可。 - 排查资源文件冲突
若项目中残留旧版本AdMob的配置文件、bundle资源,或是存在和SDK内置资源同名的自定义文件,会导致SDK加载配置失败。在Build Phases -> Copy Bundle Resources中检查,删除和GoogleMobileAds相关的重复、冲突资源。
注意:每次修改配置后,先删除DerivedData下的项目缓存,执行
pod deintegrate && pod install重新集成依赖,卸载设备上的旧安装包重新编译,避免缓存导致配置不生效。
内容的提问来源于stack exchange,提问作者shadowpath
相关产品推荐
相关产品推荐

