最近苹果宣布所有上架应用都要用https,我们后端走的是同一个函数,导致Android也要连接https.

百度了下,网上说客户端不需要做什么特殊处理,因为cocos本身是支持https的.但是服务端自建的证书是不行的.需要购买的证书才可以.

但是还有个问题,购买的证书,Android可以拿到服务器列表,但是热更新时连不上热更新的服务器.

下面是我的解决方法.(思路是绕过https验证,借鉴了网上的代码)

找到这个jar文件,这个是热更新时连接服务器的java文件编译后的文件.具体的路径在

cocos2d-x-3.13.1\cocos\platform\android\java\src\org\cocos2dx\lib

找到扩展名为.java的文件才能编辑,否则是编辑不了.

下面是我修改的代码部分.

  1. //內建类,下面会用到
  2. public class SSLSocketFactor extends SSLSocketFactory {
  3.  
  4. SSLContext sslContext = SSLContext.getInstance("TLS");
  5.  
  6. public SSLSocketFactor(KeyStore truststore)
  7. throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
  8. super(truststore);
  9. // TODO Auto-generated constructor stub
  10. TrustManager tm = new X509TrustManager() {
  11. public void checkClientTrusted(X509Certificate[] chain,
  12. String authType) throws CertificateException {
  13. }
  14.  
  15. public void checkServerTrusted(X509Certificate[] chain,
  16. String authType) throws CertificateException {
  17. }
  18.  
  19. public X509Certificate[] getAcceptedIssuers() {
  20. return null;
  21. }
  22. };
  23. sslContext.init(null, new TrustManager[] { tm }, null);
  24. }
  25. }
  1. //修改cocos2dx原有的方法
  2. public static Cocos2dxDownloader createDownloader(int id, int timeoutInSeconds, String tempFileNameSufix, int countOfMaxProcessingTasks) {
  3. Cocos2dxDownloader downloader = new Cocos2dxDownloader();
  4. downloader._id = id;
  5.  
  6. downloader._httpClient.setEnableRedirects(true);
  7. if (timeoutInSeconds > 0) {
  8. downloader._httpClient.setTimeout(timeoutInSeconds * 1000);
  9. }
  10.  
  11. try {
  12. //Secure Protocol implementation.
  13. SSLContext ctx = SSLContext.getInstance("SSL");
  14. //Implementation of a trust manager for X509 certificates
  15. X509TrustManager tm = new X509TrustManager() {
  16.  
  17. public void checkClientTrusted(X509Certificate[] xcs,
  18. String string) throws CertificateException {
  19.  
  20. }
  21.  
  22. public void checkServerTrusted(X509Certificate[] xcs,
  23. String string) throws CertificateException {
  24. }
  25.  
  26. public X509Certificate[] getAcceptedIssuers() {
  27. return null;
  28. }
  29. };
  30. ctx.init(null, new TrustManager[] { tm }, null);
  31. SSLSocketFactory ssf = new SSLSocketFactory(ctx);
  32.  
  33. //允许所有的验证通过
    ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  34. downloader._httpClient.setSSLSocketFactory(ssf);
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38.  
  39. // downloader._httpClient.setMaxRetriesAndTimeout(3, timeoutInSeconds * 1000);
  40. downloader._httpClient.allowRetryExceptionClass(javax.net.ssl.SSLException.class);
  41. downloader._tempFileNameSufix = tempFileNameSufix;
  42. downloader._countOfMaxProcessingTasks = countOfMaxProcessingTasks;
  43. return downloader;
  44. }

解决cocos2d 热更是连不上https服务器的更多相关文章

  1. 客户端热更新框架之UI热更框架设计(上)

    什么是热更新,为什么需要热更新?          热更新是目前各大手游等众多App常用的更新方式.简单来说就是在用户通过App Store下载App之后,打开App时遇到的即时更新.对于手游客户端来 ...

  2. 实现iOS图片等资源文件的热更新化(五): 一个简单完整的资源热更新页面

    简介 一个简单的关于页面,有一个图片,版本号,App名称等,着重演示各个系列的文章完整集成示例. 动机与意义 这是系列文章的最后一篇.今天抽空写下,收下尾.文章本身会在第四篇的基础上,简单扩充下代码, ...

  3. Unity3D热更新之LuaFramework篇[08]--热更新原理及热更服务器搭建

    前言 前面铺垫了这么久,终于要开始写热更新了. Unity游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新. 资源更新是Unity本来就支持的,在各大平台也都能用.而脚本的热更新在iOS平台 ...

  4. 实现iOS图片等资源文件的热更新化(三):动态的资源文件夹

    简介 此文,将尝试动态从某个不确定的文件夹中加载资源文件.文章,会继续完善自定义的 imageNamed 函数,并为下一篇文章铺垫. 这么做的意义 正如我们经常所说的那样,大多数情景知道做事的意义往往 ...

  5. Lua热更系统

    1.介绍 使用脚本开发游戏业务逻辑其中一个好处就是代码可线上热更,不停机修复bug.而热更代码的写法与需要被热更的文件的代码又有着密切的关系,本文介绍一种热更方法. 2.热更原理 Lua提供一个叫re ...

  6. 实现iOS图片等资源文件的热更新化(零): 序

    必要的序 以后在写系列文章,准备把基本的规划和动机等,单独作为一个小的序言部分给独立出来.序言部分,可以较为完整地交待系列文章的写作动机,所展示的编码技术可能的应用场景等.个人,我还是比较看重文章或者 ...

  7. 热更新-----为何使用lua进行热更

    事实上我们在安卓端是可以使用c#jit的,但是我们在ios上的代码是AOT(预先编译,静态编译)的,不能用c# jit(实时编译,即时编译). ios不能用c#热更是因为启动了CPU的No eXecu ...

  8. 实操重写IK分词器源码,基于mysql热更新词库

    实操重写IK分词器源码,基于mysql热更新词库参考网址:https://blog.csdn.net/wuzhiwei549/article/details/80451302 问题一:按照这篇文章的介 ...

  9. Unity 代码编译成dll 更新dll实现热更代码

    Unity 代码编译成dll 更新dll实现热更代码 实现流程 代码编译成DLL DLL打包成AssetBundle 加载AssetBundle 加载代码程序集 获取指定类 使用反射赋值 C#代码编译 ...

随机推荐

  1. 《编程导论(Java)·2.1.3改写(override)》

    <编程导论(Java)·2.1.3改写(override)>,收集override内容. 方法改写(method overriding)是指对于父类定义的一个实例方法,同意子类提供自己的实 ...

  2. Could not find class &#39;****&#39;, referenced from method #####

    找不到类,多半也是和第三方的jar包有关. 将找不到的类.在下图中的地方勾选出来.假设jar太多.有的类有冲突的话,须要明白其先后顺序. 请外一篇和第三方jar有关的异常的文章. Conversion ...

  3. 齐全的IP地址查询接口及调用方法(转)

    设计蜂巢IP地址查询接口:http://www.hujuntao.com/api/ip/ip.php 腾讯IP地址查询接口:http://fw.qq.com/ipaddress 新浪IP地址查询接口: ...

  4. Linux 汇编语言开发指南

    http://www.ibm.com/developerworks/cn/linux/l-assembly/

  5. 【转】如何优化Cocos2d-X游戏的内存

    Published on 2013 年 2 月 4 日, by donglin http://blog.chukong-inc.com/index.php/2013/02/04/%E5%A6%82%E ...

  6. linux shell执行方式

    linux shell执行有两种方式 shell脚本以#!/bin/bash开头,执行shell时先检查首行,在内部以下列方式执行: $/bin/bash script.sh 1. 使用sh执行. $ ...

  7. 关于ProgressBar的美化问题

    Android自带的ProgressBar其实也算不上丑陋,但是如果所有的App都使用一个模式的ProgressBar,那么估计用户就要崩溃了,打开任何一个App,擦,进度条都一模一样..有鉴于此,我 ...

  8. JavaScript无限极菜单

    <!DOCTYPE html> <html> <head> <title> New Document </title> <meta c ...

  9. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  10. day-4

    /* 早上黑板上的倒计时变成了120小时 嗯 很快就要结束了 上午考试 据老师说很简单 老师 :"我就说说~"..... 下午改题 T3好辣脑子 感觉智商不够了 T2dp写丑了 然 ...