繁体   English   中英

如何在 Cordova Android 应用程序中使用 Service Worker?

[英]How to use service workers in Cordova Android app?

我想在我的 Cordova Android add 中使用 service worker 作为将一些图像同步到服务器和从服务器同步一些图像的便捷方式。 我注意到这个问题指出这是不可能的,因为服务工作者必须通过https:加载,而 Cordova 将通过file:加载文件。

另一方面, ionic似乎支持 service workers 这意味着他们已经找到了一些方法来完成这项工作。 但是,我没有使用离子。 似乎有一个适用于 iOS 服务工作者cordova插件,但正如我所说的,我使用的是Android。

如果可能的话,在 Cordova Android 应用程序中使用服务工作者的当前最佳实践是什么?

在深入研究这个问题后,我得出结论,Android 中不支持 Service Worker,因为它会阻止 Service Worker 访问 HTTP 或文件协议。

此外,Ionic 框架中对 Service Worker 的支持也没有明确说明它在混合移动应用程序中不受支持。 在这种情况下,这也有点误导。 Ionic 的 Service Worker 支持仅在 Progressive Web App 的情况下出现,而不是在其官方博客中提到的混合移动应用程序中

添加到上述信息之外,使用 Service Workers 可以实现的大部分功能已经作为插件的一部分提供,例如推送通知插件,在大多数情况下应该足够了。

最重要的是,Cordova Android 和 Ionic 框架不支持 Service Workers。 欲了解更多信息,请查看以下链接

我不能接受“不”的答案,所以继续寻找我是否可以通过编码摆脱这种情况。

请注意,我不确定我是否遇到了与 OP 相同的问题或什至与 OP 具​​有相同的请求(如果没有,请道歉,但希望是)...将项目( https://localhost/cordova.js和插件文件)添加到 Service Worker 使用的缓存中。 我在第一次运行时做了这个,第二次运行(即使离线)工作......所以取得了一些不错的进展。 奇怪的是,在随后的运行中,一些(大部分)手动缓存的项目被删除,因此启动没有成功完成。

然后我研究了是否可以完全绕过 SW 调用localhost ,你知道什么,它似乎有效。 本质上,在 SW 的 fetch 处理程序中,我有一个条件子句,如果它在 url 中发现 localhost,则不执行任何操作。 这会导致 SW 找不到处理请求的 fetch 处理程序,然后浏览器调用以获取资产,就像根本没有 SW 一样。

我已经为在线/离线启动测试了这个,并确保我可以访问cordova和一些插件,并且一切似乎都运行良好。 请注意,到目前为止所有的测试都是在 Android 上进行的。

我使用的代码示例如下(为了清楚起见,留下了明确的“什么都不做”注释);

 self.addEventListener('fetch', event => {
        console.log('Fetch event for ', event.request.url);
        if (event.request.url.includes("localhost")) {
            // Do Nothing
        } else {
        event.respondWith(
          caches.match(event.request, {
           // ... do the rest of the SW handling

我很想知道其他人是否尝试过这个,然后有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM