2020年4月からiOSアプリの審査基準が変更になり、アプリギルドで配布しているプロジェクトファイルに関しても日々更新を行ってきました。
大きな変更点の一つがHTMLのレンダリングエンジンとして、それまで標準だったUIWebViewが完全に廃止となりWKWebViewに移行しないとNGというのがあります。
これが大きな問題で、上田が利用しているAdmob SDKというプラグインがWKWebViewに未対応のためiOSのリリースに支障が出ていました。
ただ、全部がNGということもなく、たまに審査が通過するという現象もあるので数打てば当たる作戦も有効だったのですが根本的な解決になってはいないため、本記事に対応策をまとめましたので参考にしてください。
ギルドメンバーの方で、これから新規でAdmob対応のiOSアプリを作る場合はマニュアルなどにあるダウンロードリンクのファイルも最新版に変更してあるので、そこから最新のプロジェクトファイルをダウンロードすればOKです。
既存のアプリをWKWebViewに変更する場合は、少し手間ですが以下を参考に環境を移行してください。
コンテンツ
手順1.プロジェクトからUIWebView環境を全て削除
現時点でMonacaで使用されているCordova 9.0のiOSプラットフォームのバージョンは5.0.1 になりますが、まずはこのバージョンを5.1.1にアップデートしてください。
monaca IDEのビルドメニューから [ビルド環境の設定]を開いて、iOSのPlatformの欄からiOS 5.1.1 を選択して保存ボタンをクリックです。
同様にIDEの設定メニューから[iOSアプリ設定]を開いて、WebViewエンジンの欄でWKWebViewを選択して保存をクリック。
この時点で自動的にconfig.xmlに変更が反映されているはずです。IDEからconfig.xmlファイルを開いて<platform name=”ios”>〜</platform>の間に以下の記述が含まれているのを確認して下さい。
<preference name="WKWebViewOnly" value="true"/>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine"/>
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine"/>
</feature>
記述がなければ適宜、上記コードをコピーするなどして手動で記載してください。
手順2.Admob SDKからUIWebView環境を削除
現時点でAdmob SDKの最新バージョンはv0.24.1ですが、このSDK内部で利用しているGoogle Mobile Ads SDKが最新版ではなく、こいつがUIWebViewを利用しています。
設定を変更するだけでは解決しないため、以下の手順で最新のGoogle Mobile Ads SDKをAdmob SDKに組み込む必要があります。
cordova-admob-sdkからcordova-admob-sdk-master.zipをダウンロードします。
(この時v0.24.1よりバージョンが上がっていたら問題は解決しているかもしれません。)
ダウンロードしたcordova-admob-sdk-master.zipを展開して、cordova-admob-sdk-master/src/iosにあるGoogleMobileAds.frameworkフォルダをフォルダごと削除してください。
Google Mobile Ads SDKからgooglemobileadssdkios.zipをダウンロード。現時点でのバージョンは7.60.0でした。
ダウンロードしたgooglemobileadssdkios.zipを展開して、中にあるGoogleMobileAds.frameworkフォルダを先程削除した場所にコピーします。
これで最新のGoogleMobileAdsが組み込めたので、cordova-admob-sdk-masterをzipで圧縮して完成です。
完成したzipファイルは他のcordovaプラグインと同様に、monacaのIDEメニューの設定 -> cordovaプラグインの管理を開いて、[cordovaプラグインのインポート]からインポートして使用できます。
上田はまだ見たことが無いのですが、Admobの一部の広告にBluetoothを利用した広告が含まれるため、設定にBluetoothの利用目的を含める必要があるようです。
最後に以下の記述をconfig.xmlの<platform name=”ios”>〜</platform>の間に書き加えておきましょう。
<edit-config file="*-Info.plist" mode="merge" target="NSBluetoothAlwaysUsageDescription">
<string>Some advertisements use bluetooth.</string>
</edit-config>
これでWKWebViewに完全対応したAdmob SDKを利用できるようになりました。
一応上田が作成したWKWebViewに移行済みのAdmob SDKを公開しておきます。
https://apps.jp.net/files/admob_sdk.zip
ただ動作するというだけでバージョン表記やdescriptionなどもオリジナルのままです。
2020年6月時点でのバージョンなので本当は先述の手順で自作するほうが確実です。最後の手段としてご利用ください。
ハマりやすい箇所
iOSアプリはAndroidに比べると手順が複雑でなんとなく直感的でない箇所も多く、日頃から多くの問い合わせがあります。
躓きやすそうな点をトラブルシューティング的にまとめておきます。
iOSアプリがビルドで失敗する
バンドルIDがワイルドカードになっているとビルド時点でエラーになります。
ワイルドカードをやめて固定のバンドルIDを利用してプロビジョニングプロファイルを作り直してください。詳細は以下参照
スプラッシュ画面でアプリがクラッシュする
config.xmlにGADApplicationIdentifier/GADIsAdManagerAppの記載がないのが原因。
<config-file target="*-Info.plist" parent="GADApplicationIdentifier">
<string>ca-app-pub-xxxxx~xxxxx</string>
</config-file>
<config-file parent="GADIsAdManagerApp" platform="ios" target="*-Info.plist">
<true/>
</config-file>
細かい説明は以下参照。
TransporterでデリバリしたビルドファイルがApp Store Connectに表示されない
UIWebViewを利用していたり、誤った設定をしているような場合は、Appleの審査員による人の目の審査の前に自動的にリジェクトされることがあります。
その場合、登録してあるメールアドレス宛にメールが届いているのでメールボックスを確認してください。App Store Connect上にエラーメッセージなどは表示されません。(そのせいで躓く人が多そう)
ITMS-90809: Deprecated API Usage
UIWebViewを利用している箇所が残っている場合は、リジェクト時に以下のようなメッセージがきます。
ITMS-90809: Deprecated API Usage – New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).
本記事の内容を見返して、UIWebViewを取り除いてください。
それでもだめなら以下の記述で解決する場合もあるようです
<edit-config file="*-Info.plist" mode="merge">
<key>gad_preferred_webview</key>
<string>wkwebview</string>
</edit-config>
ITMS-90683: Missing Purpose String in Info.plist
以下の記述がconfig.xmlにあるか確認してください。
<edit-config file="*-Info.plist" mode="merge" target="NSBluetoothAlwaysUsageDescription">
<string>Some advertisements use bluetooth.</string>
</edit-config>
これで大体まとめられたと思います。
Admob SDKはcordova-plugin-admob-freeを利用するためだけに採用しています。MIT ライセンス(二次利用可)なので使い勝手もよかったのですが、今回のWKWebView対策のバージョンアップが無いなら、もう上田が作り直しますね。
多くの副業難民を救ったアプリビジネスのノウハウの集大成を完全無料で公開!
運営実績5年以上、指導実績1200名を超えて月収100万円以上の実績者を多数輩。
最高月収867万円達成者も語る「時間」や「場所」に縛られない理想的な副業ライフを手に入れるための特別レッスンを今すぐ受け取ってください!
下記ファイルがダウンロードできないようです。
https://apps.jp.net/files/admob_sdk.zip
大変失礼しました。
リンクを修正させていただきました。
勉強になります。共有ありがとうございます。
以前に上田様が作成された令和おみくじアプリのiOS版のリリースも是非拝見させていただきたいです。
何卒宜しくお願い申し上げます。
上田です。
コメントありがとうございます。
令和おみくじアプリのiOS版ですね、貴重なご意見ありがとうございます。
ありがとうございます。
私事ですが大手スマホゲーム会社を退社してから自分でもプログラミングを勉強しようと始めましたが、上田さんのブログを励みにしております。ありがとうございます。
今後とも宜しくお願い申し上げます。
上田です。
コメントありがとうございます。
スマホゲームもアプリの中の一つと言えますが、本当にユーザーの多いものですよね。
この機会にぜひプログラミングも学ぶと今後のためによいでしょうね。何もせず稼ぎたいと思ってる人もいる一方で、素晴らしい向上心です。
こちらこそ今後ともどうぞよろしくお願いします。