[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 に以下のように記入。

 1import UIKit
 2import GoogleMobileAds
 3 
 4class ViewController: UIViewController, GADBannerViewDelegate {
 5    // AdMob で発行される Ad unit ID を入力。
 6    let AdMobID = "ca-app-pub-##########"
 7    // 実機で実行した時にコンソールに表示される ID を入力。
 8    let TEST_DEVICE_ID = "##########"
 9    
10    let AdMobTest:Bool = true
11    let SimulatorTest:Bool = true
12 
13 
14    override func viewDidLoad() {
15        super.viewDidLoad()
16        // Do any additional setup after loading the view, typically from a nib.
17        
18        
19        var admobView: GADBannerView = GADBannerView()
20        admobView = GADBannerView(adSize:kGADAdSizeBanner)
21        admobView.frame.origin = CGPoint(x:0, y:20)
22        /* 広告を下部に表示するなら以下のようにする
23        admobView.frame.origin = CGPoint(x:0, y:self.view.frame.size.height - admobView.frame.height) */
24        
25        admobView.frame.size = CGSize(width:self.view.frame.width, height:admobView.frame.height)
26        admobView.adUnitID = AdMobID
27        admobView.delegate = self
28        admobView.rootViewController = self
29        
30        let admobRequest:GADRequest = GADRequest()
31        
32        if AdMobTest {
33            if SimulatorTest {
34                admobRequest.testDevices = [kGADSimulatorID]
35            }
36            else {
37                admobRequest.testDevices = [TEST_DEVICE_ID]
38            }
39            
40        }
41        
42        admobView.load(admobRequest)
43        
44        self.view.addSubview(admobView)
45        
46  
47    }
48
49    override func didReceiveMemoryWarning() {
50        super.didReceiveMemoryWarning()
51        // Dispose of any resources that can be recreated.
52    }
53
54
55}

参考:
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 に接続。実機でビルドをする。すると、コンソールに以下のように表示される。

1<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