Flutter — Что такое factoryId для Admob в Flutter?

#flutter #admob

Вопрос:

Я Использую Этот плагин

Что такое factoryId для Admob в этом плагине..

и где я беру свой заводской номер для рекламы admob ?

потому что, когда я пытаюсь вызвать нативную рекламу, я получаю эту ошибку

 E/flutter (19354): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(NativeAdError, Can't find NativeAdFactory with id: FLTGoogleMobileAdsPlugin, null, null)
E/flutter (19354): #0      StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:581
E/flutter (19354): #1      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:158
E/flutter (19354): <asynchronous suspension>
E/flutter (19354): #2      NativeAd.load
package:google_mobile_ads/src/ad_containers.dart:576
E/flutter (19354): <asynchronous suspension>
E/flutter (19354):
 

это мой родной класс объявлений

 
class NativeAdWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => NativeAdState();
}

class NativeAdState extends State<NativeAdWidget> {
  NativeAd _nativeAd;
  final Completer<NativeAd> nativeAdCompleter = Completer<NativeAd>();

  @override
  void initState() {
    super.initState();
    _nativeAd = NativeAd(
      adUnitId: NativeAd.testAdUnitId,
      request: AdRequest(),
      factoryId: 'adFactoryExample',
      listener: AdListener(
        onAdLoaded: (Ad ad) {
          print('$NativeAd loaded.');
          nativeAdCompleter.complete(ad as NativeAd);
        },
        onAdFailedToLoad: (Ad ad, LoadAdError error) {
          ad.dispose();
          print('$NativeAd failedToLoad: $error');
          nativeAdCompleter.completeError(null);
        },
        onAdOpened: (Ad ad) => print('$NativeAd onAdOpened.'),
        onAdClosed: (Ad ad) => print('$NativeAd onAdClosed.'),
        onApplicationExit: (Ad ad) => print('$NativeAd onApplicationExit.'),
      ),
    );
    Future<void>.delayed(Duration(seconds: 1), () => _nativeAd?.load());
  }

  @override
  void dispose() {
    super.dispose();
    _nativeAd?.dispose();
    _nativeAd = null;
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<NativeAd>(
      future: nativeAdCompleter.future,
      builder: (BuildContext context, AsyncSnapshot<NativeAd> snapshot) {
        Widget child;

        switch (snapshot.connectionState) {
          case ConnectionState.none:
          case ConnectionState.waiting:
          case ConnectionState.active:
            child = Container();
            break;
          case ConnectionState.done:
            if (snapshot.hasData) {
              child = AdWidget(ad: _nativeAd);
            } else {
              child = Text('Error loading $NativeAd');
            }
        }

        return Container(
          width: 250,
          height: 350,
          child: child,
          color: Colors.blueGrey,
        );
      },
    );
  }
}
 

Я называю нативную рекламу такой

adWidget = NativeAdWidget(),

Может быть, я получаю эту ошибку, потому что мой идентификатор фабрики равен нулю?

я использовал баннерную рекламу этого плагина, которая работает нормально..

введите описание изображения здесь

Комментарии:

1. Может быть, это вам поможет : codelabs.developers.google.com/codelabs/…

2. Нашли ли вы ответ на эту проблему?

3. @МахмудхАджАли нет

Ответ №1:

Вы не выполнили всю часть настройки нативной рекламы mate. Вам также необходимо выполнить некоторые настройки на JAVA.

Согласно документам:

Настройка Платформы
Нативная реклама представляется пользователям с помощью компонентов пользовательского интерфейса, которые являются родными для платформы. (например, представление на Android или UIView на iOS). Поскольку для нативной рекламы требуются компоненты пользовательского интерфейса, встроенные в платформу, эта функция требует дополнительной настройки для Android и iOS.

Вы можете найти все в самих документах плагина https://pub.dev/packages/google_mobile_ads