背景
AdMobを使って広告付きiOSアプリを開発しているとき、実機でテスト広告をなかなか思うように表示できない問題に直面した。
一般的な実装(Swift 3.2)
let simulator: Bool = false; //trueでシミュレーター、falseで実機
var ad: GADBannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait);
ad.frame.origin = CGPoint(x: 0, y: view.bounds.height - ad.frame.height);
ad.frame.size = CGSize(width: view.bounds.height, height: view.bounds.height);
ad.adUnitID = "AdMobの広告ID";
ad.delegate = self;
ad.rootViewController = self;
let gadRequest: GADRequest = GADRequest();
gadRequest.testDevices = simulator ? [kGADSimulatorID] : ["端末ID"];
ad.load(gadRequest);
view.addSubview(ad);
テスト広告を表示したい時は、gadRequest.testDevices を設定する。とりわけ実機で表示する場合には端末IDが必要となる。あとは端末で設定 -> プライバシー -> 広告 -> 追跡型広告を制限
をOFFにすれば良い。
端末IDの確認方法
何も考えずに上のソースコードを組み込んだプログラムを実機でRunしてみれば、デバッグエリアのログに<Google> To get test ads on this device, call: request.testDevices = @[ @"端末ID" ];
という風に表示される。
罠
一度端末IDを確認してしまえば永久にそれでテスト広告が表示できるわけではなかった。なんと、端末IDは別のものに変更されてしまうことがあるのだ。gadRequest.testDevices は設定したままでもリリースすることができるが、リリース後に端末IDが変更されてしまっては困る。
原因
テスト広告を表示するには追跡型広告を制限のOFFが必要であるが、これをONに一度してしまうと、端末IDがリセットされてしまうのだ。
解決方法
追跡型広告を制限のON / OFFの切り替えをしないことしか見つけられていない。良い方法があったら教えていただきたい。