尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

在 Android、iOS 与 Unity 中集成 Google Mobile Ads(GMA)Banner 广告完整实战指南

在 Android、iOS 与 Unity 中集成 Google Mobile Ads(GMA)Banner 广告完整实战指南 在 Android、iOS 与 Unity 中集成 Google Mobile AdsGMABanner 广告完整实战指南【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skillsBanner横幅广告是移动应用中最常见、实现门槛最低的广告形式之一它以矩形图片或文字形式嵌入应用布局在用户与应用交互期间持续显示并可自动刷新。本文以开源仓库 skills29/skills 中的 google-mobile-ads-banner 技能文档 为核心骨架系统讲解如何在 Android、iOS 与 Unity 三个平台上完成 Banner 广告的接入涵盖广告类型选择、平台化实现步骤、线程安全陷阱、加载事件订阅与上线前验证是一份可直接照做的实战指南。Banner 广告类型先选型再动手在开始写代码之前首先要明确接入哪种 Banner 广告类型。Google Mobile Ads 提供三种 Banner 形态它们在锚定方式、可用平台与适用场景上有明显区别Banner 类型说明Large Anchored Adaptive大型锚定自适应默认推荐类型。可锚定在屏幕顶部或底部宽度充满可用区域高度根据宽度动态计算。Anchored Adaptive锚定自适应同样可锚定在屏幕顶部或底部相比大型版本高度更紧凑。Inline Adaptive内联自适应仅支持 Android 与 iOS嵌入在可滚动内容流中如信息流、列表项不锚定屏幕边缘。根据技能文档的约定当用户只说banner而未指定类型时默认使用 Large Anchored Adaptive即使用户询问或建议其他类型也应优先推荐大型锚定自适应 Banner。仅在用户反馈大型锚定自适应 Banner 太高时才切换到普通的锚定自适应 Banner。场景提示Anchor锚定型 Banner 常被用作页面底部/顶部的固定广告位Inline内联型 Banner 则适合新闻流、商品列表等原生内容混排场景。总体工作流五步完成 Banner 集成无论哪个平台Banner 接入都遵循同一套五步流程对应技能文档 SKILL.md 中的核心清单确定目标平台先识别项目是 Android、iOS 还是 Unity若无法确定先向用户确认再继续。阅读平台指南根据平台选择对应的实现文档Androidreferences/android-banner.mdiOSreferences/ios-banner.mdUnityreferences/unity-banner.md按顺序执行以下步骤定义广告视图Define the ad view设置广告尺寸Set the ad size注册广告加载事件Register for ad load events加载 Banner 广告Load the banner ad验证实现Verify the implementation上线提醒Banner 成功实现后务必提醒用户将测试广告单元 ID 替换为自有广告单元 ID。下文按平台逐一展开这三份平台指南的细节并补充必要的底层原理与验证手段。Android使用 GMA Next-Gen SDK 的 AdView 接入 Banner必需导入与核心 API 签名Android 平台基于GMA Next-Gen SDK实现。技能文档要求使用以下导入import com.google.android.libraries.ads.mobile.sdk.banner.AdSize import com.google.android.libraries.ads.mobile.sdk.banner.AdView import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError核心 API 由BannerAdRequest、AdView.loadAd()与AdLoadCallback三者构成BannerAdRequest负责封装广告单元 ID 与广告尺寸BannerAdRequest.Builder(adUnitId: String, adSize: AdSize).build()AdView提供加载 Banner 的方法签名fun loadAd( adRequest: BannerAdRequest, adLoadCallback: AdLoadCallbackBannerAd ): UnitAdLoadCallbackT是加载结果的回调接口interface AdLoadCallbackT { fun onAdLoaded(ad: T): Unit fun onAdFailedToLoad(adError: LoadAdError): Unit }最容易踩的坑回调线程必须回主线程平台文档用MANDATORY强制级别标注了一条关键约束GMA Next-Gen SDK 的回调在后台线程被调用。所有涉及 UI 的操作如 Toast、View 更新、Fragment 事务必须包裹在runOnUiThread {}或Dispatchers.Main.launch {}中。跳过此步骤将导致应用崩溃。这与旧版 GMA SDK 回调运行在主线程的行为截然不同是 Next-Gen 迁移项目中最常见的崩溃来源之一务必在编码时统一封装。Android 五步实现详解1. 定义广告视图使用AdView定义 GMA Next-Gen SDK 的 Banner不要使用已废弃的BannerAd作为视图容器。2. 设置广告尺寸测试用途建议将AdSize的width设为360也可以使用设备实际宽度这是更常见的做法。根据广告类型选择对应的AdSize构造方法并搭配对应的测试广告单元 ID大型锚定自适应AdSize.getLargeAnchoredAdaptiveBannerAdSize(context, width)测试单元 ID 为ca-app-pub-3940256099942544/9214589741。若用户反馈该类型太高改用AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, width)。内联自适应AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(context, width)。注意AdSize与广告单元 ID 必须通过BannerAdRequest.Builder传入而不是直接设置在AdView上。3. 注册广告加载事件将AdLoadCallback实现传给loadAd()方法而不是直接设置在AdView上。4. 加载 Banner 广告调用AdView.loadAd(adRequest, adLoadCallback)发起加载。5. 验证实现运行gradle build -x test确认无编译错误并解决所有与 GMA SDK 相关的编译问题。iOS通过 Swift 原生命名接入 Banner平台特性iOS 平台使用 Google Mobile Ads SDKSDK 通过NS_SWIFT_NAME宏为 Objective-C API 提供地道的 Swift 命名因此 Swift 代码中的 API 名称如largeAnchoredAdaptiveBanner(width:)与文档示例保持一致即可。iOS 五步实现详解1. 定义广告视图创建BannerView时使用测试广告单元 IDca-app-pub-3940256099942544/2435281174。其中rootViewController参数是可选参数可以传nil。2. 设置广告尺寸测试用途建议将AdSize的width设为375同样可以改用设备宽度。根据广告类型选择全局尺寸函数大型锚定自适应largeAnchoredAdaptiveBanner(width:)若用户反馈太高改用currentOrientationAnchoredAdaptiveBanner(width:)。内联自适应currentOrientationInlineAdaptiveBanner(width:)。3. 注册广告加载事件在BannerView对象上设置delegate。4. 加载 Banner 广告调用BannerView的加载方法发起广告请求。5. 验证实现如果环境中可用xcodebuild运行xcodebuild以编程方式验证 iOS 工程可随 GMA SDK 正常编译并解决相关编译错误。如果不可用xcodebuild输出指引让用户在 Xcode 中手动构建工程并确认无编译错误。关联提示iOS 项目接入 Banner 前需先完成 SDK 初始化与GADApplicationIdentifier配置可参考同仓库的 google-mobile-ads-get-started 技能及其 iOS 初始化指南。UnityBannerView 与主线程事件分发Unity 平台通过GoogleMobileAds.Api命名空间接入实现思路与原生平台一致但多了 Unity 对象线程安全这一特殊约束。必需导入using System; using UnityEngine; using GoogleMobileAds.Api; using GoogleMobileAds.Common;Unity 五步实现详解1. 定义广告视图使用GoogleMobileAds.Api.BannerView类定义 Banner创建时传入对应平台的测试广告单元 IDAndroid 锚定自适应ca-app-pub-3940256099942544/9214589741iOS 锚定自适应ca-app-pub-3940256099942544/24352811742. 设置广告尺寸将AdSize.Banner或合适的自适应尺寸连同AdPositionAdPosition.Top或AdPosition.Bottom一起传给BannerView构造器。锚定自适应场景默认使用大型锚定自适应尺寸除非用户反馈广告太高或需要更小的高度。参考代码int width MobileAds.Utils.GetDeviceSafeWidth(); AdSize adSize AdSize .GetCurrentOrientationLargeAnchoredAdaptiveBannerAdSizeWithWidth(width); BannerView bannerView new BannerView(_adUnitId, adSize, AdPosition.Bottom);3. 注册广告加载事件订阅BannerView上的事件是可选的取决于应用需求事件典型用途OnBannerAdLoaded广告就绪并显示时更新 UI 状态OnBannerAdLoadFailed加载失败时记录错误日志OnAdPaid记录预估广告收入AdValue用于展示级变现追踪OnAdImpressionRecorded在内部遥测或第三方分析平台记录展示OnAdClicked记录用户点击OnAdFullScreenContentOpened点击后打开全屏目标内容时暂停游戏音频、计时器或玩法循环OnAdFullScreenContentClosed全屏目标内容关闭后恢复游戏音频或玩法循环CRITICAL 约束为 Unity 广告提供任何代码或说明时必须明确声明与 Unity 对象UnityEngine交互的后台广告回调必须通过MobileAdsEventExecutor.ExecuteInUpdate()调度到主线程执行因为 Unity API 不是线程安全的。标准写法bannerView.OnBannerAdLoaded () { MobileAdsEventExecutor.ExecuteInUpdate(() { // Interact with UnityEngine objects on the main thread here. }); };4. 加载 Banner 广告在BannerView上调用LoadAd()并传入新的AdRequestbannerView.LoadAd(new AdRequest());5. 验证实现编译 Unity 的 csproj 文件运行dotnet build解决所有与 GMA SDK 相关的编译错误。三平台对照与测试广告单元 ID 速查步骤AndroidiOSUnity广告视图AdViewNext-GenBannerViewBannerView测试宽度360375MobileAds.Utils.GetDeviceSafeWidth()大型锚定自适应尺寸getLargeAnchoredAdaptiveBannerAdSize(ctx, width)largeAnchoredAdaptiveBanner(width:)GetCurrentOrientationLargeAnchoredAdaptiveBannerAdSizeWithWidth(width)加载事件AdLoadCallback传入loadAd()BannerView.delegate事件订阅可选线程约束回调在后台线程UI 操作必须回主线程—与 Unity 对象交互必须用ExecuteInUpdate()回主线程编译验证gradle build -x testxcodebuild/ Xcode 手动构建dotnet build各平台测试广告单元 ID平台测试广告单元 IDAndroid锚定自适应ca-app-pub-3940256099942544/9214589741iOSca-app-pub-3940256099942544/2435281174以上均为 Google 官方测试广告单元 ID可安全用于开发调试上线发布前必须替换为你在 AdMob 后台申请的自有广告单元 ID。上线前自查把测试 ID 换成正式 ID技能文档在 Banner 成功实现后强调最后一步提醒用户将测试广告单元 ID 替换为自有 ID。关于测试广告单元是否残留的判定仓库中的 google-mobile-ads-validate 技能给出了可操作的检索规则见其 ad-units 检查指南AdMob 测试广告单元 ID 特征以ca-app-pub-3940256099942544/开头Ad Manager 测试广告单元 ID 特征以/6499/或/21775744923/开头格式校验AdMob 广告单元 ID 需匹配^(ca-app-pub-[a-zA-Z0-9\-])/([a-zA-Z0-9_\-])(/.*)?$Ad Manager 需匹配^/[0-9]*/.*|^/[0-9]*,[0-9]*/.*判定标准源码中发现测试广告单元 ID即使被DEBUG开关门控应给出 Warning格式错误则应判为 Fail。发布前可基于这套规则对整个工程做一次扫描确保线上版本不出现测试广告单元。小结Banner 广告接入的关键点可以浓缩为三句话先按大型锚定自适应默认选型再按定义视图 → 设置尺寸 → 注册事件 → 加载广告 → 验证编译五步顺序落地最后牢记线程安全约束并把测试广告单元 ID 换成正式 ID。本文基于仓库 google-mobile-ads-banner 及其三份平台指南展开Android/iOS/Unity 的完整实现细节分别见 android-banner.md、ios-banner.md 与 unity-banner.md。若还需接入插页Interstitial或激励视频Rewarded等其他广告格式可参考同仓库的 google-mobile-ads-interstitial 与 google-mobile-ads-rewarded 技能继续拓展。【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表