Admob 测试集成不适用于 Flutter 应用程序

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

花了几天时间仍然无法让它工作...这是我一生中度过的最无用的时间,该服务有什么问题,我几个月前尝试过并遇到了同样的错误。我认为这是一些配置文件验证错误,但遗憾的是没有,有什么想法为什么它不起作用吗? :

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

class Ads extends StatefulWidget {
  @override
  State<Ads> createState() => AdsState();
}

class AdsState extends State<Ads> {
  RewardedAd? _rewardedAd;
  int _rewardedScore = 0;

  final _adUnitId = 'ca-app-pub-3940256099942544/5224354917';

  @override
  void initState() {
    super.initState();
    _createRewardedAd();
  }

  void _createRewardedAd() {
    RewardedAd.load(
        adUnitId: _adUnitId,
        request: const AdRequest(),
        rewardedAdLoadCallback: RewardedAdLoadCallback(
          onAdLoaded: (ad) {
            debugPrint('$ad loaded.');
            _rewardedAd = ad;
          },
          onAdFailedToLoad: (LoadAdError error) {
            debugPrint('RewardedAd failed to load: $error');
          },
        ));
  }

  @override
  void dispose() {
    _rewardedAd?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: const BoxDecoration(
        gradient: LinearGradient(
          colors: [Color(0xFF303030), Color(0xFF6B46C1), Color(0xFF303030)],
          begin: Alignment.topLeft,
          end: Alignment.bottomRight,
          stops: [0.05, 0.5, 1],
        ),
      ),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          DefaultTextStyle(
              style: TextStyle(
                  fontSize: 15,
                  fontFamily: GoogleFonts.akatab().fontFamily,
                  color: Colors.white,
                  fontWeight: FontWeight.bold),
              child: Text('Reward Ad : $_rewardedScore')),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _showRewardedAd,
            child: const Text('Get 1 Free score'),
          )
        ],
      ),
    );
  }

  void _showRewardedAd() {
    try {
      _rewardedAd?.fullScreenContentCallback = FullScreenContentCallback(
        onAdDismissedFullScreenContent: (ad) {
          ad.dispose();
          _createRewardedAd();
        },
        onAdFailedToShowFullScreenContent: (ad, error) {
          ad.dispose();
          _createRewardedAd();
        },
      );

      _rewardedAd?.show(
        onUserEarnedReward: (ad, reward) {
          setState(() {
            _rewardedScore += reward.amount.toInt();
          });
        },
      );
      _rewardedAd = null;
    } catch (error) {
      print('Something went wrong');
    }
  }
}

主要:

import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:firebase_core/firebase_core.dart';
void main() async {
  try {
    WidgetsFlutterBinding.ensureInitialized();
    MobileAds.instance.initialize();
    final List<String> testDeviceIds = ["XXXXXXXXXXXX"];
    final RequestConfiguration configuration =
        RequestConfiguration(testDeviceIds: testDeviceIds);
    MobileAds.instance.updateRequestConfiguration(configuration);
  } catch (error) {
    print("Error :  $error");
  }
  runApp(const MyApp());
}

我放了最重要的日志报告:

I/DynamiteModule(31513): Considering local module com.google.android.gms.ads.dynamite:0 and remote module com.google.android.gms.ads.dynamite:240304704
I/DynamiteModule(31513): Selected remote version of com.google.android.gms.ads.dynamite, version >= 240304704
W/Ads     (32615): Invoke Firebase method getInstance error.
W/Ads     (31513): The Google Mobile Ads SDK will not integrate with Firebase. Admob/Firebase integration requires the latest Firebase SDK jar, but Firebase SDK is either missing or out of date
I/Ads     (31513): Ad failed to load : 3
I/flutter (31513): RewardedAd failed to load: LoadAdError(code: 3, domain: com.google.android.gms.ads, message: No fill., responseInfo: ResponseInfo(responseId: null, mediationAdapterClassName: , adapterResponses: [], loadedAdapterResponseInfo: null), responseExtras: {})

我还安装了 firebase,以防万一,但仍然没有...我还获取了设备 ID 并将其放入 testDeviceIds 变量中,但又什么也没有,我不知道为什么它仍然在日志中显示..

await Firebase.initializeApp();

清单:

<meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="XXXXXXXXX"/>
android flutter admob
1个回答
0
投票

终于明白了,它在尝试加载 admobob add 时需要一个循环。因此,进行循环直到获得 add 。

对我来说,解决方案是:

 void _createRewardedAd() {
    RewardedAd.load(
      adUnitId: _adUnitId,
      request: const AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
        onAdLoaded: (ad) {
          debugPrint('$ad loaded.');
          _rewardedAd = ad;
          adLoaded = true;
        },
        onAdFailedToLoad: (LoadAdError error) {
          debugPrint('RewardedAd failed to load: $error');
          do {
            Future.delayed(Duration(seconds: 2), () {
              _createRewardedAd();
            });
          } while (adLoaded);
        },
      ),
    );
  }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.