博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决cocos2d 热更是连不上https服务器
阅读量:6813 次
发布时间:2019-06-26

本文共 3255 字,大约阅读时间需要 10 分钟。

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

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

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

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

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

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

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

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

//內建类,下面会用到public class SSLSocketFactor extends SSLSocketFactory {        SSLContext sslContext = SSLContext.getInstance("TLS");                public SSLSocketFactor(KeyStore truststore)                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {            super(truststore);            // TODO Auto-generated constructor stub            TrustManager tm = new X509TrustManager() {                  public void checkClientTrusted(X509Certificate[] chain,                          String authType) throws CertificateException {                  }                        public void checkServerTrusted(X509Certificate[] chain,                          String authType) throws CertificateException {                  }                        public X509Certificate[] getAcceptedIssuers() {                      return null;                  }              };              sslContext.init(null, new TrustManager[] { tm }, null);         }    }
//修改cocos2dx原有的方法public static Cocos2dxDownloader createDownloader(int id, int timeoutInSeconds, String tempFileNameSufix, int countOfMaxProcessingTasks) {        Cocos2dxDownloader downloader = new Cocos2dxDownloader();        downloader._id = id;        downloader._httpClient.setEnableRedirects(true);        if (timeoutInSeconds > 0) {            downloader._httpClient.setTimeout(timeoutInSeconds * 1000);        }                try {              //Secure Protocol implementation.                SSLContext ctx = SSLContext.getInstance("SSL");              //Implementation of a trust manager for X509 certificates                X509TrustManager tm = new X509TrustManager() {                    public void checkClientTrusted(X509Certificate[] xcs,                          String string) throws CertificateException {                    }                    public void checkServerTrusted(X509Certificate[] xcs,                          String string) throws CertificateException {                  }                    public X509Certificate[] getAcceptedIssuers() {                      return null;                  }              };              ctx.init(null, new TrustManager[] { tm }, null);              SSLSocketFactory ssf = new SSLSocketFactory(ctx);//允许所有的验证通过            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);            downloader._httpClient.setSSLSocketFactory(ssf);        } catch (Exception e) {              e.printStackTrace();          }                    // downloader._httpClient.setMaxRetriesAndTimeout(3, timeoutInSeconds * 1000);        downloader._httpClient.allowRetryExceptionClass(javax.net.ssl.SSLException.class);        downloader._tempFileNameSufix = tempFileNameSufix;        downloader._countOfMaxProcessingTasks = countOfMaxProcessingTasks;        return downloader;    }

 

转载于:https://www.cnblogs.com/eedlrj/p/6262563.html

你可能感兴趣的文章
SQL Server 中心订阅模型(多发布单订阅)
查看>>
Vue父组件接收不到子组件$emit事件的原因分析
查看>>
工作总结的字体和格式要求
查看>>
CentOS 6.9永久设置静态路由表以及路由表常用设置
查看>>
解决Docker时区与主机时区不一致的问题
查看>>
思考与知识
查看>>
访问日志不记录静态文件 访问日志切割 静态元素过期时间
查看>>
idea中复制module和module中的蓝色tag出现的方法
查看>>
python中的面相对象
查看>>
Spring缓存注解@Cache使用
查看>>
基于Three.js的360度全景--photo-sphere-viewer--简介
查看>>
去除wordpress的category各方法对比
查看>>
『Github』简易使用指南
查看>>
实例解读:网络设备热备部署的三种模式
查看>>
<a>标签中的href如何调用js代码
查看>>
在github上搭建个人博客
查看>>
19.QT-事件发送函数sendEvent()、postEvent()
查看>>
.gitkeep
查看>>
JavaScript 中的12种循环遍历方法
查看>>
springcloud~演化的微服务架构
查看>>