Swift製iOSアプリの広告をiAdからAdMobへ

# ナニコレ

僕が個人で配信しているiOSアプリの広告はiAdを利用しているのですが、iAd App Networkが今月末（2016年6月）に終了することもあり、今後の行方が不透明なので、Google先生のAdMobに置き換えました。

このタイミングで置き換えを検討している方もいるかもしれませんので、手順を残しておきます。

# AdMob登録編

何はともあれAdMobに登録しましょう。事前にGoogleアカウントを用意しておいてください。

## AdMobアカウント開設

以下のURLからアカウント登録を行ってください。
https://www.google.co.jp/admob/

AdSenseやAdwordsのアカウント登録も一緒に行います。
ここはサクッと出来ると思います。

## 広告作成

アカウント作成が完了したら、広告を作成します。
AdMobにログインして、以下のURLにアクセスしてください（登録のタイミングでたぶんこのページに来てると思いますが念のため）。
https://apps.admob.com/

![image](https://qiita-image-store.s3.amazonaws.com/0/48990/4cecddd8-4ef7-b1b1-63b3-3d6b9127a4b1.png)

上記のような画面が表示されると思いますので `+ 新しいアプリを収益化` ボタンを押してください（広告はアプリ単位で必要です） 。

### アプリを選択

![image](https://qiita-image-store.s3.amazonaws.com/0/48990/075f09de-37a6-0945-bc4e-d6ec718d647e.png)

上記のような画面が表示されるので、検索フォームに対象のアプリ名を入力し、アプリを選択して追加してください。

### 広告フォーマットの選択と広告ユニット名の設定

![image](https://qiita-image-store.s3.amazonaws.com/0/48990/d6112fd5-736e-8a74-6b6f-631a9a02e949.png)

次に広告フォーマットを設定します。僕の場合、バナーを設定しました。
上記の画像のような感じで値を設定して、保存してください。

### Firebaseアナリティクスを設定する（任意）

![image](https://qiita-image-store.s3.amazonaws.com/0/48990/fde85e5b-a6c4-5e79-0a19-774f396a8559.png)

話題の `Firebase` の連携もここで出来るようですが、今回はスキップしました。

### 表示の設定方法

![image](https://qiita-image-store.s3.amazonaws.com/0/48990/9a17f34e-8ecd-ee55-ef16-85b15509a97a.png)

ここまでくると広告の作成が完了しているので、[Google Mobile Ads SDK](https://firebase.google.com/docs/admob/ios/download?hl=ja)をダウンロードしましょう。
また、開発時に **広告ユニットID** を使用するので事前にメモしておいてください（後からでも確認可能です）。

AdMobの設定は以上です。

# AdMob広告組み込み編

それでは早速AdMobの組み込みを行いましょう。事前にSDKをダウンロードしておいてください。

## 組み込みフレームワークのインポート

AdMobの利用にあたり、いくつかフレームワークが必要なので、インポートが済んでいない方はインポートを行ってください。

Xcodeを起動し `Project->TARGET->General->Linked Frameworks and Libraries` から、以下のフレームワークをプロジェクトにインポートします。

* AdSupport
* AudioToolbox
* AVFoundation
* CoreGraphics
* CoreMedia
* CoreTelephony
* EventKit
* EventKitUI
* MessageUI
* StoreKit
* SystemConfiguration

## AdMob SDKのインストール

そして `Project->TARGET->Build Phases->Link Binary With Libraries` から、ダウンロードした `GoogleMobileAds.framework` フォルダ？をドラッグしてインストールします。

こんな感じになっていればOKです。

![image](https://qiita-image-store.s3.amazonaws.com/0/48990/9fc9c14f-be6f-e5c8-41c3-df78ce77918c.png)

## コーディング

いよいよコードを修正します。広告を表示したい `ViewController` を開きます。
ちなみにSwiftのバージョンは2.2です。

iAdを表示していた時はこんな感じだと思います。

```swift:IadViewController.swift
import UIKit
import iAd

class ViewController: UIViewController {
    
    override func viewDidLoad() {        
        super.viewDidLoad()
        
        /* アプリの処理なんやかんや */
        
        // iAd広告設定
        self.canDisplayBannerAds = true      
    }    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
```

これをこうします。

```swift:AdmobViewController.swift
import UIKit
// import iAd
import GoogleMobileAds

class ViewController: UIViewController, GADBannerViewDelegate {
    
    override func viewDidLoad() {        
        super.viewDidLoad()
        
        /* アプリの処理なんやかんや */
        
        // iAd広告設定
        // self.canDisplayBannerAds = true

        // AdMob広告設定
        var bannerView: GADBannerView = GADBannerView()
        bannerView = GADBannerView(adSize:kGADAdSizeBanner)
        bannerView.frame.origin = CGPointMake(0, self.view.frame.size.height - bannerView.frame.height)
        bannerView.frame.size = CGSizeMake(self.view.frame.width, bannerView.frame.height)
        // AdMobで発行された広告ユニットIDを設定
        bannerView.adUnitID = "ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX" 
        bannerView.delegate = self
        bannerView.rootViewController = self
        let gadRequest:GADRequest = GADRequest()
        // テスト用の広告を表示する時のみ使用（申請時に削除）
        // gadRequest.testDevices = ["12345678abcdefgh"]
        bannerView.loadRequest(gadRequest)
        self.view.addSubview(bannerView)      
    }    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
```

つまり、、、

* GoogleMobileAdsをインポート
* GADBannerViewDelegateをクラスに追加
* 広告バナーをViewに追加
  * 広告ユニットIDを設定

をすれば、AdMobの広告が表示されるようになります。
iAdよりは多少面倒ですが、それでもかなり簡単ですね！

バナーサイズなども色々設定出来るようですので、詳細は公式のドキュメントを参照してください。

# App Store申請編

あとは申請するだけですが、ひとつだけ注意点が。
アプリ内でIDFA（広告ID）を使用しているかどうかの確認で、iAdの場合は**いいえ**を選びますが、AdMobの場合は**はい**を選択する必要があります。

それ以外はいつも通りです！

# 最後に

最近はApp Storeの審査期間が爆速なので、早ければ1〜2日でAdMobデビュー出来ると思います（僕の場合は12時間もかかりませんでした）。
というわけで、皆さんもよきAdMobライフを！

# 参考サイト

iPhoneアプリ（Swift）にAdMob広告を導入する方法：
http://www.webopixel.net/ios/995.html
Swift:iOS アプリで AdMob 広告を実装・表示する：
http://www.sirochro.com/note/swift-admob-implementation/
アプリのリリース - 審査提出時の広告ID（IDFA）等チェックの選択方法
http://swift-bettychang.hatenadiary.jp/entry/2016/01/08/170831