4

我正在尝试构建一个 apk,它必须使用带有 ionic 4 和电容器的https://mydomain加载。在电容器.config.json 我精确这个领域:

"server" : {
  "hostname": "mydomain"    
}

因为我在那个域中做了一些 API 调用。问题是,我希望我的应用程序在运行应用程序时以调试或 apk 模式加载https://mydomain 。

我什至尝试在电容器.config.json 中做到这一点

"server" : {
  "hostname": "https://mydomain"    
}

但它只是做了这个电话

 http://https://mydomain

当我运行应用程序时。所以它只是继续在主机名中添加“http://”。

你知道我可以做些什么来让我的应用程序使用 https 而不是 http 运行吗?

我正在使用 ionic 4 和电容器,目前我正在使用 Android Studio 在 Android 平台上测试所有这些(但我对 IOS 也有相同的)。

谢谢

4

3 回答 3

0

电容器 github 上有一个可行的解决方案https://github.com/ionic-team/capacitor/issues/3707#issuecomment-713360155

重要提示:这应该仅用于调试,如果您将此代码留在生产版本中,您的应用程序可能会被拒绝。该代码忽略 SSL 错误,因此不应出现在任何实时代码中。

对于Capacitor v3,我导入这些行:

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

然后在我的应用程序的 MainActivity.java 中添加对onStart()的覆盖

@Override
public void onStart() {
super.onStart();

if (BuildConfig.DEBUG) {
  this.bridge.getWebView().setWebViewClient(new BridgeWebViewClient(this.bridge) {
    @Override
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
      handler.proceed();
    }
  });

  TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    public X509Certificate[] getAcceptedIssuers() {
      return null;
    }

    @Override
    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
      // Not implemented
    }

    @Override
    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
      // Not implemented
    }
  }};

  try {
    SSLContext sc = SSLContext.getInstance("TLS");

    sc.init(null, trustAllCerts, new java.security.SecureRandom());

    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } });
  } catch (KeyManagementException e) {
    e.printStackTrace();
  } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
  }
}

对于Capacitor v2,这可能有效 - 但如果不是,代码可以从 onStart() 移动到 onCreate(Bundle savedInstanceState) ,我在升级到 v3 之前看到它在工作。

我从 CLI 运行它

ionic capacitor run android -l --host=0.0.0.0 --consolelogs --external --ssl
于 2021-04-14T08:59:48.350 回答
0

在电容器.config.json 中使用以下内容:

{
  "hostname": "mydomain.com",
  "androidScheme": "https"
}
于 2020-11-06T09:37:00.610 回答
0

Ionic 确实有一个实验性的 --ssl 标志

https://ionicframework.com/docs/cli/commands/serve

这里有跟踪它的问题:

https://github.com/ionic-team/ionic-cli/issues/3305

于 2019-04-16T13:11:11.173 回答