首页 > 解决方案 > 颤振 - 原生广告不会加载和显示,而且它的事件回调也没有显示任何内容

问题描述

在等待官方 Admob 的原生广告时,我尝试使用 3rd 方插件集成它。

我尝试使用声称可以在此处显示Admob 的原生广告 的插件。

但是,原生广告不会在 Android 设备上加载和显示(iOS 尚未测试)。

事件回调也没有显示任何内容。

我已经在这里提交了一个问题,但我认为作者可能很忙,所以我也在这里发布。

以下是我的代码:

对于初始化

class HomeScreen extends StatefulWidget{
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> with AfterLayoutMixin<HomeScreen> {

  @override
    void initState() {
      // TODO: implement initState
      super.initState();      
      NativeAds.initialize();
      ...
    }

对于NativeAds展示位置是在以下结构下:

@override
Widget build(BuildContext context) {
  return Stack(
    children: <Widget>[
      Scaffold(
        appBar: AppBar( .. ),
        body: OfflineBuilder(
              connectivityBuilder: (BuildContext context, ConnectivityResult connectivity, Widget child) {
                  ...  
                  child: NestedScrollView(
                      headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { ... }
                      body: RefreshIndicator(
                        backgroundColor: Pigment.fromString(UIData.primaryColor),
                        color: Colors.white,
                        onRefresh: () => homeBloc.init(),
                        child: ListView(
                          children: <Widget>[
                            Row(
                            ...
                              ListView(
                                physics: NeverScrollableScrollPhysics(),
                                shrinkWrap: true,
                                children: <Widget>[

                                ...


                                SizedBox(
                                  width: double.infinity,
                                  height: 320,
                                  child: NativeAdView(
                                    onParentViewCreated: (_) {
                                      print("sinative create.....");
                                    },
                                    androidParam: AndroidParam()
                                      ..placementId = "ca-app-pub-xxx" //my admob
                                      ..packageName = "com.apps.myapp"
                                      ..layoutName = "native_ad_layout"
                                      ..attributionText = "AD",
                                    iosParam: IOSParam()
                                      ..placementId = "ca-app-pub-3940256099942544/3986624511" // test
                                      ..bundleId = "{{YOUR_IOS_APP_BUNDLE_ID}}"
                                      ..layoutName = "{{YOUR_CREATED_LAYOUT_FILE_NAME}}"
                                      ..attributionText = "SPONSORED",
                                    onAdImpression: () => print("native is show"),
                                    onAdClicked: () => print("onAdClicked!!!"),
                                    onAdFailedToLoad: (Map<String, dynamic> error) => print("native is error ==> $error"),
                                  ),
                                ),                      

                                ...

                                ...


任何想法?

提前致谢...

==更新(根据 Itiel Maimon 的建议)

main.dart在runApp()之前进行了初始化,但是在调试中我得到了以下错误:

E/flutter (10737): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method initialize on channel native_ads)
E/flutter (10737): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:314:7)
E/flutter (10737): <asynchronous suspension>
E/flutter (10737): #1      new NativeAds.initialize (package:native_ads/native_ads.dart:5:14)
E/flutter (10737): #2      main.<anonymous closure> (package:apps789apps/main.dart:35:15)
E/flutter (10737): #3      _rootRunUnary (dart:async/zone.dart:1132:38)
E/flutter (10737): #4      _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter (10737): #5      _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
E/flutter (10737): #6      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
E/flutter (10737): #7      Future._propagateToListeners (dart:async/future_impl.dart:707:32)
E/flutter (10737): #8      Future._completeWithValue (dart:async/future_impl.dart:522:5)
E/flutter (10737): #9      _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
E/flutter (10737): #10     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
E/flutter (10737): #11     SystemChrome.setPreferredOrientations (package:flutter/src/services/system_chrome.dart)
E/flutter (10737): <asynchronous suspension>
E/flutter (10737): #12     main (package:apps789apps/main.dart:31:16)
E/flutter (10737): <asynchronous suspension>
E/flutter (10737): #13     _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:229:25)
E/flutter (10737): #14     _rootRun (dart:async/zone.dart:1124:13)
E/flutter (10737): #15     _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter (10737): #16     _runZoned (dart:async/zone.dart:1516:10)
E/flutter (10737): #17     runZoned (dart:async/zone.dart:1500:12)
E/flutter (10737): #18     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:221:5)
E/flutter (10737): #19     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:305:19)
E/flutter (10737): #20     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)

有什么解决办法吗?

标签: androidflutteradmobadsnative-ads

解决方案


https://pub.dev/packages/native_ads

一个新的原生广告包可用。尝试这个。

支持的原生广告字段

  1. 标题(必填)
  2. 正文(必填)
  3. 号召性用语(必填)
  4. 广告归因(必填)
  5. 媒体
  6. 图标
  7. 星星
  8. 评分
  9. 店铺
  10. 价格
  11. 广告商

事件回调

通过传递给 NativeAdView 构造函数来接收某些事件的回调

  1. 广告印象
  2. onAdClicked
  3. onAdFailedToLoad
  4. onAdLeft 应用程序
  5. onAdLoaded

目前不支持中介广告。检查上面给出的官方链接以获取新功能


推荐阅读