如何使用Ionic Capacitor打包托管的Web应用程序

时间:2019-04-28 21:26:18

标签: android capacitor

我有一个托管的,基于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”。

如何从设备的文件系统中加载我的应用程序时使电容器发挥作用,特别是如何在此设置中使用插件的本机版本?

1 个答案:

答案 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类中。)