Flutter 应用程序在实施 Google 广告后启动时崩溃

问题描述 投票:0回答:2

实施谷歌广告后,该应用程序在启动时崩溃。我用的是ios模拟器。广告在具有相同代码实现的其他应用程序上运行良好,但在此应用程序上则不然。其他应用程序即使使用原始广告单元 ID 也会显示测试广告。 插页式广告和奖励广告运行良好,只有横幅广告出现了问题。

错误: 要在此设备上获取测试广告,请设置: Objective-C GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ kGADSimulatorID ]; 迅速 GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ kGADSimulatorID ]

代码: AdHelper 类

import 'package:google_mobile_ads/google_mobile_ads.dart';

import 'dart:io';

class AdHelper {
  //  Android Ad Units
  static String _bannerAd_And = 'ca-app-pub-3884661730977437/3917788070';
  static String _interAd_And = 'ca-app-pub-3884661730977437/1291624734';

  static String _bannerAdTest_And = 'ca-app-pub-3940256099942544/6300978111';
  static String _interAdTest_And = 'ca-app-pub-3940256099942544/1033173712';

  //  iOS Ad Units
  static String _bannerAd_iOS = 'ca-app-pub-3884661730977437/4131225272';
  static String _interAd_iOS = 'ca-app-pub-3884661730977437/6845018522';

  static String _bannerAdTest_iOS = 'ca-app-pub-3940256099942544/2934735716';
  static String _interAdTest_iOS = 'ca-app-pub-3940256099942544/4411468910';

// FN returns Banner AD Unit Id
  static String get bannerAdUnitId {
    if (Platform.isAndroid) {
      return _bannerAdTest_And;
    } else if (Platform.isIOS) {
      return _bannerAdTest_iOS;
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }

  // FN returns Interstitial Ad Unit Id
  static String get interAdUnitId {
    if (Platform.isAndroid) {
      return _interAdTest_And;
    } else if (Platform.isIOS) {
      return _interAdTest_iOS;
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }
}

广告控制器

import 'package:get/get.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'AdMob_Helper.dart';

class AdMobController extends GetxController {
  ///------------------  Init
  @override
  void onInit() {
    getBannerAd();
    super.onInit();
  }

  ///------------------  Dispose
  @override
  void onClose() {
    bannerAd.dispose();
    super.onClose();
  }


  late BannerAd bannerAd;
  bool isBannerLoaded = false;

  //
  void getBannerAd() {
    bannerAd = BannerAd(
      adUnitId: AdHelper.bannerAdUnitId,
      size: AdSize.banner,
      request: AdRequest(),
      listener: BannerAdListener(
        onAdLoaded: (_) {
          isBannerLoaded = true;
          update();
        },
        onAdFailedToLoad: (ad, error) {
          // Releases an ad resource when it fails to load
          ad.dispose();

          print('Ad load failed (code=${error.code} message=${error.message})');
        },
      ),
    );

    // TODO: Load an ad
    bannerAd.load();

    update();
  }
}
flutter dart admob google-ads-api
2个回答
5
投票

我知道我参加聚会迟到了,但这可能会对将来的某人有所帮助。

就我而言,我把

meta-data
放在了错误的位置。

我的应用程序也在出现白屏(可能是闪屏)后崩溃。我打开 android studio 并查看

logcat
,这表明我的 google_mobile_ads 未正确初始化。

我已将

 <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxx~xxxxxx" />
放入清单文件中的
<activity>
内,而它必须位于
<application>
内。

简而言之,你的清单文件应该如下所示

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app">
   <application
        android:label="label"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">

            ...
        </activity>
      
      
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx" />

    </application>
</manifest>


0
投票

如果您找到相关链接,请浏览此内容, Flutter 应用程序在尝试加载插页式广告时崩溃

© www.soinside.com 2019 - 2024. All rights reserved.