TestFlightでアプリを試験用に配信した時に、AdMobの広告もテスト用のを配信したかったのですが、AdMobの公式ドキュメントには若干情報が不足してる感じだったのでまとめました。
環境
- Swift: 2.2
- iOS: 8.0〜
- 利用ライブラリ
- Google-Mobile-Ads-SDK: 7.8.1
- CryptoSwift: 0.5(実機でのテスト時に利用)
AdMobのテスト用広告
TestFlightでのパターン含めて、下記3パターンでのテスト用広告表示方法を説明します。
- シミュレータでテスト用広告を表示する場合
- Xcodeと接続した実機でテスト用広告を表示する場合
- TestFlightで配信した実機でテスト用広告を表示する場合
0.AdMobのテスト用広告を表示する方法
Test ads
During development, we recommend using test ads to avoid generating false impressions. You can always count on a test ad being available.
Test ads can be enabled by setting the testDevices property on GADRequest with an array of hashed device identifiers:
Targeting AdMob by Google Firebase
ということなので、GADRequest
のtestDevices
プロパティにハッシュ化したデバイスIDを指定してやれば、そのデバイスに対してはテスト用の広告が配信されるようになります。
1.シミュレータでテスト用広告を表示する場合
シミュレータの場合にはkGADSimulatorID
でシミュレータのハッシュ化したデバイスIDを取得でるのでこんな感じでOK。
let request = GADRequest()
let adMobTestID = kGADSimulatorID
request.testDevices = [adMobTestID]
bannerView.loadRequest(request)
2.Xcodeと接続した実機でテスト用広告を表示する場合
Xcodeと接続した実機の場合には、広告リクエストを送った時点で、Xcodeの実行ログにハッシュ化したデバイスIDが表示されるのでそれを直接設定すればOK。
let request = GADRequest()
bannerView.loadRequest(request)
↓
<Google> To get test ads on this device, call: request.testDevices = @[
@"2077ef9a63d2b398840261c8221a0c9b" ];
↓
let request = GADRequest()
let adMobTestID = "2077ef9a63d2b398840261c8221a0c9b"
request.testDevices = [adMobTestID]
bannerView.loadRequest(request)
3.TestFlightで配信した実機でテスト用広告を表示する場合
で、問題なのがこのパターン。2の方法のようにXcodeの実行ログを見てから書き換えることは出来ない。だからといって、1の方法のように一発でハッシュ化したデバイスIDを取得できるメソッドはない様子(見落としているだけの可能性もありますが・・・)。
ということで、自分でデバイスIDを取得して、それをMD5でハッシュ化して上げる必要があります。
結論からいうと今回は下記のコードで対応しました。MD5の計算には前述したCryptoSwiftを使っているのと、あとはAdSupport
もimportしておく必要があります。
let request = GADRequest()
let adMobTestID = ASIdentifierManager.sharedManager().advertisingIdentifier.UUIDString.md5()
request.testDevices = [adMobTestID]
bannerView.loadRequest(request)
上記のコードはもちろん、Xcodeと接続した実機の場合でも動くので、実際には、上記のコードでXcodeと接続した実機での動作確認をして、問題なければTestFlightで配信、という手順が良いかと思います。
こんな感じでテスト用の広告が配信されていればOKです。Nice job!