MonacaでWKWebViewを使用する基本的な対応は行ったのですが、ajaxの通信がうまくいかなかったりAppleにリジェクトされたりしてしまいました。
自分が行った対応を共有したいと思います。
下記の対応は実施済みの前提で話を進めます。
ajax通信がうまくいかない
自分の場合はこんなエラーが発生しているようでした。
Access to XMLHttpRequest at ‘https://ucopendb.gsi.go.jp/ucode/api/search.json?’ from origin ‘null’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
エラーの中身
{ "readyState":0, "status":0, "statusText":"error" }
これはハイブリッドアプリは「file:///」でhtmlを開いているためサーバーで「Access-Control-Allow-Origin:*」などを設定していてもリクエストが「Origin:null」となってしまうためajaxでの通信が失敗してしまうのです。
MonacaでWKWebViewを使う設定を行うとCordovaプラグイン「cordova-plugin-wkwebview-engine」が有効になりセキュリティが強化されCORSポリシーが有効となってしまうため上記の現象が発生してしまいます。
そこでCORSポリシーを無視するためにCordovaプラグイン「cordova-plugin-wkwebview-file-xhr」を追加することで問題が解決されます。
そのため下記はセットで有効にしましょう。
- cordova-plugin-wkwebview-engine
- cordova-plugin-wkwebview-file-xhr
Appleにリジェクトされる
ビルドはできるし端末で動作確認しても大丈夫そうなのにAppleにアプリをアップロードするとリジェクトされてしまう・・・
Dear Developer,
We identified one or more issues with a recent delivery for your app, “Application” 1.0.0 (1.0.0). Please correct the following issues, then upload again.
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).
Best regards,
The App Store Team
リジェクトの内容からcordovaプラグインのどれがNGなのか判断することは不可能なため、cordovaプラグインを1つ1つビルド、アップロードしてどのプラグインがNGだったのか調査しました。
問題はWKWebViewに対応されていないCordovaプラグイン「cordova-plugin-file-transfer」が含まれているのが原因でした。
プラグインを取り除いて動くように変更することで問題は解決しました。
サードパーティーを使っていると他にもあるかもしれないので同じ現象が発生している方は調べてみると良いかと思います。