Загрузка веб-просмотра с https с ионным и конденсаторным

Я пытаюсь создать apk, который должен загружаться с помощью https://mydomain с ionic 4 и конденсатором. В Capsuitor.config.json я уточняю это поле:

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

Потому что я делаю вызов API в этом домене. Проблема в том, что я хочу, чтобы мое приложение загружалось с https://mydomain при запуске приложения в режиме отладки или apk.

Я даже пытался сделать это в конденсатор.config.json

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

Но он только что позвонил

 http://https://mydomain

когда я запускаю приложение. Поэтому просто продолжайте добавлять «http: //» к имени хоста.

Вы знаете, что я могу сделать, чтобы мое приложение работало с https вместо http?

Я использую ionic 4 и конденсатор, и на данный момент я тестирую все это на платформе Android с помощью студии Android (но у меня будет то же самое для IOS).

Спасибо


person kavind    schedule 12.04.2019    source источник
comment
Есть ли удача заставить это работать?   -  person SeanMC    schedule 12.02.2020
comment
есть флаг --https. Это определенно служит https для устройства. Затем я получаю ошибки установления связи с сетью / ssl и пустой экран приложения. Возможно, нужно добавить сертификат CA или что-то в этом роде. У меня до сих пор нет рабочего решения :-(   -  person mcmonkeys1    schedule 10.04.2020
comment
@ mcmonkeys1 У вас когда-нибудь работал флаг --https?   -  person JMadelaine    schedule 10.11.2020


Ответы (3)


У Ionic есть экспериментальный флаг --ssl

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

Здесь отслеживаются проблемы с этим:

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

person Jay Ordway    schedule 16.04.2019

Используйте следующее в конденсатор.config.json:

{
  "hostname": "mydomain.com",
  "androidScheme": "https"
}
person Jesse Buitenhuis    schedule 06.11.2020

Есть рабочее решение для Capacitor 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;

Затем добавьте переопределение для onStart () в MainActivity.java моего приложения.

@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.

Я запускаю его из интерфейса командной строки с помощью

ionic capacitor run android -l --host=0.0.0.0 --consolelogs --external --ssl
person Allan Weir    schedule 14.04.2021