解决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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容