集成google_mobile_ads: ^0.13.0包后Flutter应用启动失败的技术求助
Flutter集成google_mobile_ads: ^0.13.0后启动崩溃?看这篇解决!
嘿,看了你的报错日志,核心问题一眼就看出来了:com.google.android.gms.ads.reward.RewardedVideoAdListener类找不到!这是因为你用的admob_flutter插件还在依赖旧版AdMob SDK的API,而google_mobile_ads: ^0.13.0已经引入了新版SDK,俩家伙的API不兼容,直接导致启动崩溃。
具体解决步骤
换掉过时的插件:
admob_flutter已经很久没更新维护了,建议直接把它从项目里移除,完全改用官方的google_mobile_ads包来实现广告功能。- 打开
pubspec.yaml,删除admob_flutter的依赖条目,保留google_mobile_ads: ^0.13.0。 - 执行命令:
flutter pub get更新依赖。
- 打开
适配新版广告API:官方的
google_mobile_ads已经用RewardedAd替代了旧的RewardedVideoAd系列API,你需要把原来的激励视频广告代码改成官方写法,举个简单例子:import 'package:google_mobile_ads/google_mobile_ads.dart'; RewardedAd? _rewardedAd; // 初始化广告服务 void initAdService() { MobileAds.instance.initialize(); loadRewardedAd(); // 提前加载广告 } // 加载激励视频广告 void loadRewardedAd() { RewardedAd.load( adUnitId: '你的激励视频广告ID', // 替换成你自己的ID request: const AdRequest(), rewardedAdLoadCallback: RewardedAdLoadCallback( onAdLoaded: (ad) { _rewardedAd = ad; // 设置广告全屏事件监听 _rewardedAd?.fullScreenContentCallback = FullScreenContentCallback( onAdDismissedFullScreenContent: (ad) { ad.dispose(); loadRewardedAd(); // 广告关闭后重新加载 }, onAdFailedToShowFullScreenContent: (ad, error) { ad.dispose(); loadRewardedAd(); }, ); }, onAdFailedToLoad: (error) { print('激励视频广告加载失败: ${error.message}'); }, ), ); } // 展示激励视频广告 void showRewardedAd() { if (_rewardedAd != null) { _rewardedAd?.show( onUserEarnedReward: (ad, reward) { // 这里写用户获得奖励后的逻辑,比如给金币、解锁功能 print('用户获得奖励:${reward.amount} ${reward.type}'); }, ); } }清理缓存重建项目:
- 执行命令:
flutter clean清除旧的构建缓存。 - 重新运行项目:
flutter run,应该就能正常启动了。
- 执行命令:
额外提醒
如果实在不想换插件,你可以尝试强制降低AdMob SDK的版本,但真心不推荐这么做——旧版本不仅可能有安全漏洞,后续和Flutter新版本的兼容性也会越来越差,不如直接切换到官方维护的插件一劳永逸。
内容的提问来源于stack exchange,提问作者Desilio Neto
相关产品推荐
相关产品推荐

