使用 Admob 在 android 中实施原生广告?可能吗?

Implementing native ads in android using Admob? is it possible?

我正在尝试在我的 android 应用程序中实施原生广告。但我只想使用 admob 来做到这一点。我搜索了很多解决方案,但找不到确切的解决方案。

我知道可以使用 MoPub

我想做的是: 在列表项内显示广告,这意味着 ListView/RecyclerView 项之一可以是一个广告,如下图所示。

我找到了一些链接和参考资料,但这并不能解释原生广告的正确实施。

Link 1:原生广告概述

Link 2 : DFP Android 指南 > 定位

Link 3:DFP 广告管理系统快速入门指南

如果使用 admob 无法做到这一点,MoPub 是目前对我来说最好的解决方案。

任何帮助和指导都会有所帮助。谢谢。

尝试使用其他一些提供不同类型原生广告的广告网络。开发人员可以自定义广告的放置和使用位置。例如:如果您需要在每 15 行的第二个单元格放置广告,您可以这样使用。

Avocarrot规定。

 AvocarrotInstream myAd = new AvocarrotInstream(<yourListAdapter>);
  myAd.initWithKey( "<your API Key>" );
  myAd.setSandbox(true);
  myAd.setLogger(true ,"ALL"); 

// Populate with In-Stream ads
 myAd.loadAdForPlacement(this,  "<your Placement Name>" );
// Bind the adapter to your list view component
<yourListView>.setAdapter(myAd);// here you are integrating ads to listview
 myAd.setFrequency(2,15); // every 15 cells starting from the 2nd cell. 

这里是Documentation它提供了List广告和Feed广告。

原生广告与其余 DFP/AdMob 广告一起包含在 Google Play 服务中。确保在 build.gradle 中将以下内容列为依赖项(请注意,7.5.0 是截至本文发布时的最高版本)。

compile "com.google.android.gms:play-services-base:7.5.0"
compile "com.google.android.gms:play-services-ads:7.5.0"

然后就可以展示原生广告了

AdLoader adLoader = new AdLoader.Builder(context, "/6499/example/native")
    .forAppInstallAd(new OnAppInstallAdLoadedListener() {
        @Override
        public void onAppInstallAdLoaded(NativeAppInstallAd appInstallAd) {
            // Show the app install ad.
        }
    })
    .forContentAd(new OnContentAdLoadedListener() {
        @Override
        public void onContentAdLoaded(NativeContentAd contentAd) {
            // Show the content ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            // Handle the failure by logging, altering the UI, etc.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Click here for complete documentation.

最近我被同样的问题困住了。然后我决定 post 我的解决方案 admobadapter。希望对你有所帮助。

基本用法可能如下所示:

    ListView lvMessages;
    AdmobAdapterWrapper adapterWrapper;    

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initListViewItems();
    }

    /**
     * Inits an adapter with items, wrapping your adapter with a {@link AdmobAdapterWrapper} and setting the listview to this wrapper
     * FIRST OF ALL Please notice that the following code will work on a real devices but emulator!
     */
    private void initListViewItems() {
        lvMessages = (ListView) findViewById(R.id.lvMessages);

        //creating your adapter, it could be a custom adapter as well
        ArrayAdapter<String> adapter  = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1);

        adapterWrapper = new AdmobAdapterWrapper(this);
        adapterWrapper.setAdapter(adapter); //wrapping your adapter with a AdmobAdapterWrapper.
        //here you can use the following string to set your custom layouts for a different types of native ads
        //adapterWrapper.setInstallAdsLayoutId(R.layout.your_installad_layout);
        //adapterWrapper.setcontentAdsLayoutId(R.layout.your_installad_layout);

        //Sets the max count of ad blocks per dataset, by default it equals to 3 (according to the Admob's policies and rules)
        adapterWrapper.setLimitOfAds(3);

        //Sets the number of your data items between ad blocks, by default it equals to 10.
        //You should set it according to the Admob's policies and rules which says not to
        //display more than one ad block at the visible part of the screen,
        // so you should choose this parameter carefully and according to your item's height and screen resolution of a target devices
        adapterWrapper.setNoOfDataBetweenAds(10);

        //It's a test admob ID. Please replace it with a real one only when you will be ready to deploy your product to the Release!
        //Otherwise your Admob account could be banned
        //String admobUnitId = getResources().getString(R.string.banner_admob_unit_id);
        //adapterWrapper.setAdmobReleaseUnitId(admobUnitId);

        lvMessages.setAdapter(adapterWrapper); // setting an AdmobAdapterWrapper to a ListView

        //preparing the collection of data
        final String sItem = "item #";
        ArrayList<String> lst = new ArrayList<String>(100);
        for(int i=1;i<=100;i++)
            lst.add(sItem.concat(Integer.toString(i)));

        //adding a collection of data to your adapter and rising the data set changed event
        adapter.addAll(lst);
        adapter.notifyDataSetChanged();
    }

结果将如下所示

目前仅限于选定的发布商。您需要联系您所在地区的 Google 客户经理进行实施。

好吧,这个线程可能已经过时了。但从 2015 年 5 月开始,到现在为止,AdMob 确实支持原生广告(尽管仍处于测试阶段)。

https://support.google.com/admob/answer/6239795

此外,在 Beta 阶段,它仅供有限数量的开发人员使用。

作为此主题的补充,您现在可以按照 Google 使用 NativeExpressAdView 提供的指南非常轻松地为 Admob 实施 NativeAds。 有关详细信息,请查看 google 文档: https://firebase.google.com/docs/admob/android/native-express?hl=en

将此代码添加到您的列表视图适配器

       builder.forAppInstallAd(new NativeAppInstallAd.OnAppInstallAdLoadedListener() {
            @Override
            public void onAppInstallAdLoaded(NativeAppInstallAd ad) {
                FrameLayout frameLayout =
                        (FrameLayout) findViewById(R.id.fl_adplaceholder);
                NativeAppInstallAdView adView = (NativeAppInstallAdView) getLayoutInflater()
                        .inflate(R.layout.ad_app_install, null);
                populateAppInstallAdView(ad, adView);
                frameLayout.removeAllViews();
                frameLayout.addView(adView);
            }
        });

       AdLoader adLoader = builder.withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            Toast.makeText(MainActivity.this, "Failed to load native ad: "
                    + errorCode, Toast.LENGTH_SHORT).show();
        }
      }).build();

        adLoader.loadAd(new AdRequest.Builder().build());

对 listview Adapter 进行一些更改,您将获得下面的 populateAppInstallAdView() 方法 link

本示例中涵盖了所有内容,请仔细阅读 https://github.com/googleads/googleads-mobile-android-examples/tree/master/admob

Admob in your android these are the codes needed. 
    <com.google.android.gms.ads.AdView
              android:layout_alignParentBottom="true"
                xmlns:ads="http://schemas.android.com/apk/res-auto"
                android:id="@+id/adView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                ads:adSize="SMART_BANNER"
                ads:adUnitId="ca-app-pub-4549020480017205/6066702579"
                />

//在你的javaclass文件中

     AdView mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);

除此之外,Tooleap Ads SDK 还提供了一种实施 Admob 原生广告的简单方法。

他们不再要求您使用传统的 listView 适配器并在您的内容中显示广告,而是将 admob 原生广告显示为一个小的浮动气泡。按下它可以看到完整的原生广告。

这是在您的 activity class 中使用他们的 SDK 的示例:

BubbleImageAd = new BubbleImageAd(this);
bubbleImageAd.setAdUnitId("YOUR_AD_UNIT_ID");
bubbleImageAd.loadAndShowAd(this);

你可以看看here

是的,您可以在 xml 文件中使用以下代码

<com.google.android.gms.ads.NativeExpressAdView
                    android:id="@+id/adView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_alignParentBottom="true"
                    ads:adSize="320x300"
                    ads:adUnitId="@string/ad_unit_id">

mAdView.setVideoOptions(new VideoOptions.Builder()
    .setStartMuted(true)
    .build());
mVideoController = mAdView.getVideoController();
mVideoController.setVideoLifecycleCallbacks(new VideoController.VideoLifecycleCallbacks() {
@Override
public void onVideoEnd() {
    Log.d(LOG_TAG, "Video playback is finished.");
    super.onVideoEnd();
}
});


mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
    if (mVideoController.hasVideoContent()) {
        Log.d(LOG_TAG, "Received an ad that contains a video asset.");
    } else {
        Log.d(LOG_TAG, "Received an ad that does not contain a video asset.");
    }
}
});

mAdView.loadAd(new AdRequest.Builder().build());

⟩⟩ 在项目结构中,导航到 activity_main.xml 并将以下代码粘贴到您的布局中。

<com.google.android.gms.ads.NativeExpressAdView
                        android:id="@+id/adView"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_alignParentBottom="true"
                        ads:adSize="320x300"
                        ads:adUnitId="@string/ad_unit_id">
</com.google.android.gms.ads.NativeExpressAdView>

并在同一个文件中,即 activity_main.xml 在 header 部分添加以下代码行

xmlns:ads="http://schemas.android.com/apk/res-auto"

⟩⟩ 现在打开 MainActivity.java 并在 public class

中添加以下代码行
private static String LOG_TAG = "EXAMPLE";
NativeExpressAdView mAdView;
VideoController mVideoController;

⟩⟩ 然后在 MainActivity.java 下并在 onCreate() 方法中添加以下代码行。

// Locate the NativeExpressAdView.
mAdView = (NativeExpressAdView) findViewById(R.id.adView);

// Set its video options.
mAdView.setVideoOptions(new VideoOptions.Builder()
        .setStartMuted(true)
        .build());

// The VideoController can be used to get lifecycle events and info about an ad's video
// asset. One will always be returned by getVideoController, even if the ad has no video
// asset.
mVideoController = mAdView.getVideoController();
mVideoController.setVideoLifecycleCallbacks(new VideoController.VideoLifecycleCallbacks() {
    @Override
    public void onVideoEnd() {
        Log.d(LOG_TAG, "Video playback is finished.");
        super.onVideoEnd();
    }
});

// Set an AdListener for the AdView, so the Activity can take action when an ad has finished
// loading.
mAdView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        if (mVideoController.hasVideoContent()) {
            Log.d(LOG_TAG, "Received an ad that contains a video asset.");
        } else {
            Log.d(LOG_TAG, "Received an ad that does not contain a video asset.");
        }
    }
});

mAdView.loadAd(new AdRequest.Builder().build());

⟩⟩ 现在打开 values 文件夹中的 string.xml 文件并粘贴下面的代码行。

<string name="ad_unit_id">ca-app-pub-39402560999xxxxx/21772xxxxx</string>

⟩⟩ 然后打开Manifest文件,添加上网权限

<uses-permission android:name="android.permission.INTERNET" />

资源 : How to insert AdMob Native Ad in your Android App

要在我们的应用中添加本机模板,我们必须遵循一些基本步骤:

1-首先,我们必须下载本机模板,所以要 developers.google

2-然后点击下载本机模板,现在您将被引导至 Github

3-然后从GitHub下载zip文件并将zip文件解压到任意文件夹并记住文件夹的位置,我们稍后会用到它

4-现在进入 Android studio 并点击 File->New->Import Module, 现在你会看到一个新的 window (从源导入模块)现在单击浏览图标和 select nativetemplates 文件夹,然后单击完成并等待 Gradle 构建完成。

5-现在打开 Gradle Scripts->build.gradle (Module: app) 部分并导入 nativetemplates 项目,然后单击顶部的“sync Now”,如下所示:

//adding native templates
implementation project(':nativetemplates')

https://www.studytonight.com/post/how-to-add-admob-native-ad-in-android-app#

这对我有用:

  1. 复制项目库中的 Native 模板。

  2. Build.gradle(Module:Appname)中-添加:

    implementation project(':nativetemplates')
    implementation 'com.google.android.gms:play-services-ads:20.4.0'
    
  3. Setting.gradle(Appname) - 添加这个:

    include ':nativetemplates'
    
  4. 在 Mainfest - 更新如前。

    申请前:

    <meta-data
     android:name="com.google.android.gms.ads.APPLICATION_ID"
     android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
    

    添加此权限:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    
  5. 在布局文件中添加:

    <com.google.android.ads.nativetemplates.TemplateView
     android:id="@+id/my_template"
    app:gnt_template_type="@layout/gnt_medium_template_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
    </com.google.android.ads.nativetemplates.TemplateView>
    
  6. 在程序文件中:

    MobileAds.initialize(this)
    //build ad
    val adLoader = AdLoader.Builder(this,"ca-app-pub-3940256099942544/2247696110")
        .forNativeAd {
            val style  = NativeTemplateStyle.Builder().withMainBackgroundColor(ColorDrawable(Color.WHITE))
                .build()
            val template = findViewById<TemplateView>(R.id.my_template)
            template.setStyles(style)
            template.setNativeAd(it)
        }.build()
    //show ad
    adLoader.loadAd(AdRequest.Builder().build())
    

如果仍未加载,请检查您的 admod 凭据。