首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用离子和电容加载https的webview

使用离子和电容加载https的webview
EN

Stack Overflow用户
提问于 2019-04-12 16:34:54
回答 3查看 2.6K关注 0票数 4

我正在尝试建立一个apk,它必须加载与离子4和电容的https://mydomain。在capacitor.config.json中,我精确地定义了这个字段:

代码语言:javascript
复制
"server" : {
  "hostname": "mydomain"    
}

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

我甚至在capacitor.config.json中尝试过这样做

代码语言:javascript
复制
"server" : {
  "hostname": "https://mydomain"    
}

但它只是调用了

代码语言:javascript
复制
 http://https://mydomain

当我运行应用程序时。所以它就一直在主机名上加"http://“”。

你知道我该怎么做才能让我的应用程序用https而不是http运行吗?

我正在使用ionic 4和电容器,目前我正在使用Android studio在Android平台上测试所有这些(但我会在IOS上使用同样的东西)。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2019-04-16 21:11:11

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

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

在这里跟踪它有一些问题:

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

票数 0
EN

Stack Overflow用户

发布于 2020-11-06 17:37:01

在capacitor.config.json中使用以下命令:

代码语言:javascript
复制
{
  "hostname": "mydomain.com",
  "androidScheme": "https"
}
票数 0
EN

Stack Overflow用户

发布于 2021-04-14 16:59:48

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

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

对于Capacitor v3,我导入以下行:

代码语言:javascript
复制
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()添加一个覆盖

代码语言:javascript
复制
@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();
  }
}

对于捆绑电容器v2,这可能会起作用-但如果不能,代码可以从onStart()移动到onCreate(捆绑包savedInstanceState),在升级到v3之前我看到它在那里工作。

我使用以下命令从CLI运行

代码语言:javascript
复制
ionic capacitor run android -l --host=0.0.0.0 --consolelogs --external --ssl
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55647572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档