解決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的認證,這是不安全的,使用需慎重

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章