小程序集成极光IM sendSocketMessage:fail WebSocket is not connected解决办法
问题.小程序报了异常 sendSocketMessage:fail WebSocket is not connected
解决方法:
因为小程序只有五个socket通道,出了这个说明初始化JMessage太多了,超出了5个,我这里的解决方法是在,app.js中做初始化。全局都使用一个JMessage。这样会解决这个问题。
问题2:另外如果小程序隐藏时间久了,socket通道会自动关闭,
解决方法:
我这里的解决办法是在onHide方法中退出,在onShow中重新初始化JMessage
app.js
.代码如下
require('./common/runtime.js')
require('./common/vendor.js')
require('./common/main.js')
var md5 = require("./common/md5.js")
var JMessage = require("./common/jmessage-wxapplet-sdk-1.4.0.min.js")
//app.js
App({
onLaunch: function () {
//调用API从本地缓存中获取数据
var jim = new JMessage({});
this.globalData.jim = jim;
},
onShow:function(){
//应用显示初始化JMessage
this.initJG();
},
onHide: function (){
//应用隐藏登出JMessage
this.globalData.jim.loginOut();
},
createNonceStr: function () {
var str = "",
range = 20, //min
arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];
// 随机产生
if (true) {
range = Math.round(Math.random() * (36 - 20)) + 20;
}
for (var i = 0; i < range; i++) {
var pos = Math.round(Math.random() * (arr.length - 1));
str += arr[pos];
}
return str;
},
//初始化JMessage的代码
initJG(){
var random_str = this.createNonceStr();
var myDate = new Date().getTime();
var signature = md5("appkey=xxxxxxxxxx×tamp=" + myDate + "&random_str=" + random_str + "&key=xxxxxxxxxx"); this.globalData.jim.init({
"appkey": "xxxxxxxxxx",
"random_str": random_str,
"signature": signature,
"timestamp": myDate,
//开启漫游 获取漫游数据 100条聊天记录
"flag": 1,
}).onSuccess(function (data) {
//TODO
console.log("initonSuccessdata", data);
}).onFail(function (data) {
//TODO
console.log("initonFaildata", data);
});
},
globalData: {
jim: null,
}
})