求KMP项目中iOS侧集成Google AdMob的实现教程与指引
KMP项目iOS端集成Google AdMob实现指引
1. 配置iOS端依赖
- 打开
iosApp目录下的Podfile,添加AdMob依赖:pod 'Google-Mobile-Ads-SDK' - 在终端执行
pod install,之后使用.xcworkspace文件打开iOS项目。
2. 共享层接口定义(commonMain)
先在共享模块定义统一的广告操作接口,确保Android和iOS实现对齐:
interface AdMobManager { fun initialize(appId: String) fun loadBannerAd(adUnitId: String) fun showBannerAd() // 根据需求添加插屏、激励视频等广告方法 } // 全局管理器,用于在iOS端传递实现实例 object SharedAdMobProvider { lateinit var adMobManager: AdMobManager }
3. iOS端具体实现(iosMain)
通过Kotlin/Native调用AdMob的iOS SDK,实现共享接口:
import platform.GoogleMobileAds.GADMobileAds import platform.GoogleMobileAds.GADBannerView import platform.GoogleMobileAds.GADRequest import platform.UIKit.CGRectMake import platform.UIKit.UIWindow class IosAdMobManager(private val window: UIWindow) : AdMobManager { private var bannerView: GADBannerView? = null override fun initialize(appId: String) { GADMobileAds.sharedInstance().startWithCompletionHandler(null) } override fun loadBannerAd(adUnitId: String) { bannerView = GADBannerView().apply { this.adUnitID = adUnitId rootViewController = window.rootViewController loadRequest(GADRequest()) // 广告加载完成后自动展示 setAdLoadedBlock { showBannerAd() } } } override fun showBannerAd() { bannerView?.let { view -> // 将Banner放置在屏幕底部 view.frame = CGRectMake( 0.0, window.bounds.size.height - view.bounds.size.height, window.bounds.size.width, view.bounds.size.height ) window.addSubview(view) } } }
4. iOS应用层桥接(iosApp)
在iOS原生代码中初始化AdMob,并将实现实例传递给共享层:
import UIKit import GoogleMobileAds import shared // 替换为你的KMP共享模块名称 class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { guard let window = window else { return true } // 初始化iOS端AdMob管理器并传递给共享层 let iosAdMobManager = IosAdMobManager(window: window) SharedAdMobProvider.adMobManager = iosAdMobManager // 初始化AdMob(使用你的App ID) iosAdMobManager.initialize(appId: "ca-app-pub-xxx~xxx") return true } }
5. Info.plist配置
在iOS项目的Info.plist中添加必要配置:
- 添加键
GADApplicationIdentifier,值为你的AdMob App ID - 若需要用户跟踪权限,添加
NSUserTrackingUsageDescription,填写跟踪用途说明(例如:"需要跟踪您的行为以提供个性化广告")
6. 扩展其他广告类型(示例:插屏广告)
如果需要插屏广告,可在IosAdMobManager中扩展方法:
import platform.GoogleMobileAds.GADInterstitialAd import platform.GoogleMobileAds.GADInterstitialAdLoadCompletionHandler class IosAdMobManager(private val window: UIWindow) : AdMobManager { // 保留原有Banner相关代码... private var interstitialAd: GADInterstitialAd? = null fun loadInterstitialAd(adUnitId: String) { GADInterstitialAd.loadAdWithAdUnitID( adUnitId, request = GADRequest(), completionHandler = { ad, error -> if (error == null) { interstitialAd = ad } } ) } fun showInterstitialAd() { interstitialAd?.presentFromRootViewController(window.rootViewController) } }
内容的提问来源于stack exchange,提问作者Robert Jamison
相关产品推荐
相关产品推荐

