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

Photo by Przemyslaw Marczynski on Unsplash

iOSでもGoogleのAdMobは選択肢の1つです。更にGoogleではFirebaseを使って詳細な解析ができるサービスを提供しています。

Swift 5.3
Xcode 12.4

 

AdMob Firebase

 

今までAdMobはSDKを入れて設定するだけでしたが、Googleはより詳細な解析ができるFirebase版を提供しています。

 

 

Firebase を iOS プロジェクトに追加する

 Firebase を iOS プロジェクトに追加する

こちらに従ってすすめます。尚、Googleのドキュメントの整合性がとれていないところがあります。
 
事前準備:

Xcodeでアプリのプロジェクトを作成してバンドル識別子を決める

  • バンドル識別子とは「Bundle Identifier」あるいはBundle IDです。例えばこのようなもの:com.example.TestAdMob
  • Bundle IDの設定は iOS App IDs を登録するを参考に

アプリに Firebase を追加する:

  • Firebaseへの登録が必要で、そこでBundle IDを使います。最終的にはFirebase 構成ファイル GoogleService-Info.plist を取得します。

Firebase プロジェクトを作成:
Firebase Console に入ります。(以下フォームが毎月のように変更されるのであくまでも例です)
プロジェクトを作成します。あるいは既にあればそのプロジェクトを選択
 
firebase_b01
 
新規プロジェクトをクリックしてプロジェクトの作成を始めます。これ以降はプロジェクトにアプリを追加していきます。またAndroidのプロジェクトも作成できるので、わかりやすい名前にするといいでしょう。
 
プロジェクト名とその他を入力し
記載された内容に同意してチェックを入れる
 
firebase_b02
 
プロジェクトを用意できました。プロジェクトに iOS アプリを追加します。
 

 
iOS バンドル名に先に作成したprojectの「Bundle ID」を設定して「登録」します。
App Store IDは分からない場合は省略
 

 
「GoogleService-Info.plistをダウンロード」をクリックするとplistファイルがダウンロードされます。

それをプロジェクトに追加
注)Xcodeで「Add Files to ‘TestAdMob’」のようにプロジェクト内に追加します。コピペするだけではハマります。
 

 
後で設定しますので、これ以降は説明だけ読んで流れを理解しておくだけで大丈夫です。
(ここの記述は?ではあります)
 

 
XcodeのAppDelegateにFIRApp.configure() の初期化コードを追加しないといけないようです。(この情報は古い、変えたほうがいいですね)
 

 
Firebaseの設定は終了ですが、以下の画面になった場合はアプリができていないので、スキップします。
 

 
これで終了ですが後でアプリを追加するときは「別のアプリを追加」から新しく作成できます。

 

Pod install

 CocoaPod:

設定を行います。まずcocapodsのインストールができるかの確認です。Macの「アプリケーション」「ユーティリティ」にあるターミナルを起動でプロジェクトのレベルに入って以下のコマンドを入力します。

これが例えば以下のように Successfully installed… と通れば問題ないです。
pod installに進んでください、尚バージョンは時々で変わります。

Passwordは使っているMacのパスワードです。
 
このようなエラーとなった場合、Linuxの知識が多少必要になり解決が難しくなりますがとりあえず、

Rubyのバージョンを上げないといけないようです。また、バージョンは変わっていきます。
これを試してみてください

それでも解決しない場合は、こちらで設定をしてください。
CocoaPods を導入、rubyを設定をする
 
 
pod install:
ここはからは、Firebaseに登録での説明の内容になります。
ターミナルでprojectの .xcodeproj があるレベルに入ります。
linuxの”cd”や”ls”を使います。

podをinitするとPodfileが作成されます。Finderでプロジェクトを見てください。
 

 
作成されたPodfileファイルをエディターで開いて以下のように
pod ‘Firebase/AdMob’を追加します。
‘ TestAdMob’ の部分はそれぞれのproject名になっていると思います。
 

 
これで「pod install –repo-update」します。成功するとこのようになります。
 

 
これでXcodeプロジェクトをクローズして
[!]にあるように、Xcodeを全て閉じこのプロジェクトは今後「.xcworkspace」から起動させないとハマります!
 
firebase_b10
 
pod install が以下のエラーで終わった場合は、
[!] Unable to find a specification for Firebase/AdMob
 
以下を試してみてください

 

アプリでFirebaseを初期化する

 Banner Ads

を参考に進めます。
 
AppDelegateに追加します。

 
モジュールをインポートします。

 
このようになります
AppDelegate.swift

 

XcodeでFirebaseを設定する

 

ViewController.swiftに広告を表示させる設定を記述します。
 
GoogleMobileAdsをインポート

 
バナー広告の高さは
admobView.frame.height
から取得できるので、例えば画面の一番下に置くように設定して見ます。
 
iPhone X が登場してから「safe area」を意識しないといけなくなりました。そのため上44pix, 下34pixの調整が必要になるかもしれません。(これはバナー広告にとって悪夢ですが)
 
ViewController.swift

 
GADApplicationIdentifier:
Info.plist にGADApplicationIdentifierを追加してアプリIDを入れます。
“ca-app-pub-3940256099942544~1458002511” はテスト用のアプリIDです。
テスト用の広告ユニットIDとは異なります(とても似ていますが〜と/の違いが目印で、これの取得は後述します。)

適当に画像を貼り付けて実行してみます。
テスト用のIDを使ってビルドすると「Test Ad」とテスト広告が表示されます。
 

 
 
設定は簡単にするとこうなりますが、実際はsafeareaや画面の回転も考慮する必要があります。
 

iPhone X以降では画面のアスペクトレシオが 2:1 の横長モデルも発売され、SafeAreaという概念が登場しました。四隅は角丸、上下...
 

 

アプリ ID と広告ユニット ID

 以下情報は古いので今はそのままではないとは思いますが参考のため残しておきます

〜〜〜
AdMobに登録が済んでいない場合は申し込みをします。
AdMob に申し込む
 
アプリ IDは、AdMob にアプリを追加すると割り当てられる一意の ID 番号でアプリの識別に使用されます。
 
アプリ ID の確認:
から AdMob アカウントにログイン
サイドバーで該当する [アプリ] をクリック
再びサイドバーで「アプリの設定」アイコンをクリック
 
ca-app-pub-9999999999999~99999999 のように「〜」が間にあるIDです。
 

 
広告ユニット ID は、AdMob で作成される各広告ユニットに割り当てられる一意の ID 番号で、バナー広告、インターステーシャル広告などアプリ内の広告を識別するためのものです。
 
広告ユニット ID の確認
から AdMob アカウントにログイン
サイドバーで [アプリ] をクリックします。
再びサイドバーで「広告ユニット」のアイコンをクリックすると広告ユニットのIDの一覧が表示されます。
 
ca-app-pub-9999999999999/99999999 のように「/」があるIDです。
 

 

実機での広告テスト

 Test Ads

によるとリリース前に広告のテストをするために、実機をテストデバイスとして登録して確認する事ができるようです。
 
今までのコードで実機で起動させると、デバッグログにTest Device IDが表示されます。
 

 
これを使ってload()を以下のように変更します。

 
アプリIDと広告ユニットIDを実際のものに変えて実機で走らせると、「Test Ad」の広告が表示されます。(これはクリックしても違反にならないという理解ですが)
 

 
注意点として、
「推奨:AdMob アカウントを作成して、アプリを登録していること」と
スタートガイド – Google AdMobにはあります。
つまり始めてのアプリではこのテスト広告は実機で表示されないのかもしれません(推奨というのが必須ではないのですが)
既に登録されているIDを使って別のアプリのテストはできることはできます。

 

Trouble shoot

 NSCalendarsUsageDescription:
NSBluetoothPeripheralUsageDescription:

App Store 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.

ということでとっくの昔に解決しているはずなのに…

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

 
 
関連ページ:

 

References:
Firebase を iOS プロジェクトに追加する
Banner Ads


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

  • このエントリーをはてなブックマークに追加

フォローする