首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌移动广告投放MissingPluginException

谷歌移动广告投放MissingPluginException
EN

Stack Overflow用户
提问于 2022-08-17 14:10:33
回答 2查看 246关注 0票数 0

RewardedAd在google_mobile_ads上不起作用: 2.0.1我已经到处搜索过了,修复程序也不起作用。

这是日志上的错误。

代码语言:javascript
复制
E/DartMessenger( 5002): Uncaught exception in binary message listener
E/DartMessenger( 5002): java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
E/DartMessenger( 5002):     at io.flutter.plugins.googlemobileads.AdMessageCodec.readValueOfType(AdMessageCodec.java:231)
E/DartMessenger( 5002):     at io.flutter.plugin.common.StandardMessageCodec.readValue(StandardMessageCodec.java:340)
E/DartMessenger( 5002):     at io.flutter.plugin.common.StandardMessageCodec.readValueOfType(StandardMessageCodec.java:434)
E/DartMessenger( 5002):     at io.flutter.plugins.googlemobileads.AdMessageCodec.readValueOfType(AdMessageCodec.java:319)
E/DartMessenger( 5002):     at io.flutter.plugin.common.StandardMessageCodec.readValue(StandardMessageCodec.java:340)
E/DartMessenger( 5002):     at io.flutter.plugin.common.StandardMethodCodec.decodeMethodCall(StandardMethodCodec.java:51)
E/DartMessenger( 5002):     at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:260)
E/DartMessenger( 5002):     at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/DartMessenger( 5002):     at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$DartMessenger(DartMessenger.java:319)
E/DartMessenger( 5002):     at io.flutter.embedding.engine.dart.-$$Lambda$DartMessenger$TsixYUB5E6FpKhMtCSQVHKE89gQ.run(Unknown Source:12)
E/DartMessenger( 5002):     at android.os.Handler.handleCallback(Handler.java:883)
E/DartMessenger( 5002):     at android.os.Handler.dispatchMessage(Handler.java:100)
E/DartMessenger( 5002):     at android.os.Looper.loop(Looper.java:237)
E/DartMessenger( 5002):     at android.app.ActivityThread.main(ActivityThread.java:7830)
E/DartMessenger( 5002):     at java.lang.reflect.Method.invoke(Native Method)
E/DartMessenger( 5002):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/DartMessenger( 5002):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1040)
E/flutter ( 5002): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: MissingPluginException(No implementation found for method loadRewardedAd on channel plugins.flutter.io/google_mobile_ads)
E/flutter ( 5002): #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:165:7)
E/flutter ( 5002): <asynchronous suspension>
E/flutter ( 5002): #1      RewardedAd.load (package:google_mobile_ads/src/ad_containers.dart:1154:5)
E/flutter ( 5002): <asynchronous suspension>
E/flutter ( 5002): 

我已经在MainActivity上登了这段代码

代码语言:javascript
复制
 override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
}

我还确保把这个放在build.gradle上

代码语言:javascript
复制
implementation 'com.google.android.gms:play-services-ads:21.1.0'

我还将此添加到清单文件中。

代码语言:javascript
复制
<meta-data
       android:name="com.google.android.gms.ads.APPLICATION_ID"
       android:value="ca-app-pub-3940256099942544~3347511713" />

这是我的实现

我在主菜上加了这个

final initFuture = MobileAds.instance.initialize();adState = AdState(initFuture);

并为AdState创建了另一个文件

代码语言:javascript
复制
static String get rewardedAdUnitId {
  if (Platform.isAndroid) {
    return "ca-app-pub-3940256099942544/5224354917";
  } else if (Platform.isIOS) {
    return "ca-app-pub-3940256099942544/1712485313";
  } else {
    throw new UnsupportedError("Unsupported platform");
  }
}

未来的初始化;

AdState(this.initialization);

论我的实施

代码语言:javascript
复制
void loadRewardedAd(BuildContext context)  {
RewardedAd.load(
    adUnitId: AdState.rewardedAdUnitId,
    request: const AdRequest(),
    rewardedAdLoadCallback:
    RewardedAdLoadCallback(onAdLoaded: (ad) {
      ad.show(
          onUserEarnedReward: (ad,rewardPoints){
            CommonTools.showMessage(context, 'Energy Received : ');
          }
      );

      ad.fullScreenContentCallback = FullScreenContentCallback(
          onAdShowedFullScreenContent: (ad){

          },
          onAdFailedToShowFullScreenContent: (ad,error){
            CommonTools.showMessage(context, 'Ads Not Available For Now');
            ad.dispose();
          },
          onAdDismissedFullScreenContent: (ad){
            CommonTools.showMessage(context, 'Ads Not Available For Now');
            ad.dispose();
          }
      );

    }, onAdFailedToLoad: (er) {
      CommonTools.showMessage(context, 'Ads Not Available For Now');
    }));

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-20 14:32:02

在使这个问题给我带来创伤后,我设法使它发挥作用。我所做的就是在MaterialApp中包装所有的东西,并在我的主Widget上放置路径。

代码语言:javascript
复制
runApp(
    MaterialApp(
      routes: <String, WidgetBuilder>{
        '/': (BuildContext context) => MyApp()
      },
    ),
  );

至于它是如何工作的,我不知道它是如何解决所有问题的,但如果您遇到这个问题,它可能会对您有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2022-08-17 17:16:58

上面的主要活动代码是kotlin的。确保你的主要活动也在科特林。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73389993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档