iOS13でWKWebViewがBackground Fetchで動作しない

投稿者: | 2020年7月7日

Background FetchでWKWebViewを更新しようとすると、正常に動作しない場合があるようです。
具体的には、アプリがフォアグラウンドに居る時にiPhoneのSleepボタンを押してスリープさせ、その状態でBackground FetchからWKWebViewにURLをロードしようとすると動作しません。アプリをバックグラウンドに下げてからSleepさせた場合は、問題は発生しないようです。
また、iOS12以前や、シミュレータ ではこの問題は発生しないようです。

WebKitのソースを確認してみると、WebKit側でアプリのバックグラウンドへの移行をハンドリングして処理を制御するようなロジックが入ってるっぽいです。
iOS13からUIScene周りの処理が加わったようで、それが問題になっているようでした。

対処方法としては、バッドノウハウ的な方法になりますが、下記のコードのように、WKWebViewが所属するUISceneをobjectに設定してUISceneWillEnterForegroundNotificationを送ってやれば、WebKit側がアプリがフォアグラウンドに移行したと誤認してWKWebViewのロードが実施されるようになります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です