解决ionic3 无法访问https请求的问题

        在ionic的开发中,我需要用进行https请求,但是我发现在debug下访问没有问题,但是一旦打包签名后就无法访问了。这是由于在测试APK的时候,如果后端API为https的,而且在测试服的https证书是非正式的话,会导致测试版apk无法发起http请求。我是用的是自签名的证书,因此导致无法访问。

        经过苦苦寻觅,终于找到了一种忽略ssl认证的方法,可以解决遇到的问题。方法如下:

  • android 端

找到CordovaWebViewClient.java文件,目录位置:

project/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java

修改onReceivedSslError方法,修改如下

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
  final String packageName = this.cordova.getActivity().getPackageName();
  final PackageManager pm = this.cordova.getActivity().getPackageManager();

  ApplicationInfo appInfo;
  try {
    appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
    if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
      // debug = true
      handler.proceed();
      return;
    } else {
      // debug = false
      // THIS IS WHAT YOU NEED TO CHANGE:
      // 1. COMMENT THIS LINE
      // super.onReceivedSslError(view, handler, error);
      // 2. ADD THESE TWO LINES
      // ---->
      handler.proceed();
      return;
      // <----
    }
  } catch (NameNotFoundException e) {
    // When it doubt, lock it out!
    super.onReceivedSslError(view, handler, error);
  }
}

文件所处位置

cordova v4及以下

project/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java

cordova v5

project/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java
  • ios端

将AppDelegate.m文件下修改为:

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}
@end

文件所在位置:

project/platforms/ios/Project/Classes/AppDelegate.m


参考文献:http://ivancevich.me/articles/ignoring-invalid-ssl-certificates-on-cordova-android-ios/

这种方式忽略了ssl的认证,这是不安全的,使用需慎重

你可能感兴趣的:(WebApp开发,ionic3)