PlatformException(NativeAdError, Can't find NativeAdFactory with id on flutter native ads (android)

Viewed 120

I am facing this error on flutter native ads (android):

PlatformException(NativeAdError, Can't find NativeAdFactory with id: homeScreen, null, null)

google_mobile_ads: ^0.13.0

this is my HomeScreenNativeAd.kt file

class HomeScreenNativeAd(val context: Context) : GoogleMobileAdsPlugin.NativeAdFactory {

    override fun createNativeAd(
            nativeAd: NativeAd,
            customOptions: MutableMap<String, Any>?
    ): NativeAdView {
        val homeScreenNativeView = LayoutInflater.from(context)
                .inflate(R.layout.home_screen_native_ad, null) as NativeAdView

        with(homeScreenNativeView) {
            val attributionViewSmall =
                    findViewById<TextView>(R.id.tv_home_item_native_ad_attribution_small)


            val icon = findViewById<ImageView>(R.id.home_item_bg_image)


            val image = nativeAd.icon
            if (image != null) {
                attributionViewSmall.visibility = View.VISIBLE
                icon.setImageDrawable(image.drawable)
            } else {
                attributionViewSmall.visibility = View.INVISIBLE
            }
            this.iconView = iconView

            val adV =   findViewById<TextView>(R.id.adviser)
            adV.text = nativeAd.advertiser
            this.advertiserView =adV

            val ctaButton =   findViewById<TextView>(R.id.home_screen_cta_button)
            ctaButton.text = nativeAd.callToAction
            this.callToActionView = ctaButton

            val adDesc =   findViewById<TextView>(R.id.home_item_ad_desc)
            adDesc.text = nativeAd.body
            this.bodyView = ctaButton



            val headlineView = findViewById<TextView>(R.id.home_item_ad_title)
            headlineView.text = nativeAd.headline
            this.headlineView = headlineView




            setNativeAd(nativeAd)
        }

        return homeScreenNativeView
    }
}

home_screen_native_ad.xml file

`

<com.google.android.gms.ads.nativead.NativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <RelativeLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"

            android:layout_height="160dp">



            <FrameLayout
                android:layout_width="match_parent"
                android:background="#00ffffff"
                android:layout_height="140dp"/>

            <RelativeLayout

                android:layout_width="match_parent"
                android:layout_height="190dp"
                android:layout_marginTop="16dp"
                android:layout_marginEnd="16dp"
                android:layout_marginBottom="16dp"
                android:gravity="start"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/home_item_bg_image"
                    android:layout_width="60dp"
                    android:layout_height="60dp"
                    android:scaleType="centerCrop"
                    android:layout_marginLeft="16dp"


                    />


                <TextView
                    android:id="@+id/home_item_ad_title"
                    android:layout_width="220dp"

                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_toRightOf="@+id/home_item_bg_image"
                    android:ellipsize="end"
                    android:lines="1"
                    android:maxLines="1"
                    android:textColor="#FFFFFFFF"
                    android:textSize="20sp"
                    tools:text="Headline" />

                <TextView
                    android:id="@+id/adviser"
                    android:layout_width="229dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_marginTop="32dp"
                    android:layout_toRightOf="@+id/home_item_bg_image"
                    android:ellipsize="end"
                    android:lines="1"
                    android:maxLines="1"
                    android:textColor="#FFFFFFFF"
                    android:textSize="14sp"
                    tools:text="Advertiser" />


                <TextView
                    android:id="@+id/tv_home_item_native_ad_attribution_small"
                    android:layout_width="35dp"
                    android:layout_height="20dp"
                    android:layout_marginLeft="10dp"
                    android:layout_toRightOf="@+id/home_item_ad_title"
                    android:background="@color/softOrange"
                    android:gravity="center"
                    android:lines="1"
                    android:maxLines="1"
                    android:text="Ad"
                    android:textColor="#FFFF"
                    android:textSize="12sp" />



            </RelativeLayout>

            <TextView
                android:id="@+id/home_item_ad_desc"
                android:layout_width="270dp"
                android:layout_height="40dp"
                android:layout_marginTop="85dp"
                android:ellipsize="end"
                android:lines="2"
                android:gravity="center_vertical"
                android:maxLines="2"
                android:textColor="#FFFFFFFF"
                android:textSize="14sp"
                android:layout_marginLeft="16dp"
                tools:text="Headline" />

            <TextView
                android:id="@+id/home_screen_cta_button"
                android:layout_width="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_height="30dp"
                android:layout_toRightOf="@+id/home_item_ad_desc"
                android:layout_marginTop="100dp"
                android:text="INSTALL"
                android:gravity="center"
                android:ellipsize="end"
                android:lines="1"
                android:textColor="#FFF"
                android:maxLines="1"
                android:textSize="18sp"
                />


        </RelativeLayout>
    </FrameLayout>
</com.google.android.gms.ads.nativead.NativeAdView>`

MainActivity.kt

`class MainActivity : FlutterActivity() {
    private val CHANNEL = "verified.cv/channel" //The channel name you set in your main.dart file

    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler {
            // Note: this method is invoked on the main thread.
            call, result ->

            if (call.method == "createNotificationChannel") {
                val argData = call.arguments as java.util.HashMap<String, String>
                val completed = createNotificationChannel(argData)
                if (completed == true) {
                    result.success(completed)
                } else {
                    result.error("Error Code", "Error Message", null)
                }
            } else {
                result.notImplemented()
            }
        }
        GoogleMobileAdsPlugin.registerNativeAdFactory(
                flutterEngine, "listTile", ListTileNativeAdFactory(context))
        GoogleMobileAdsPlugin.registerNativeAdFactory(
                flutterEngine, "skillCard", SkillCardNativeFactory(context))
        GoogleMobileAdsPlugin.registerNativeAdFactory(
                flutterEngine, "homeScreen", HomeScreenNativeAd(context))
        GoogleMobileAdsPlugin.registerNativeAdFactory(
                flutterEngine, "feedItem", FeedItemNativeFactory(context))


    }

    override fun cleanUpFlutterEngine(flutterEngine: FlutterEngine) {
        super.cleanUpFlutterEngine(flutterEngine)

        // TODO: Unregister the ListTileNativeAdFactory
        GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "listTile")
        GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "skillCard")
        GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "homeScreen")
        GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "feedItem")



    }

    private fun createNotificationChannel(mapData: HashMap<String, String>): Boolean {
        val completed: Boolean
        if (VERSION.SDK_INT >= VERSION_CODES.O) {
            // Create the NotificationChannel
            val id = mapData["id"]
            val name = mapData["name"]
            val descriptionText = mapData["description"]
            // val sound = "your_sweet_sound"
            val importance = NotificationManager.IMPORTANCE_HIGH
            val mChannel = NotificationChannel(id, name, importance)
            mChannel.description = descriptionText

            // val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getApplicationContext().getPackageName() + "/raw/your_sweet_sound");
            // val att = AudioAttributes.Builder()
            //         .setUsage(AudioAttributes.USAGE_NOTIFICATION)
            //         .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
            //         .build();

            //mChannel.setSound(soundUri, att)
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(mChannel)
            completed = true
        } else {
            completed = false
        }
        return completed
    }
}
`

I/flutter ( 1409): ----------------FIREBASE CRASHLYTICS----------------
I/flutter ( 1409): PlatformException(NativeAdError, Can't find NativeAdFactory with id: homeScreen, null, null)
I/flutter ( 1409): #0      StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:607
I/flutter ( 1409): #1      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:177
I/flutter ( 1409): <asynchronous suspension>
I/flutter ( 1409): #2      NativeAd.load
package:google_mobile_ads/src/ad_containers.dart:1033
I/flutter ( 1409): <asynchronous suspension>
I/flutter ( 1409): ----------------------------------------------------
D/ACodec  ( 1409): dataspace changed to 0x10c40000 (R:2(Limited), P:4(BT601_6_525), M:3(BT601_6), T:3(SMPTE170M)) (
0 Answers
Related