Swift4中如何在ScrollView配置AdMob?iOS广告不显示问题求助
问题1:如何在Swift4的ScrollView中配置AdMob?
在ScrollView里集成AdMob Banner广告的核心是做好广告视图的布局适配,确保它能被正常展示或滚动到,具体步骤如下:
1. 前期准备:先通过CocoaPods导入
Google-Mobile-Ads-SDK,或者手动添加框架。iOS14及以上版本,必须在Info.plist中配置GADApplicationIdentifier键,值填你的AdMob应用ID。2. 声明并配置Banner视图:让你的ViewController遵守
GADBannerViewDelegate协议,方便监听广告加载状态;同时声明Banner视图并指定标准尺寸:class MainVC: UIViewController, UIScrollViewDelegate, UISearchBarDelegate, UITextFieldDelegate, GADBannerViewDelegate { let myBanner = DFPBannerView(adSize: kGADAdSizeBanner) // 直接用标准Banner尺寸 @IBOutlet weak var scrollView: UIScrollView! // 提前关联ScrollView的IBOutlet // 其他代码... }3. 把Banner加到ScrollView并调整布局:在
viewDidLoad里,将Banner添加到ScrollView,并根据现有内容的位置调整Banner的frame,同时更新ScrollView的contentSize,保证广告能被滚动到:override func viewDidLoad() { super.viewDidLoad() // Banner基础配置 myBanner.rootViewController = self myBanner.adUnitID = "你的AdUnitID" // 测试阶段建议用官方测试ID:ca-app-pub-3940256099942544/2934735716 myBanner.delegate = self // 把Banner放在ScrollView现有内容的底部 let bannerY = scrollView.contentSize.height myBanner.frame = CGRect(x: 0, y: bannerY, width: view.bounds.width, height: myBanner.frame.height) scrollView.addSubview(myBanner) // 更新ScrollView内容高度,容纳Banner scrollView.contentSize = CGSize(width: view.bounds.width, height: bannerY + myBanner.frame.height) // 加载测试广告 let request = GADRequest() request.testDevices = [kGADSimulatorID] // 模拟器测试,真实设备需替换为对应设备ID myBanner.load(request) }4. 监听广告状态(推荐):实现代理方法,方便排查加载失败的原因:
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { print("广告加载成功!") } func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { print("广告加载失败:\(error.localizedDescription)") }
问题2:iOS中设置AdMob后广告无法显示的排查与修复
看了你贴的代码,广告不显示主要有几个关键问题,我帮你逐一修复并说明:
核心问题分析:
- Banner未加入视图层级:你创建了
myBanner但没把它加到scrollView或主视图上,广告视图根本不在界面里,自然看不到; - 未设置Banner的位置和大小:没有给
myBanner指定frame或约束,系统不知道该把它放在哪里、多大; - 注释了代理:
//myBanner.delegate = self导致你无法监听广告的成功/失败状态,没法排查具体原因; - 可能缺少Info.plist配置:iOS14+必须添加
GADApplicationIdentifier,否则广告无法加载。
修改后的完整代码:
class MainVC: UIViewController, UIScrollViewDelegate, UISearchBarDelegate, UITextFieldDelegate, GADBannerViewDelegate { let myBanner = DFPBannerView(adSize: kGADAdSizeBanner) @IBOutlet weak var scrollView: UIScrollView! // 确保已关联ScrollView的IBOutlet override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() request.testDevices = [kGADSimulatorID] // 模拟器测试,真实设备替换为设备ID // 打开代理,监听加载状态 myBanner.delegate = self myBanner.rootViewController = self // 测试用官方测试ID,避免真实ID测试违规 myBanner.adUnitID = "ca-app-pub-3940256099942544/2934735716" // 上线前替换为你的真实ID:"ca-app-pub-7025295311419616/6321740358" // 添加Banner到ScrollView并设置位置 let bannerY = scrollView.contentSize.height myBanner.frame = CGRect(x: 0, y: bannerY, width: view.bounds.width, height: myBanner.frame.height) scrollView.addSubview(myBanner) // 更新ScrollView内容大小,确保Banner能被滚动到 scrollView.contentSize = CGSize(width: view.bounds.width, height: bannerY + myBanner.frame.height) // 加载广告 myBanner.load(request) } // 广告加载成功回调 func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { print("广告加载成功🎉") } // 广告加载失败回调,打印错误信息排查 func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { print("广告加载失败❌:\(error.localizedDescription)") } // 你的其他代理方法... }
额外排查建议:
- 使用测试ID:测试阶段一定要用AdMob官方提供的测试AdUnitID,避免用真实ID导致账户违规;
- 检查网络:确保测试设备/模拟器网络正常,广告需要联网加载;
- 设备ID添加:如果用真实设备测试,需要把设备ID添加到
request.testDevices中,否则可能无法加载测试广告。
内容的提问来源于stack exchange,提问作者JIN
相关产品推荐
相关产品推荐

