#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