【问题标题】:Flutter App crashes when InterstitialAd is loaded加载 InterstitialAd 时 Flutter App 崩溃
【发布时间】:2021-04-25 17:26:22
【问题描述】:

我已经测试了bannerAds,它工作正常,但是当我尝试加载插页式广告时,应用程序崩溃了。

MinSdkVersion 29 我尝试在 initState 和 build 方法中分别加载广告。

横幅广告运行正常。

InterstitialAd loadInterstitialAd() {
    return InterstitialAd(
        adUnitId: "ca-app-pub-3940256099942544/1033173712",
        listener: AdListener(onAdLoaded: (_) {
          setState(() {
            _isAdLoaded = true;
          });
        }, onAdFailedToLoad: (_ad, error) {
          _ad.dispose();
          print("Ad Exited with error $error");
        }, onAdClosed: (_ad) {
          Navigator.pop(context);
          _ad.dispose();
        }),
        request: AdRequest());
  }

  @override
  Widget build(BuildContext context) {
    InterstitialAd _ad = loadInterstitialAd();
    _ad.load();
    return Scaffold(
      body: Center(
          child: MaterialButton(
        onPressed: () {},
        color: Colors.red,
      )
          ),
    );
  }

错误日志是这样的

E/AndroidRuntime(22505): FATAL EXCEPTION: main
E/AndroidRuntime(22505): Process: tech.deepaksharma.statussaver, PID: 22505
E/AndroidRuntime(22505): java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/ads/InterstitialAd;
E/AndroidRuntime(22505):    at io.flutter.plugins.googlemobileads.FlutterInterstitialAd.load(FlutterInterstitialAd.java:70)
E/AndroidRuntime(22505):    at io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.onMethodCall(GoogleMobileAdsPlugin.java:299)
E/AndroidRuntime(22505):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/AndroidRuntime(22505):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/AndroidRuntime(22505):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
E/AndroidRuntime(22505):    at android.os.MessageQueue.nativePollOnce(Native Method)
E/AndroidRuntime(22505):    at android.os.MessageQueue.next(MessageQueue.java:343)
E/AndroidRuntime(22505):    at android.os.Looper.loop(Looper.java:188)
E/AndroidRuntime(22505):    at android.app.ActivityThread.main(ActivityThread.java:7582)
E/AndroidRuntime(22505):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(22505):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/AndroidRuntime(22505):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
E/AndroidRuntime(22505): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.InterstitialAd" on path: DexPathList[[zip file "/data/app/tech.deepaksharma.statussaver-7ebD-4rtvclB1sSW4YF-Lw==/base.apk"],nativeLibraryDirectories=[/data/app/tech.deepaksharma.statussaver-7ebD-4rtvclB1sSW4YF-Lw==/lib/arm64, /data/app/tech.deepaksharma.statussaver-7ebD-4rtvclB1sSW4YF-Lw==/base.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64]]
E/AndroidRuntime(22505):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
E/AndroidRuntime(22505):    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(22505):    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(22505):    ... 12 more
I/Process (22505): Sending signal. PID: 22505 SIG: 9
Lost connection to device.

【问题讨论】:

    标签: android flutter admob


    【解决方案1】:

    我遇到了同样的问题,并通过调整我的 build.gradle 文件中的一些依赖项来修复它。

    问题似乎是由play-services-ads 版本 20 引起的,它将 InterstitialAd 类移动到命名空间“com.google.android.gms.ads.interstitial”(之前它位于命名空间“com.google.android. gms.ads”)。

    Flutter 插件Google Mobile Ads version 0.12.1+1 使用 play-services-ads 版本 19.7,因此它会尝试从旧命名空间加载 InterstitialAd 类。我的问题是我们使用 Admob 中介,并且我们使用第三方中介适配器。这些适配器的最新版本使用的是 play-services-ads 版本 20,这导致了问题。我的解决方案是检查Admob mediation page 中的更改日志,对于我们使用的每个适配器,然后使用 play-services-ads 19.7 版包含适配器的版本。例如,我们使用:

    implementation 'com.google.ads.mediation:adcolony:4.4.1.0'
    implementation 'com.google.ads.mediation:applovin:9.15.2.0'
    implementation 'com.google.ads.mediation:tapjoy:12.7.1.0'
    implementation 'com.google.ads.mediation:facebook:6.3.0.1'
    

    编辑:Google 刚刚发布了 google_mobile_ads 包版本 0.13.0,它针对 Android 依赖项版本 20.1.0 的 GMA,因此如果您更新此包,问题就会消失。

    【讨论】:

      【解决方案2】:

      先尝试更新到最新的Google Mobile Ads SDK

      【讨论】:

        猜你喜欢
        • 2021-08-21
        • 1970-01-01
        • 2020-07-22
        • 2019-08-15
        • 2022-06-13
        • 2020-04-19
        • 2019-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多