【问题标题】:Google Mobile Ads Throwing MissingPluginException谷歌移动广告抛出 MissingPluginException
【发布时间】:2022-08-20 22:32:02
【问题描述】:

RewardedAd 不适用于 google_mobile_ads:2.0.1 我已经到处搜索了,但修复程序不起作用。

这是日志上的错误。

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 上添加了这段代码

 override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
}

我也确保把它放在 build.gradle

implementation \'com.google.android.gms:play-services-ads:21.1.0\'

我还将它添加到清单文件中

<meta-data
       android:name=\"com.google.android.gms.ads.APPLICATION_ID\"
       android:value=\"ca-app-pub-3940256099942544~3347511713\" />

这是我的实现

我在我的主目录上添加了这个

最终的 initFuture = MobileAds.instance.initialize(); 最终的 adState = AdState(initFuture);

并为 AdState 创建了另一个文件

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);

关于我的实施

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\');
    }));

}

    标签: flutter admob googlemobileads admob-rewardedvideoad


    【解决方案1】:

    上面的 Main Activity 代码是针对 kotlin 的。确保您的 Main Activity 也在 Kotlin 中。

    【讨论】:

    • 是的,我把它放在 Kotlin 文件中。
    • 顺便说一句,这个答案并不能解决问题。
    【解决方案2】:

    好吧,在让这个问题给我带来创伤之后,我设法让它发挥作用。我所做的是将所有内容包装在 MaterialApp 中,并将路由放在我的主 Widget 上。

    运行应用程序( 材料应用程序( 路线:<String, WidgetBuilder>{ '/': (BuildContext 上下文) => MyApp() }, ), );

    至于它是如何工作的,我不知道它是如何解决所有问题的,但如果您遇到此问题,它可能会对您有所帮助。如果此修复程序可以帮助您解决这种创伤,请对此表示支持。只是在开玩笑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 2021-06-10
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多