首页 > 解决方案 > Flutter MissingPluginException(在通道 plugins.flutter.io/firebase_admob 上找不到方法 loadInterstitialAd 的实现)

问题描述

我得到的错误。我见过其他 MissingPluginExeptions,但没有看到 firebase_admob。

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method loadInterstitialAd on channel plugins.flutter.io/firebase_admob)
#0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:319:7)
<asynchronous suspension>                                               
#1      _invokeBooleanMethod (package:firebase_admob/firebase_admob.dart:611:61)
#2      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:45:6)
#3      _invokeBooleanMethod (package:firebase_admob/firebase_admob.dart:610:34)
#4      InterstitialAd.load (package:firebase_admob/firebase_admob.dart:377:12)
#5      _personSettingsState.initState (package:randompersonapp/personSettings.dart:68:45)
#6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4355:58)
#7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
#8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
#9      Element.updateChild (package:flutter/src/widg<…&gt; 

这些是我尝试过的过程。我没有从颤振医生那里得到任何错误。

flutter clean
flutter doctor
flutter run

这是我用来获取错误的代码。它在一个有状态的小部件内,但我无法显示所有这些,因为它在生产代码中。

import 'dart:math';

import 'package:firebase_admob/firebase_admob.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';


InterstitialAd myInterstitial;

  InterstitialAd buildInterstitialAd() {
    return InterstitialAd(
      adUnitId: InterstitialAd.testAdUnitId,
      listener: (MobileAdEvent event) {
        if (event == MobileAdEvent.failedToLoad) {
          myInterstitial..load();
        } else if (event == MobileAdEvent.closed) {
          myInterstitial = buildInterstitialAd()..load();
        }
        print(event);
      },
    );
  }

void showInterstitialAd() {
    myInterstitial..show();
  }

  void showRandomInterstitialAd() {
    Random r = new Random();
    bool value = r.nextBool();

    if (value == true) {
      myInterstitial..show();
    }
  }

@override
  void initState() {
    myInterstitial = buildInterstitialAd()..load();

    super.initState();
  }

  @override
  void dispose() {
    myInterstitial.dispose();

    super.dispose();
  }

我在 firebase 中制作了两个应用程序,并将它们与 Android 的 appmanifest 和 IOS 的 info.plist 中的应用程序 ID 相关联。错误指向该行

myInterstitial = buildInterstitialAd()..load();

有人有任何提示吗?我愿意接受有关此事的任何建议或想法。

标签: firebaseflutteradmobfirebase-admob

解决方案


如果你有这个问题:首先:在 android manifest 中添加这个

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="[ADMOB_APP_ID]"/>
    </application>
</manifest>

第二:当你在 android manifest 中添加一些东西时,你需要关闭应用程序(停止模拟)并重新开始 android manifest 刷新。

PS:不要忘记在 app/build.gradle 中添加这个:

implementation 'com.google.firebase:firebase-ads:18.0.0'

推荐阅读