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