2021年2月7日日曜日

Google AdMobの仕様がいつの間にか変更されてた

過去に‪Objective-C‬で書いたアプリを久しぶりにメンテしようと思い、AdMobのSDKを最新の8.0.0に上げた。(注意:7.69.0でも同じ問題出てほっといたもの)
ところが起動してタイトル画面が出てすぐにスレッドエラーだかが出て止まってしまった。
公式のインストールガイドどおりにやってるのだがダメ。

インストールするFrameworkも少し増えてるし、公式ガイドでGoogleMobileAds.frameworkとなってるのがダウンロードしたフォルダではGoogleMobileAds.xcframeworkになっていて戸惑ったが、後者をそのままインストールしていいようだ。

後述するとおりGADBannerViewDelegateが細かく変更されてたようで、それを直して⌘+Shift+k でクリーンビルドしたらエラーが消えてくれた。
クリーンビルドするまで何やっても動かなかったんで、これ重要!

んで、以下のように画面サイズに応じてバナーの横幅を指定してやるんだって。

//新しいアダプティブバナーのコードが以下(AdMob公式より)

CGRect frame = self.view.frame;

//iOS11.0以上の時の処理

if (@available(iOS 11.0, *)) {

frame = UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets);

}

CGFloat viewWidth = frame.size.width;

//バナーサイズ設定

adMobBanner = [[GADBannerView alloc]initWithAdSize:GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)];

GADBannerViewDelegateが変わってた

これまで
- (void)adViewDidReceiveAd:(GADBannerView *)bannerView
とやってたのが、
- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView
になってる。(これが現在の正解ね)

細かく言うと、AdMobのリファレンスサイトでもサンプルコードが
- (void)adViewDidReceiveAd:(GADBannerView *)adView
などと書かれてたり、いろいろ混在している。
いつ頃変わったのかわかんないけど、こういうのもメンテナンスしてほしいよな。いい給料もらってる天才ばかり集まってるだろうに。
adViewDidReceiveAdでもエラーもWarningも出ないし、コード入力時のサジェストも出ないからわからんわ。

ということで、delegate関係は全部SDKのページ見て直したわ。

0 件のコメント:

コメントを投稿