1. 程式人生 > >App變現之Admob原生廣告

App變現之Admob原生廣告

Admob介紹

admob是Google的移動廣告平臺,整合admob的SDK到APP中,獲取廣告資料展示出來,可以給我們帶來廣告收益。對於大流量的應用,如果可以在合適的位置,無縫的加入廣告,可以帶來可觀的廣告收入,這已經是一個公開的成功商業模式。
有心的小夥伴可以往這個方向嘗試,財務自由指日可待哦!

先上張admob原生廣告的效果圖,這是一張內容型別的原生廣告。
在這裡插入圖片描述

Admob廣告型別

Admob有哪幾種展現形式的廣告呢?

  • Banner(橫幅廣告):最常見的,就是平時看到的螢幕的底部或者頂部有一個橫條的廣告條。

  • Interstitial(插頁廣告):類似啟動頁廣告,整個螢幕顯示一副廣告。

  • Rewarded Video(應用內購買廣告):這個玩國外遊戲經常會看到,你看完一個廣告視訊,遊戲會獎勵你一些道具或者其他的什麼(這個獎勵是一個整數,在AdMob中可以設定數量,使用者看完視訊會得到這個數量的獎勵,比如獎勵3瓶藥水,3條生命等)。

  • Native(原生廣告):這個是體驗最好的廣告形式,和原生app無縫對接,也許你已經見過一個列表的某個item內容展示的是廣告,就是這種形式。

Admob廣告接入入門

下面就以Admob的原生廣告為例,帶大家入門一下,怎麼整合使用。

預備條件

  • Target Android API level 14 or higher
  • Admob官網註冊新增應用和廣告單元

新增依賴

dependencies {

    implementation 'com.google.android.gms:play-services-ads:17.0.0'
}

配置AndroidManifest.xml

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="[ADMOB_APP_ID]"/>
    </application>
</manifest>

注意:對於Google Mobile Ads SDK version 17.0.0,這一步是必須的

初始化SDK

在廣告載入之前,需要向MobileAds傳入app id初始化SDK,這裡要注意,需要在admob上註冊應用後才有app id哦。
下面程式碼是在Activity中初始化的,最理想的時機是在應用啟動的時候。

package ...
import ...
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
    ...
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");
    }
    ...
}

載入廣告

首先需要構建AdLoader,在Builder中傳入廣告單元id,不同廣告位對應不同的廣告單元。

        AdLoader.Builder builder = new AdLoader.Builder(this, ADMOB_AD_UNIT_ID);

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

        });

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

載入單條廣告

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

如果需要載入多條廣告,admob也提供了載入多條廣告的方法,如下:

adLoader.loadAds(new AdRequest.Builder().build(), 3);

不過有一定限制,獲取多條廣告的上限為5,你可以傳入引數5,但最多返回5條廣告,也有可能小於5條。每收到一條廣告,onAppInstallAdLoaded會回撥一次。

如果獲取多條廣告,怎麼知道資料載入完畢呢?可以通過isLoading()判斷廣告是否全部載入完畢

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd(new NativeAppInstallAd.OnAppInstallAdLoadedListener() {
    @Override
    public void onAppInstallAdLoaded(NativeAppInstallAd ad) {
        ...
        // some code that displays the app install ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();

Ad view class

從上面一路看下來,留心的小夥伴可能已經注意到了NativeAppInstallAdView這個類,從命名看,這個類應該是屬於SDK裡面的,是用來做什麼的呢?

這個類確實來自SDK,先要從原生廣告型別說起,Admob原生廣告有兩種型別:NativeAppInstallAd和NativeContentAd:
NativeAppInstallAd是應用安裝型別的廣告,對應到View是NativeAppInstallAdView
NativeContentAd是內容型別的廣告,對應到View是NativeContentAdView

上面的兩個View class,我們在使用時,必須把它們作為廣告佈局的父View,這是必須要遵守的使用規範。

如下是以NativeContentAdView作為父View的廣告佈局:

<com.google.android.gms.ads.formats.NativeContentAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:orientation="vertical"
    ... >
        <LinearLayout
        android:orientation="horizontal"
        ... >
          <TextView
            android:id="@+id/contentad_headline"
            ... />
         </LinearLayout>


         // Other assets such as image or media view, call to action, etc follow.
         ...
    </LinearLayout>
</com.google.android.gms.ads.formats.NativeContentAdView>

Admob原生廣告官方demo

這裡給兩個官方放在github上的demo,大家可以參考看看:

googleads demo:https://github.com/googleads/googleads-mobile-android-examples

googlecodelabs demo:https://github.com/googlecodelabs/admob-native-advanced-feed

注意事項

  • 廣告位新增後,可能需要等上2個小時才能使用
  • 不依賴gms,Admob廣告在國內也可以使用,但是試了一下,不翻牆好像也載入不出來

他山之石

分享幾個從別人文章看來的幾條廣告運營的經驗:

  1. 首屏一定要展示廣告。這主要是因為產品首屏的曝光量大,但廣告要展示得當。

  2. 多賬戶分擔風險。因為用一個賬戶建立所有的ad unit/placement時,雖然接入的工作量小,但風險過於集中了,哪天賬戶被封了就欲哭無淚了;因此建議同時建立多個廣告賬戶,在產品裡面輪流使用,很多時候違規也只是其中的一個,哪怕被封損失也小。

  3. 多平臺互為備份。例如Facebook/Admob兩個平臺互為備份,當Facebook廣告請求不到或載入不了時,則展示Admob廣告,這樣能最大化保證廣告展現。

  4. 最大化廣告重新整理機制。例如使用者重新整理內容列表,哪怕內容沒更新,把列表裡面的廣告重新請求並換一批。

  5. 廣告預載入機制。不用等到使用者請求時再去向廣告平臺發起請求,可以提前請求到資料,需要的時候隨時可用,這樣可以保證流暢體驗。

  6. 選擇合適的廣告形式。畢竟有banner廣告,插屏廣告,原生廣告等那麼多樣式,選擇廣告形式的時候最好能跟當前廣告位結合起來。

參考資料

AdMob官網quick-start
AdMob官網原生廣告使用
firebase官網admob
googleads demo
googlecodelabs demo
app變現之路,之總結