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廣告在國內也可以使用,但是試了一下,不翻牆好像也載入不出來
他山之石
分享幾個從別人文章看來的幾條廣告運營的經驗:
-
首屏一定要展示廣告。這主要是因為產品首屏的曝光量大,但廣告要展示得當。
-
多賬戶分擔風險。因為用一個賬戶建立所有的ad unit/placement時,雖然接入的工作量小,但風險過於集中了,哪天賬戶被封了就欲哭無淚了;因此建議同時建立多個廣告賬戶,在產品裡面輪流使用,很多時候違規也只是其中的一個,哪怕被封損失也小。
-
多平臺互為備份。例如Facebook/Admob兩個平臺互為備份,當Facebook廣告請求不到或載入不了時,則展示Admob廣告,這樣能最大化保證廣告展現。
-
最大化廣告重新整理機制。例如使用者重新整理內容列表,哪怕內容沒更新,把列表裡面的廣告重新請求並換一批。
-
廣告預載入機制。不用等到使用者請求時再去向廣告平臺發起請求,可以提前請求到資料,需要的時候隨時可用,這樣可以保證流暢體驗。
-
選擇合適的廣告形式。畢竟有banner廣告,插屏廣告,原生廣告等那麼多樣式,選擇廣告形式的時候最好能跟當前廣告位結合起來。
參考資料
AdMob官網quick-start
AdMob官網原生廣告使用
firebase官網admob
googleads demo
googlecodelabs demo
app變現之路,之總結