swiftのHelloworldにGoogle AdMovのテスト広告(バナー)をくっつけた

不労所得とかいうものが欲しかったので、手始めにiOSアプリに広告をつけてみようとしたらテスト広告だけでかなり手こずって一日費やしてしまったので覚書。
普通に働いた方が早い。

### 最終的に動いた手順
####Google AdMovに登録する
最近はGoogle AdMovって呼ぶらしい。前はなんか名前が違った気がする。
コロコロ仕様も変わりそうなのでこんなこと覚えてる暇があったら普通に働いた方が早い。

登録は[ここ](https://admob.google.com/intl/ja/home/)から。

####AdMovのダッシュボードから広告をつけたいアプリを登録する。
登録してないアプリでテスト以外の広告を流すと最悪垢バンされるらしい。
テスト広告だけなら関係なさそうなので割愛。

####Xcodeでプロジェクトを作成
特に難しいことはないが、AppDelegate.swiftと(Game)ViewController.swiftが最初からあるテンプレだと楽かも。
<br>
ここから先はAdMovの[スタートガイド](https://developers.google.com/admob/ios/quick-start?hl=ja#swift)をもとに進める。
####CocoaPodsの導入
CocoaPodsを使ったことがない場合は入れる。
ターミナルで、

```shell
sudo gem install cocoapods
```
インストールが終わったら、

```shell
pod setup
```

####Mobile Ads SDKのインポート
プロジェクトのディレクトリに移動して、

```shell
pod init
```

その後Podfileをエディタ等で開き、

```ruby:Podfile
(略)
target 'アプリ名' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  pod 'Google-Mobile-Ads-SDK'　<-この行を追加
  # Pods for アプリ名
(略)
```

コマンドラインから、

```shell
pod install --repo-update
```
 --repo-updateはなくてもいい気がするが公式で書いてあったから従った。

####Info.plistの更新
よくわからなかったので書かれてる通りにやった。
**CocoaPodsを使ったので以降は.xcodeprojファイルではなく.xcworkspaceファイルで作業する。**
**.xcodeprojファイルで作業するとかいう初歩的なミスをすると果てしなく時間を無駄にする。**
ケアレスミスに対する救済措置がないので普通に働いた方が早い。
<br>
Info.plistを右クリックから`Open with External Editor`で開いて編集。

```xml:Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
```
以下に、

```xml:Info.plist
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
  <array>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>cstr6suwn9.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>4fzdc2evr5.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>2fnua5tdw4.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>ydx93a7ass.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>5a6flpkh64.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>p78axxw29g.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>v72qych5uu.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>c6k4g5qg8m.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>s39g8k73mm.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>3qy4746246.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>3sh42y64q3.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>f38h382jlk.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>hs6bdukanm.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>prcb7njmu6.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>v4nxqhlyqp.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>wzmmz9fp6w.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>yclnxrl5pm.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>t38b2kh725.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>7ug5zh24hu.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>9rd848q2bz.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>n6fk4nfna4.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>kbd757ywx3.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>9t245vhmpl.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>4468km3ulz.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>2u9pt9hc89.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>8s468mfl3y.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>av6w8kgt66.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>klf5c3l5u5.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>ppxm28t8ap.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>424m5254lk.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>uw77j35x4d.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>578prtvx9j.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>4dzt52r2t5.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>e5fvkxwrpn.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>8c4e2ghe7u.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>zq492l623r.skadnetwork</string>
    </dict>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>3qcr597p9d.skadnetwork</string>
    </dict>
  </array>
```

この長ったらしいやつを追加。

####Mobile Ads SDKの初期化
アプリの起動時に一度SDKを初期化する必要があるらしい。
AppDelegate.swiftを開いて、

```swift:AppDelegate.swift

import UIKit
import GoogleMobileAds//この行を追加

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        GADMobileAds.sharedInstance().start(completionHandler: nil)//この行を追加
        
        return true
    }
(以下略)
```
これで一回実行してみて通ったら広告の実装に進む。

####テスト広告の実装
今回はバナー広告で試してみる。
ここからは[バナー広告のスタートガイド](https://developers.google.com/admob/ios/banner?hl=ja)に沿って進める。

スタートガイドにも書いてある通り、実際の広告でテストを行うと垢バンされることもあるらしいので、必ずテスト広告でテストすること。
テスト広告の専用ユニットIDは`ca-app-pub-3940256099942544/2934735716`。

(Game)ViewController.swiftを開いて、

```swift:GameViewController.swift
import UIKit
import SpriteKit
import GameplayKit
import GoogleMobileAds //追加

class GameViewController: UIViewController {

    var bannerView: GADBannerView! //追加
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        bannerView = GADBannerView(adSize: kGADAdSizeBanner) //追加
        addBannerViewToView(bannerView) //追加

        
        if let view = self.view as! SKView? {
            // Load the SKScene from 'GameScene.sks'
            if let scene = SKScene(fileNamed: "GameScene") {
                // Set the scale mode to scale to fit the window
                scene.scaleMode = .aspectFill
                
                // Present the scene
                view.presentScene(scene)
            }
            
            view.ignoresSiblingOrder = true
            
            view.showsFPS = true
            view.showsNodeCount = true
        }
        
        bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716" //追加
        bannerView.rootViewController = self //追加
        bannerView.load(GADRequest()) //追加

    }
    
    //addBannerViewToView関数を追加
    func addBannerViewToView(_ bannerView: GADBannerView) {
        bannerView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(bannerView)
        view.addConstraints(
          [NSLayoutConstraint(item: bannerView,
                              attribute: .bottom,
                              relatedBy: .equal,
                              toItem: bottomLayoutGuide,
                              attribute: .top,
                              multiplier: 1,
                              constant: 0),
           NSLayoutConstraint(item: bannerView,
                              attribute: .centerX,
                              relatedBy: .equal,
                              toItem: view,
                              attribute: .centerX,
                              multiplier: 1,
                              constant: 0)
          ])
       }

(以下略)
```

###結果
テスト広告が表示された。
<img width="300" alt="IMG_9F4C753C30B7-1.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857497/c8151103-4afe-6ed0-c4a5-e836641dc28e.jpeg">

###結論
やっと動いた。長い。
しかもどうせすぐ仕様が変わる。
何ならここをみるより公式を見た方がいい。
普通に働いた方が100倍早い。

##2021/09/01 追記
テスト広告がついたままのアプリはAppleの審査に通らないので注意。