cocoscreator3.6 android端websocket怎么wss连接服务器

网上项目上线,阿里服务器现在websocket都用wss协议不能用ws协议了,咱们官网上没有任何creator3.x边接wss的示例代码,网上查到的用wss连接都是cocoscreator 2.x时代的例子,都是说从websocket官网上下一个cacert.pem最新证书文件 ,放在resources下,然后代码如下:
let cacert = cc.url.raw(‘resources/cacert.pem’);
if (cc.loader.md5Pipe) {
cacert = cc.loader.md5Pipe.transformURL(cacert)
}
//@ts-ignore
WebSocket_controller.webSocket = new WebSocket(url, null, cacert)
} else {
WebSocket_controller.webSocket = new WebSocket(url);
}
可是现在3.x时代cc.url.raw,还有什么cc.loader.md5Pipe方法都已经无法使用,用那个
resources.load(“cacert”, TextAsset, (err, cart)=>{

})
可是我发现这个方法根本加载不了cacert.pem文件 ,resources.load(“XX”, TextAsset)认不出pem扩展名,返回找不到文件错误
我用论坛里的别人告诉我的方法,直接写文件路径
const textData = “assets/resources/native/98/9889e2a7-19a6-4fcf-81ff-f1ac0c0e2f70.pem”;
const ws = new WebSocket(“wss://socket.XXX.com/ws…”, undefined, textData);
依然报错,返回wss协议证书没有认证什么找不到path的错误,请问各位高手们,到底要怎么才能连接wss协议,我快被逼疯了。

把caert.pem直接丢到安卓工程的assets目录下
const ws = new WebSocket(“wss://socket.XXX.com/ws…”, [], “caert.pem”);

不行,这样做了还是报错 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found,而且那个证书文件也确实读到了,难道是我证书有问题吗?我是从官网示例里下的那个cacert.pem,是不是还要转换成cer啊

我也遇到了,已解决
参考这个知道了可能是cocos打安卓原生包时使用的websocket版本太低,现在的wss链接都是只有服务器配置好就行https://forum.cocos.org/t/websocket-ssl/60024/9

我根据他这个思路想,既然cocoscreator自带的在安卓不好用,直接使用安卓实现就行了呀 :kissing:
可以在androidstudio重新实现一下websocket逻辑,然后使用反射发送到前端,这样前端不需要证书就可以连wss服务器.
参考这个实现https://www.jianshu.com/p/5840f0cbc142
引入最新websocket
androidstudio,目录app下的build.gradle文件添加websocket引入

这样不需要前端也持有签名就可以正常访问,这应该是cocos官方打安卓包的问题

3.5 之后 ,Cocos 在 Android 平台上使用的 WebSocket 已经改为采用 OKHTTP 去实现了,不需要你参考的18年帖子的那样子做,也不需要传入证书,直接传入 “wss://” 就可以了

使用的最新的3.7打包后,安卓还是提示java.security.cert.CertPathValidatorException: Trust anchor for certification path not found这个,有什么好的办法解决吗

这个是服务器端的问题,和服务器websocket证书有关,让服务器改就行,客户端不需要动