Swift iOS开发:如何实现用户点击AdMob横幅广告奖励积分功能
实现AdMob横幅广告点击奖励积分的方案
前置前提
- 你已经完成AdMob SDK的集成,横幅广告可以正常展示和触发回调
- 你已有成熟的用户积分管理模块,包含积分查询、增减的后端/本地存储逻辑
核心实现逻辑
AdMob的横幅广告点击事件会触发GADBannerViewDelegate的专属回调,你只需要在对应的回调方法里调用你的积分增加接口即可,不需要额外监听点击手势,避免重复触发或者误判。
步骤1:设置横幅广告的代理
首先你需要给每个展示的GADBannerView实例设置delegate,通常在你初始化横幅的ViewController里操作:
// Swift 示例 import GoogleMobileAds class YourViewController: UIViewController, GADBannerViewDelegate { @IBOutlet weak var bannerView: GADBannerView! override func viewDidLoad() { super.viewDidLoad() bannerView.delegate = self // 原有广告加载逻辑保持不变 bannerView.adUnitID = "你的AdMob广告单元ID" bannerView.rootViewController = self bannerView.load(GADRequest()) } }
// Objective-C 示例 #import "YourViewController.h" @import GoogleMobileAds; @interface YourViewController () <GADBannerViewDelegate> @property (nonatomic, weak) IBOutlet GADBannerView *bannerView; @end @implementation YourViewController - (void)viewDidLoad { [super viewDidLoad]; self.bannerView.delegate = self; // 原有广告加载逻辑不变 self.bannerView.adUnitID = @"你的AdMob广告单元ID"; self.bannerView.rootViewController = self; [self.bannerView loadRequest:[GADRequest request]]; } @end
步骤2:在点击回调中实现积分奖励
AdMob的bannerViewDidRecordClick:回调是官方提供的、仅当用户真实点击广告时触发的方法,你在这里调用你的积分增加逻辑即可:
Swift 代码示例
func bannerViewDidRecordClick(_ bannerView: GADBannerView) { // 调用你的积分增加接口,每次点击加2积分 let addPoints = 2 UserPointsManager.shared.addPoints(amount: addPoints) { [weak self] success in guard success else { return } // 可选:给用户弹出提示,告知获得积分 let alert = UIAlertController(title: "积分到账", message: "恭喜你获得\(addPoints)积分,可用于发布帖子", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "知道了", style: .default)) self?.present(alert, animated: true) } }
Objective-C 代码示例
- (void)bannerViewDidRecordClick:(GADBannerView *)bannerView { NSInteger addPoints = 2; [[UserPointsManager sharedManager] addPointsWithAmount:addPoints completion:^(BOOL success) { if (success) { // 可选:弹出积分到账提示 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"积分到账" message:[NSString stringWithFormat:@"恭喜你获得%ld积分,可用于发布帖子", (long)addPoints] preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleDefault handler:nil]]; [self presentViewController:alert animated:YES completion:nil]; } }]; }
注意事项
- 不要用自定义手势监听横幅的点击,一方面会违反AdMob的政策,另一方面可能会触发无效点击的判定,导致账号受限,必须用官方提供的回调
- 建议积分增加逻辑走后端校验,不要只存在本地,避免用户篡改数据
- 可以根据需要控制用户每天点击广告获得积分的上限,避免恶意刷积分的情况
- 如果你有多个页面都展示了横幅广告,建议把代理的积分奖励逻辑封装到公共工具类里,不用每个页面重复写代码
内容的提问来源于stack exchange,提问作者Christopher Mathews
相关产品推荐
相关产品推荐

