【iOS】サクッと実装したい人向け、Ad Generationメディエーション実装手順

`メディエーションは凄い。` `メディエーションはやるべき。` `メディエーションは儲かる。` などなど、メリットはよく聞こえてきますが、いざ実装となるとなかなか例が出てこなくて困りました。

実装を終えて振り返ってみると、工数は少なかったですが迷うことは多かった印象です。

というわけで、これからメディエーションを実装する人が迷わないように、最短で実装できる手順を書いてみました。参考になればこれ幸いです。

## 0. 実装をはじめる前に

実装をはじめる前に知っておいてもらいたいのは、Ad Generationのメディエーションを実装する上で、`GADBannerView`や`GADRequest`に何もコードを足す必要は無いということです。（もちろん、DFPBannerViewやDFPRequestの場合でも）

基本的には、必要な2つのSDKをプロジェクトに追加するだけです。

## 1. SDKをインストールする
まず、`Ad Generation SDK`をインストールしましょう。CocoaPodsが使えます。

① Podfileに以下のコードを追加

```ruby:Podfile
pod 'AdGeneration'
```

② ターミナルから以下のコマンドを叩く

```bush:Terminal
pod install
```

## 2. メディエーションSDKもインストールする
`Ad Generation AdMobメディエーション iOS SDK` もインストールする必要があります。

これはCocoaPodsでインストールできないため、自力でプロジェクトに追加する必要があります。

① 以下のURLから、`ADG-AdMobMediation-iOS.zip` をダウンロードする。
https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases

② zipを解凍して、以下の3つのファイルをプロジェクトの適当な場所にドラッグ&ドロップする。
> ADGAdMobMediation.h
> ADGAdMobInterstitialMediation.h
> libADGAdMobMediationX.X.X.a

③ Bulid Setting > Other Linker Flagsに設定を追加する

XcodeのプロジェクトのBuild Settingsをクリックし、検索窓に`Other Linker Flags`と打ち込み、Other Linker Flags欄をダブルクリックして`-ObjC`を追加する。

<img width="881" alt="スクリーンショット_2019-03-13_14_50_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/339601/ed2a1f0a-3a04-8fc0-3a69-daa94ca2f534.png">

以上で、アプリ側の実装は完了です。

次は、AdMobもしくはGoogle Ad Managerの管理画面側の設定をしましょう。

## 3. 管理画面に設定を施す
Ad Generationのリファレンスを見ると、AdMobしか対応していないように思えますが、Google Ad Managerにも対応しています。

また、AdMobとGoogle Ad Managerは見た目は違いますが、入力する項目は以下で共通です。

|項目|内容|
|:-----------------|:-----------------|
|ターゲットeCPM|（自分の）アドジェネのレポートに出ているeCPMの1.2〜2倍が推奨値（※低すぎると広告が出ないので注意）|
|Label|AdGeneration|
|Class Name|ADGAdMobMediation|
|Parameter|AdGeneration管理画面で設定した広告枠のid|

頻繁にUIが変わるのでスクショは割愛しますが、以下が各メディエーション設定画面までの道のりです。↓↓

`AdMobの場合`
> トップページ > メディエーション > すべてのアプリバナー > (広告ソース)カスタムイベントを追加 > メディエーション設定画面

`Google Ad Managerの場合`
> トップページ > 配信 > 収益グループ > 設定する収益グループ > 収益パートナーを追加 > メディエーション設定画面

## 4. 実装完了
あとは、Ad Generaionの広告が表示されるのを確認できれば実装完了です。

## おまけ.  GADBannerView.adNetworkClassNameが実装確認に便利
実装確認といってもなかなか見分けづらいと思います。

さらに、Googleの広告を100%カットすることは出来ません。（アドジェネのターゲットeCPMを10,000円に設定しても出てきます。）なので、確認作業を目でやろうとすると結構骨が折れることになります。

そんな時は、GADBannerViewのプロパティ `adNetworkClassName` を使いましょう。これは広告がGoogle経由のものか、メディエーション経由のものかを教えてくれるもので、以下のような文字列を出力します。

| Google広告の場合|メディエーション広告の場合|
|:-----------------|:-----------------|
|GADMAdapterGoogleAdMobAds|GADMAdapterCustomEvents|

```GADBannerViewDelegate```の```adViewDidReceiveAd(_ bannerView: GADBannerView)```のタイミングとかで、ログに仕込んでおけば確認しやすいと思います。

```swift:ViewController.swift
extension ViewController: GADBannerViewDelegate {
 func adViewDidReceiveAd(_ bannerView: GADBannerView) {
   if let network = bannerView.responseInfo.adNetworkClassName {
      print("AdNetworkClassName: \(network)")
   }
 }
}
```

## 参考
Banner_Ad_iOS · AdGeneration/SDK Wiki
https://github.com/AdGeneration/sdk/wiki/Banner_Ad_iOS

AdMobMediation_Banner_Interstitial_Ad_iOS · AdGeneration/SDK Wiki
https://github.com/AdGeneration/sdk/wiki/AdMobMediation_Banner_Interstitial_Ad_iOS

Mediation  |  Mobile Ads SDK for iOS  |  Google Developers
https://developers.google.com/ad-manager/mobile-ads-sdk/ios/mediation/