admobのメディエーションを使ってみる




かなり久しぶりのブログ更新です。
半年ぶりぐらいですかね・・・


今回はAdmobのメディエーションを使って、どんな事ができるのかまとめてみました。

メディエーションって何?

一つのアプリケーションに対して、複数の広告ネットワークを配信する仕組み。
例えば、AdmobとNendとMedibaを交互に配信することもできます。
場合によっては、自社広告だけ100%表示するなんてことも可能です。

メリット

AdmobのSDKを使うだけで、各社の広告を配信することができます。
フィルレートが悪い時は配信率を変えて、別の広告ネットワークだけ表示するなんてことも可能です。
只、NendやMedibaなどは事前に各社で登録する必要あり。
この様にチェックを入れるだけですぐに配信できます


デメリット

Admob一社に依存することになるので、サーバーがダウンした時(無いと思うけど)や混雑すると、まったく広告が配信できなくなる恐れあり。
またGoogleアカウントを使ってログインするので、アカウント停止やアカバンされた場合は最悪です。
最新のAdmobSDKだとAndroid API Levelが8以上でないと使えない。つまりXperia2.1やHTCMagicは切り捨てる必要があります。
僕はマルチAPKで暫定対応しましたが…

導入してみる

こちらを参考にしてください。
https://support.google.com/admob/bin/answer.py?hl=ja&answer=2423720


こんな感じですね…

private AdView mAd;
LinearLayout  l = (LinearLayout)this.findViewById(R.id.AdView);
if (l != null) {
    
        mAd = new AdView(this, AdSize.BANNER, MY_ADCODE2);
        l.addView(mAd);
        mAd.loadAd(new AdRequest()); 
}


    <LinearLayout
        android:id="@+id/AdView" 
        android:gravity="center"
        android:background="#00000000"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
    </LinearLayout>

ハマリポイント

コンフィグチェンジとSDKLevelをマニフェストに追加しなければいけない
<activity android:name="com.google.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|screenLayout|uiMode|orientation|screenSize|smallestScreenSize"/>
<uses-sdk android:minSdkVersion="8"
          android:maxSdkVersion="17"
          android:targetSdkVersion="14">
カスタムイベントに要注意


Labelはなんでも良いんですが、ClassNameはパッケージ名を含む必要があります。
Parameterはオプションです。必須ではないです。
CustomEventBannerを実装したクラスをプロジェクトに作ってください。
詳しくは調べてください!

一つのアプリに複数のメディエーションを使える!

そんなことしても意味ないのでは…と思った人も居るでしょう。
でも複数のアクティビティを持つアプリだと表示している画面によっては、広告ネットワークを固定したい場合もあると思います。
メインで表示している画面には自社広告を表示して、それ以外の画面ではAdmob広告を表示したりする場合です。

やり方

予めメディエーションを必要なだけ作成しておきます。

後はアクティビティでメディエーションのIDを変えてあげればOKです。
Activity1

private AdView mAd;
LinearLayout  l = (LinearLayout)this.findViewById(R.id.AdView);
if (l != null) {
    
        mAd = new AdView(this, AdSize.BANNER, "admob_id_1");
        l.addView(mAd);
        mAd.loadAd(new AdRequest()); 
}



Activity2

private AdView mAd;
LinearLayout  l = (LinearLayout)this.findViewById(R.id.AdView);
if (l != null) {
    
        mAd = new AdView(this, AdSize.BANNER, "admob_id_2");
        l.addView(mAd);
        mAd.loadAd(new AdRequest()); 
}



ざっくりとしたまとめでしたが、これからアプリを作る人の一助になれば幸いです。
しかし、今後は広告ネットワークだけで稼ぐのは非常に難しいでしょうね。
あ、それとメディエーションを使えば、粘土やメディヴァのimpとかクリックがどれぐらい削られているのか一目瞭然です。
誤クリックがどのくらいあるのか確かめるのにも有効ですね。
メディエーションでカスタムイベントのクリック数はカウントできません。
Admobの担当者に確認したので間違いないです…
※カスタムイベントでなければ、インプとクリック数もカウントされます。