【问题标题】:flutter - Native Ads wont load & show and also it's event callback not showing anything颤振 - 原生广告不会加载和显示,而且它的事件回调也没有显示任何内容
【发布时间】:2019-09-19 12:05:32
【问题描述】:

在等待官方 Admob 的 Native Ads 飘动时,我尝试使用 3rd 方插件集成它。

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

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

事件回调也没有显示任何东西。

我已经提交了一个issuehere,但是我觉得作者可能很忙,所以我也在这里发帖。

以下是我的代码:

对于初始化:

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 的建议)

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

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)

有什么想法可以解决吗?

【问题讨论】:

  • 一般来说,admob 需要一些时间来获取新应用的广告。您是否尝试过使用developers.google.com/admob/android/test-ads 测试ID?
  • @DharmendraPratapSingh 是的,我已经尝试过了,但没有成功...

标签: android flutter admob ads native-ads


【解决方案1】:

不要将NativeAds.initialize(); 放在 initState() 方法上。 把它放在你调用 runApp() 之前。 例如void main() { NativeAds.initialize(); runApp(MyApp()); }

还要确保您使用的是 Admob test ad unit ids,否则您将看不到任何广告。

如果仍然无法正常工作,请尝试通过在请求的位置使用child: const NativeAdViewWrapper(), 来使用NativeAdViewWrapper。

【讨论】:

  • 我已遵循您的所有建议,但现在收到错误 MissingPluginException(No implementation found for method initialize on channel native_ads(请参阅我更新的问题)。谢谢...
【解决方案2】:

我建议你使用这个插件flutter_native_admob,我在我的一些应用程序中使用它,它非常好用且简单。

// Initialize using you APPID
NativeAdmob().initialize(appID: APP_ID);

// Show the Native Ad Widget inside your list/grid..
NativeAdmobBannerView(
            adUnitID: Ads.NATIVE_ID,
            style: BannerStyle.light,
            showMedia: true,
          ) 

【讨论】:

    【解决方案3】:

    https://pub.dev/packages/native_ads

    提供新的原生广告包。试试这个。

    支持的原生广告字段

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

    事件回调

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

    1. onAdImpression
    2. 点击广告
    3. onAdFailedToLoad
    4. onAdLeftApplication
    5. onAdLoaded

    目前不支持中介广告。查看上面给出的官方链接了解新功能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2021-04-23
      • 2016-06-28
      • 1970-01-01
      • 2016-10-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多