我有一个托管的,基于CMS的Web应用程序,我想与Ionic Capacitor一起打包为Android / iOS应用程序。所以我加了
QSqlQuery
添加到电容器.config.json并完成
"server": {
"url": "https://my.domain/"
},
在我应用的主Javascript文件中(我使用webpack进行捆绑)。这基本上可以正常工作,即应用已正确加载并显示。但是在控制台上,我看到Capacitor加载了插件的Web版本,并且import { Capacitor, Plugins } from '@capacitor/core';
console.log('Plugins', Capacitor.Plugins);
说平台是“ web”,而不是“ android”。
如何从设备的文件系统中加载我的应用程序时使电容器发挥作用,特别是如何在此设置中使用插件的本机版本?
答案 0 :(得分:1)
事实证明,这是我的页面出现活动服务人员的麻烦原因。 Capacity使用WebViewClient::shouldInterceptRequest来注入用于初始化到本机世界的桥的Javascript代码,Android不会为服务工作者处理的请求调用此回调。相反,它为这些请求提供了单独的回调,可通过ServiceWorkerController使用。
所以我要做的是创建自己的微型插件:
@NativePlugin
public class ServiceWorker extends Plugin {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void load() {
ServiceWorkerController swController = ServiceWorkerController.getInstance();
swController.setServiceWorkerClient(new ServiceWorkerClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebResourceRequest request) {
return bridge.getLocalServer().shouldInterceptRequest(request);
}
});
}
}
,然后按预期工作。 (我还必须将localServer的吸气剂添加到Bridge类中。)