微信开发系列——遇到的坑及填补办法(持续更新,仅限于自己遇到和总
2019-01-08 本文已影响0人
爆发吧小宇宙
不同的花
一、小程序中结合stomp.js和原生使用websocket 的总结
1. 解决小程序认为两个socket,消息无法发送的问题
websocket 连接断开,发起重连,连接时使用“ login”参数不一致,创建了两个不同的socket连接,微信小程序不允许同时连接两个,报错。郁闷的是官方说可以,但是实际不行,我没找到具体是为啥。所以最好在小程序中避免这种情况发生。
自己主动关闭 websocket 连接,在关闭的方法里,需要重置client实体(比如 client = null),重新连接的时候用新的实体去初始化 stomp.js的实例。保证始终就一个连接存在,并且可以自动重连。
2. 微信小程序在真机上,重连wx.connect 后onConnectMessage未调用
我是用微信的接口结合stomp来接收消息。自己创建了一个变量来标识websocket是否连接,初始值为 false ,在重连完成后置为 true。
微信小程序在真机上,重连连接wx.connect方法,连接成功,在这方法内success方法成功调用,但是监听连接成功的方法 onConnectMessage 未调用,之前在此监听方法里收到消息再更改消息工具类的状态,不能及时更新,所以每次重连,就会实际成功,但实例状态未更改导致获取连接状态为失败,心跳检测会一直进行重连,显示结果为“连接成功。。。正在重连”一直重复。其他发消息的状态也是根据是否连接的属性判断,由于标识为失败,其他消息也无法正常发送。
后来将修改标识已连接状态的操作放在wx.connect的success回调中,解决了这个问题。
二、 拿不到公众号token
一般是因为IP地址不在白名单内。
后台调用微信接口获取token的接口失败之后,把微信返回的错误提示找出来,一般情况下如果是ip不在白名单的话,微信返回的错误信息里面就有提示。改一下代码部署,如果微信接口返回错误信息,就打印到日志中,然后看日志出现的IP是什么,就把这个IP加到白名单。