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

2019-05-23  本文已影响0人  ouxuwen

在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

上一篇下一篇

猜你喜欢

热点阅读