/ / WebView avec un agent de service (Qu'est-ce que ServiceWorkerController et ServiceWorkerWebSettings?) - Android, Google-Chrome, Affichage Web, Google-Chrome-Devtools

WebView avec agent de service (Qu'est-ce que ServiceWorkerController et ServiceWorkerWebSettings?) - Android, Google-Chrome, WebVIEW, Google-Chrome-Devtools

J'ai un employé de service qui fonctionne bien dans Chromedesktop et Chrome mobile, et je peux dire exactement ce qui se passe via l'incroyable logiciel DevTools dans Chrome desktop (surveillance de Chrome mobile à distance via USB). Mon ouvrier de service est très étroitement basé sur cet exemple. La page se recharge correctement sans connexion réseau. À partir de l'onglet Réseau de DevTools, je peux confirmer que les ressources sont mises en cache et servies par l'agent de service comme prévu.

Mais je charge également la même page dans une WebViewet j’ai du mal à déterminer si le technicien s’enregistre correctement et fonctionne comme il se doit. Je ne vois pas comment résoudre ce problème de la même manière que vous le pouvez avec DevTools dans Chrome desktop / mobile.

Ce qui est certain, c’est que la page ne se recharge pas sans connexion lorsqu’elle se trouve dans WebView. Par conséquent, certaines ressources ne sont pas mises en cache. C’est en dépit du fait que les travailleurs des services semble être pris en charge dans WebView.

En cherchant des étapes ou des paramètres qui me manquaient peut-être pour le faire fonctionner comme dans Chrome, je suis tombé sur ServiceWorkerController et ServiceWorkerWebSettings, mais ne trouve pas de documentation ni d’exemples pour ces éléments (autres que les documents de base liés). Une recherche de ces termes sur StackOverflow ne donne aucun résultat.

Existe-t-il un exemple fonctionnel de WebView qui charge une page avec des agents de service attachés? Avez-vous une idée de l'utilisation des deux classes ci-dessus? Sont-elles réellement nécessaires?

Réponses:

0 pour la réponse № 1

Ce n’est qu’une réponse partielle, mais espérons que cela en aidera de toute façon:

D'après ce que je peux dire, le ServiceWorkerController est l'implémentation Java de ServiceWorker pour WebView, qui est distincte de l'implémentation Javascript. Les deux ne semblent pas être liés l'un à l'autre.

L'implémentation Java est un singleton qui persiste et affecte toutes les WebViews d'une application. Sa seule méthode consiste à intercepter les demandes via shouldInterceptRequest. C'est très semblable à WebViewClient, ce dernier a plus de fonctionnalités et n’affecte que les WebViews auxquels il est attaché (via setWebViewClient).

le lien semble indiquer que WebViews prend en charge la version Javascript de ServiceWorker. Avez-vous manqué par hasard d'activer Javascript via WebSettings.setJavascriptEnabled? Assurez-vous également que vous ciblez le minimumLa version 21 du SDK en tant que ServiceWorkers n'est activée que dans Android 5.0 et versions ultérieures. Je suis intéressé de savoir si vous ou quelqu'un a réussi à obtenir un ServiceWorker Javascript fonctionnant également dans une WebView.