AdMob Mediation を iOS プロジェクトに導入しようと作業を行なっていましたが、手近なドキュメントをそのまま信じて随分と時間がかかってしまいました。
- Mediation(英語)https://developers.google.com/mobile-ads-sdk/docs/admob/mediation#ios
- AdMob(日本語)https://developers.google.com/mobile-ads-sdk/docs/ios/fundamentals?hl=ja
- AdMob(英語)https://developers.google.com/mobile-ads-sdk/docs/
Mediation も AdMob もどちらも Google の製品でありまして、Mediation を導入すると AdMob も自動的に付いてくるようになっています。Mediation ID を設定すれば Mediation に、AdMob の広告 ID を設定すれば AdMob のみの広告となるようです。
それで、上記リンクの1つめを信じて設定を行なっていたのですが、どうしても
Undefined symbols for architecture armv7: "_SKStoreProductParameterITunesItemIdentifier", referenced from: -[GADOpener openInAppStore:fallbackURLString:] in libGoogleAdMobAds.a(GADOpener.o) "_OBJC_CLASS_$_SKStoreProductViewController", referenced from: objc-class-ref in libGoogleAdMobAds.a(GADOpener.o) "_OBJC_CLASS_$_ASIdentifierManager", referenced from: objc-class-ref in libGoogleAdMobAds.a(GADIdentifierUtilities.o) objc-class-ref in libGoogleAdMobAds.a(GADGestureIdUtil.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)
というエラーが出てしまいます。
ドキュメントとにらめっこしていましたが、解決せず。サイトを色々検索してやっと、framework が足りなさそう、という情報を得ました。そして英語版の AdMob のサイトに行ってみると、framework は
- AudioToolbox
- MessageUI
- SystemConfiguration
- CoreGraphics
- AdSupport
- StoreKit
を追加しましょうと書いてありました。後ろの2つのフレームワークはリンク1. と 2. では抜けていました。おいおい公式ドキュメント、と思いながら framework を追加するとビルドが通りました。やれやれ。
他に忘れそうなことをついでに書いておくと
- Build Setting > Other Linker Flag への “-ObjC” の追加
- libGoogleAdMobAds.a は Link Binary With Libraries に追加(フレームワークのところ)
- AdMob SDK version 6.2 から “-all_load” フラグは不要になった
- armv7s(つまり iOS6 以上相当)に対応しているのは SDK version6.2 から
(それより前の SDK を使用する場合はプロジェクト設定を修正する必要がある)
というところ(参考:http://adsense-ja.blogspot.jp/2012/10/ios-6-iphone-5-admob-sdk-62.html)。古い SDK だと UUID 取得処理のカンケイなどで、Apple Store のリジェクト理由にもなるそうです。なるべく新しい SDK を使用しましょう。
<追記>
テスト用の表示については GADRequest の .testDevices に対して設定をするそうで、こちらも試してみました。しかし、Mediation では全く表示されません(AdMob の ID だとテスト用の広告が表示される)。
どうなってんの?ということで調べてみると、公式掲示板(?)で情報発見。
https://groups.google.com/forum/#!topic/google-admob-ads-sdk/fq9VrToLeKs
「Mediation だとテスト用の広告が表示されないんだけど」
「返答遅れました。こちらの AdMob のプラグインの不備です。」
(2週間経過)
「その後、いかがでしょうか。」
「あいにく (Unfortunately) 最新版には反映できませんでした。次のリリースでは必ず直しますわ。」
おいおい。