酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

AdMobの広告メディエーションを使って複数のアドネットワークを利用する

アプリ広告といえば AdMob ですね。Four Cropperでは画面のフッターに AdMob のバナー広告を表示させるシンプルな実装となっています。

Four Cropper

Four Cropper

  • KENJI WADA
  • ユーティリティ
  • 無料

「Four Cropper」は大きな写真をTwitterに掲載するのに適切なアスペクト比に切り抜いて四分割する超画期的なアプリなのですが、毎日使うアプリではないので1日10人が使うか使わないかみたいなレベルのユーザー数しかいません。理由は不明ですが一時期フィリピンで流行ってたみたいです。

ユーザー数の少なさと1機能といった簡単な作りのため変更がしやすく、UIKitからSwiftUIへの移植作業など個人的な実験するのに使っています。

年末年始には バナー広告の AdMob メディエーション対応をしました。

AdMob メディエーションとは

AdMob メディエーションについて、詳しく知りたい方は AdMobのヘルプページをご参照ください。

メディエーション グループは、広告ユニットで得られる収益の最適化を目的とするターゲット設定の組み合わせです。事前にメディエーション グループを作成しておけば、広告ユニットと広告ソースをいつでも追加できます。すべて一度に作成することも可能です。メディエーション グループに対してメディエーションを一度設定すれば、あとはそのグループに広告ユニットを追加するだけです。広告ユニットごとに繰り返しメディエーションを設定する必要はありません。

簡単に説明すると、アプリ開発者と取引している広告配信会社は AdMob だけではなくて、広告配信会社A・広告配信会社B など複数存在しています。これらを広告ソースと呼びます。

AdMob向けの広告実装さえしておけば、別の広告ソースの広告を表示させることができるのが「AdMobメディエーション」です。

アプリ側での実装

すでに下図のようにAdMobのバナー広告を表示できていると仮定します。

f:id:ch3cooh393:20210116142125p:plain

Nend(AppBank Network)、Facebook Audience Network、MoPub(Twitter) を広告ソースに追加します。CocoaPods経由で下記の関連ライブラリをインストールします。

  pod 'Firebase/AdMob'
  pod 'GoogleMobileAdsMediationNend'
  pod 'GoogleMobileAdsMediationFacebook'
  pod 'GoogleMobileAdsMediationMoPub'

AdMobのバナー広告はこのような実装になっているかと思います。

let banner = GADBannerView(adSize: kGADAdSizeBanner)
banner.adUnitID = "広告ユニットのID"
banner.rootViewController = self
banner.load(GADRequest())

広告ソースを追加します。

// for AdMob
import GoogleMobileAds

// for Nend
import NendAdapter

// for Facebook Audience Network (FAN)
import FBAudienceNetwork
import FacebookAdapter

// for MoPub (Twitter)
import MoPub
import MoPubAdapter

static func requestAds() -> GADRequest {
    let request = GADRequest()

    let extrasNend = GADMAdapterNendExtras()
    extrasNend.nativeType =  GADMAdapterNendNativeType.normal
    request.register(extrasNend)
    
    let extrasFacebook = GADFBNetworkExtras()
    extrasFacebook.nativeAdFormat = .nativeBanner
    request.register(extrasFacebook)
    
    let extrasTwitter = GADMoPubNetworkExtras()
    request.register(extrasTwitter)
    
    return request
}
--- banner.load(GADRequest()) // AdMobのみ
+++ banner.load(requestAds()) // AdMob + Nend + FAN + MoPub

アプリ側の対応はこれだけで完了です。

あとはAdMobの広告ユニットと広告ソースごとの広告ユニットIDと関連付けすれば完了です。広告ユニット同士を関連付けする方法は AdMob が用意するそれぞれの方法をご参照ください。

備考

Nendについて

アプリの審査はゆるい。

アプリの言語設定が日本語以外にすると広告が表示されません。広告の在庫がないのかな?

AdMobメディエーションには国別に広告ソースを切り替える機能が備わっているので 日本以外の国で nend を使わないとしていても、国=言語ではないのでアクセス元が日本であれば nend が割り振られてしまう。言語設定が日本語以外であれば広告リクエスト時に GADMAdapterNendExtras を追加しない方が良いかもしれません。

MoPubについて

アプリの審査はゆるい。

スマートバナーではない 320x50サイズのバナー広告の場合、なぜか view の左側に寄ってしまう問題がある。NendやAdMobの場合には中央揃えになるが、MoPubだけ変な表示になってしまう。

バナー広告の表示前にMoPub SDKの初期化を走らせておかないと、バナー広告表示時にアプリがクラッシュしてしまう罠がある。

Facebook Audience Networkについて

AdMobよりもeCPMが高い。

アプリごとに審査されるが審査基準は厳しめ。