在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
网友评论