[iOSアプリ開発][Xcode 8] AdMob を導入する

iOS アプリに Google が提供する AdMob を導入する方法。

(0)AdMob アカウントを作っておく。

AdMob
https://apps.admob.com/signup/#home

(1)以下のページから Google Mobile Ads SDK をダウンロードしてくる。

Google Mobile Ads SDK  |  AdMob by Google  |  Firebase
https://firebase.google.com/docs/admob/ios/download

(2)1のファイルを解凍し、その中の GoogleMobileAds.framework を Xcode のプロジェクトのルートフォルダーに入れる。

(3)Xcode で File > Add File to “[プロジェクト名]” をクリック。2の GoogleMobileAds.framework を選んで、Add。

(4)Xcode でツリーの一番上にある「Project Navigator」アイコンをクリックし、ツリーのプロジェクト名をクリック。中央ペインの TARGETS > [プロジェクト名] > Build Phases > Link Binary With Libraries をクリック。「+」ボタンを押して、以下を追加する。

AdSupport.framework
AudioToolbox.framework
AVFoundation.framework
CoreGraphics.framework
CoreTelephony.framework
EventKit.framework
EventKitUI.framework
MessageUI.framework
StoreKit.framework
SystemConfiguration.framework

(5)中央ペインの TARGETS > [プロジェクト名] > Build Settings > Framework Search Paths でパスをダブルクリック。$(PROJECT_DIR)/[プロジェクト名] が GoogleMobileAds.framework があるパスになっていることを確認する。
同じく Build Settings の Enable Bitcode を No にする。

参考:
ios – AdMob 7.3.1 and Swift 2.0 – Module not found – Stack Overflow
http://stackoverflow.com/questions/30876363/admob-7-3-1-and-swift-2-0-module-not-found

(6)ViewController.swift に以下のように記入。

import UIKit
import GoogleMobileAds
 
class ViewController: UIViewController, GADBannerViewDelegate {
    // AdMob で発行される Ad unit ID を入力。
    let AdMobID = "ca-app-pub-##########"
    // 実機で実行した時にコンソールに表示される ID を入力。
    let TEST_DEVICE_ID = "##########"
    
    let AdMobTest:Bool = true
    let SimulatorTest:Bool = true
 
 
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        
        var admobView: GADBannerView = GADBannerView()
        admobView = GADBannerView(adSize:kGADAdSizeBanner)
        admobView.frame.origin = CGPoint(x:0, y:20)
        /* 広告を下部に表示するなら以下のようにする
        admobView.frame.origin = CGPoint(x:0, y:self.view.frame.size.height - admobView.frame.height) */
        
        admobView.frame.size = CGSize(width:self.view.frame.width, height:admobView.frame.height)
        admobView.adUnitID = AdMobID
        admobView.delegate = self
        admobView.rootViewController = self
        
        let admobRequest:GADRequest = GADRequest()
        
        if AdMobTest {
            if SimulatorTest {
                admobRequest.testDevices = [kGADSimulatorID]
            }
            else {
                admobRequest.testDevices = [TEST_DEVICE_ID]
            }
            
        }
        
        admobView.load(admobRequest)
        
        self.view.addSubview(admobView)
        
  
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

参考:
Google Mobile Ads SDK に関するよくある質問  |  Google Mobile Ads SDK  |  Google Developers
https://developers.google.com/mobile-ads-sdk/kb/?hl=ja

ios – ‘CGPointMake’ is unavailable in swift – Stack Overflow
http://stackoverflow.com/questions/39336793/cgpointmake-is-unavailable-in-swift

uikit – CGRectMake , CGPointMake, CGSizeMake, CGRectZero, CGPointZero is unavailable in Swift – Stack Overflow
http://stackoverflow.com/questions/37946990/cgrectmake-cgpointmake-cgsizemake-cgrectzero-cgpointzero-is-unavailable-in

(7)ロックを解除した iPhone 等の実機を Mac に接続。実機でビルドをする。すると、コンソールに以下のように表示される。

<Google> To get test ads on this device, call: request.testDevices = @[ @"##########" ];

この ########## が TEST_DEVICE_ID なので、6の let TEST_DEVICE_ID = “##########” を記入する。

参考:
【iOSアプリ開発】-swift2- AdMobで広告を表示する : 実装編<バナー広告> – あれは、魔法だろうか?
http://amazarashi.me/archives/522

Cocos2d-x 3.5 AdMobのバナー広告を実装する(iOS, Android) | cretia studio
http://studio.cretia.net/blog/344

これでビルドすると広告が表示されるはずだ。ただし、なぜかシミュレーター上で広告が表示されるのに、実機では表示されなかったりすが、表示されるまで時間が掛かるようだ。

参考:
[iPhone] アプリにAdMob広告を貼る | iPhoneアプリ開発
https://iphone-app-tec.com/ios/admob.html

【Swift】admobを導入する方法 – とりあえず何でも書く
http://gokexn.blog.fc2.com/blog-entry-128.html