[iPhone] アプリにAdMob広告を貼る(Firebase)

アプリの広告としてiAdがなくなった以上はiOSでもGoogleのAdMobを選択せざるえないでしょうか。更にGoogleではFirebaseを使って詳細な解析ができるサービスを提供しています。
 
admob_firebase_1
 

Swift 3.0
Xcode 8.0

 

sponsored link

AdMob Firebase

 

今までAdMobはSDKを入れて設定するだけでしたが、Googleはより詳細な解析ができるFirebase版を提供しています。
ただ元々のSDKによるAdMobもまだ使えます。選択肢としては、

  1. Firebaseを利用したAdMobをCocoaPodsを使って設定
    • こちらがGoogleの推奨です。CocoaPods の使用を前提としていますので、別途設定が必要な場合がありちょっと面倒かもしれません。
  2. Firebaseを利用したAdMobをSDKで設定
    • CocoaPodsを使えないケース
  3. 今までのSDKのみで設定
    • FirebaseのAdMob導入はiOS7以降です、iOS6以下ではSDKを使った今までの方法にする必要がありますが、iOSのシェアを見るとiOS7以下で3%(2016/9/29)なのでほとんど問題ないとは思います。

またAdMob IDもFirebaseへのリンクが必要です。

 

Firebase Consoleでプロジェクト作成

 
新規の場合と既存のケースです

  • 新規FirebaseのAdMob IDを取得
  • 既存のAdMob IDをFirebaseにリンク

新規FirebaseのAdMob IDを取得
設定は公式のスタートガイドに沿って進めてみます。
XcodeでProjectを作成。この時作成されている「Bundle Identifier」は後で使います。
例:com.example.TestAdMobBannerFireBase
 
Firebase Consoleに入り、新規プロジェクトをクリックしてプロジェクトの作成を始めます。
 
プロジェクト名と国/地域を入力
 
screen-shot-2016-09-29-at-14-05-37
 
iOSを選択
 
screen-shot-2016-09-29-at-14-06-39
 
iOS バンドル名に先に作成したprojectのBundle Identifierを設定
App Store IDは分からないのでそのまま
 
screen-shot-2016-09-29-at-16-17-05
 
GoogleService-Info.plistがダウンロードされるのでプロジェクトに取り込みます。
 
screen-shot-2016-09-29-at-14-07-40
 
後で設定するので、これ以降は説明だけ読んで流れを理解しておくだけで大丈夫です。
 
screen-shot-2016-09-29-at-14-09-27
 
初期化コードを追加しないといけないようです。
 
screen-shot-2016-09-29-at-14-16-40
 
Firebaseの設定は終了です。追加アプリはここから「+」で作成
 
screen-shot-2016-09-29-at-14-18-28
 

既存のAdMob IDをFirebaseにリンクするケース:
AdMob homeから「アプリ管理」をクリック
ss2016-11-28-18-59-00
 

Firebaseに変えたいアプリの「Firebaseへリンク」をクリック
ss2016-11-28-18-59-36
 

先に作成したプロジェクト、あるいは新規にプロジェクトを作成してアプリをまとめて設定します。iOS, Android共存できます。

ss2016-11-28-19-05-07

 

このあとはGoogleService-Info.plistがダウンロードできるリンクをクリックしてファイルを落として終わりです。

CocoaPodsの設定

 
CocoaPodsが設定されていない場合は、設定を行います
 
まずcocapodsのインストールができるかです。ターミナルで

これが通れば問題ないのですが、

このエラーがでた場合はこれを試してみてください

それでも解決しない場合は、こちらで設定をしてください。
CocoaPods を導入、rubyを設定をする
 
pod install:
CocoaPodsが使えるようであれば、ターミナルを開きprojectの.xcodeprojがあるレベルに入ります。
ここでpodをinitするとPodfileが作成されます。
 

 
screen-shot-2016-09-29-at-16-41-21
 
このファイルをエディターで開いて以下のように記述しなおします。あるいは直に作成する。
‘ TestAdMobBannerFireBase’ の部分はprojectに合わせてください。
 

 
これで「pod install」します。
 

 
成功するとこのようになります。
[!]にあるように今後は「.xcworkspace」から起動することになります。
 
screen-shot-2016-09-29-at-16-50-20

 

Xcodeへの記述

 
コードの記述は今までとあまり変わりません(Swift3.0の変更はありますが)
ViewController.swift

 
Firebaseで初期化が必要だと言っていた箇所です。
AppDelegate.swift

 
ところで、

ですが、GADMobileAds Classによると
Configures the SDK using the settings associated with the given application ID
とあります。
「application ID」とは何か?サンプルコードではこうなってますが、なんか中途半端なIDと思っていましたが、AdMobの「アプリ管理」にあるアプリIDのようです。
 
admob_firebase_reg_2
 
これでビルドテストしてみると
 
simulator-screen-shot-sep-29-2016-18-04-36
 

Trouble shoot

 
NSCalendarsUsageDescription:
NSBluetoothPeripheralUsageDescription:

iTunes Connectへアップロードしてほっとした後にメールが届きました。

The app’s Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.

しかし、Googleの Release Note によれば

Apps no longer need to provide text for NSCalendarsUsageDescription and NSBluetoothPeripheralUsageDescription when updating apps for iOS 10.

ということでとっくの昔に解決しているはずなのに…まさかiOS10.1は対象外?

とりあえず、NSCalendarsUsageDescription他をInfo.plistにこんな感じで設定しましょう。

 

 

CocoaPodsを使わずにFirebase SDKでの設定

CocoaPodsでの設定で説明してありますが、Firebase ConsoleでGoogleService-Info.plistを作成します。
 
その後は、https://firebase.google.com/docs/ios/setup#frameworks の説明に沿っていいきたいと思います。このリンクや内容は今後変わるかもしれません。
 
フレームワーク SDK の zip ファイルをダウンロードします。この中にあるREADME.mdも重要な情報です。
 
projectにこのダウンロードしたファイル内にあるframeworkを「コピーして持ってきて」projectに追加します。必ず実体ファイルを取り込みます。

  • GoogleMobileAds.framework
  • FirebaseAnalytics.framework
  • FirebaseInstanceID.framework
  • GoogleInterchangeUtilities.framework
  • GoogleSymbolUtilities.framework
  • GoogleUtilities.framework

Objective-CのヘッダーファイルとそれをSwiftで読めるように以下の2つをprojectに追加

  • Firebase.h
  • module.modulemap

 
firebase_sdk_1

Firebase.hを読めるように、更に「Build Settings」「Swift Compiler – General」
「Objective-C Bridging Header」にファイルのパスを設定します。

例えば以下のようにFirebase.hがある場合は

screen-shot-2016-09-30-at-16-57-31

$(SRCROOT)/$(PROJECT)/Firebase.h
と設定します。

screen-shot-2016-09-30-at-16-54-34

また「Linking」「Other Linker Flags」に
-ObjC
を設定します

screen-shot-2016-09-30-at-16-59-56
 
コードはCocoaPodsで記述したものと同じで大丈夫です。
以上で設定は終わりです。後はBuildして実行してください。
 
simulator-screen-shot-sep-29-2016-18-04-36
 
できましたでしょうか

 

広告ユニット ID を取得

 
初めての場合はAdMob – Google.co.jp‎にアクセスして「申し込む」をクリック
 
スクリーンショット 2016-01-26 18.38.02

 
スクリーンショット 2016-01-26 18.41.04
アカウントの開設をします

AdMobのお申し込みこちらからもできます
スクリーンショット 2016-01-26 18.45.07
 
アカウントが開設できたら、新しく広告IDを発行です
(表示画面は微妙に変化しますので注意してください)
 
admob_b2
 
広告フォーマットの選択
 
admob_b3

Firebaseにリンクさせます。

screen-shot-2016-09-29-at-18-51-34 

広告ユニットIDが発行されます
IDの形式は
ca-app-<publisherId>/<slotname>
のようになります
(2013/8以前の古いIDはaxxxx 的なものでした)
 
admob_b4
 
後から広告ユニットIDを確認したい時は
https://apps.admob.com
から入り
「収益化」->「すべてのアプリ」
でアプリを選択して確認できます
このアプリ名は1度作ると削除できないので
メンテが困る…
 
admob_new

また、一旦作成して後からFirebaseにリンクすることもできます。

admob_firebase_reg_2