如何在离子中为https请求添加android ssl证书?

时间:2016-10-20 06:52:29

标签: cordova ionic-framework phonegap-plugins cordova-plugins phonegap-build

在离子模拟器中,所有http和https工作正常但在真实设备发布版本中它停止工作。

许多人建议为发布版本添加SSL证书,但我不知道如何添加它?

我已经尝试了所有这些来发出https请求吗?

<access origin="*"/>
<access origin="*"/>
<allow-navigation href="*"/>
<allow-intent href="*" />

还添加了白名单插件,但无效。

也尝试了这个但没有工作

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

1 个答案:

答案 0 :(得分:0)

是的,这是所有开发人员提出的最常见的问题。最后我找到了答案,就在这里。

SSL证书足以使网站通过HTTPS进行连接,但要进入混合应用程序(如基于离子的应用程序构建的应用程序),SSL本身还不够,您需要花费几百美元的代码签名证书。

其他选择是使用您可以免费创建的自签名证书,在这里您还可以通过HTTPS连接到离子网络版本,但是再次编译后,apk文件被暂停以连接到DB服务器。

这是技巧,您可以使用自签名证书在服务中添加HTTPS端口或HTTP api链接。

完全遵循以下命令:

  • 离子服务
  • 离子生成
  • ionic build --prod
  • cordova平台添加android

此后,停止编译并放松..现在您将找到一个名为platform的文件夹,路径如下所示 项目/平台/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java

按原样进行以下修改

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 build --release android

此后,通常的命令jarsiner和zipalign

您的apk应该使用您的自签名证书在SSL的HTTPS端口中运行。