一钾挟、first頁(yè)面
- 初始化im,運(yùn)行監(jiān)聽(tīng)函數(shù) app.monitorIM(im)
initIM(token){
return new Promise((resolve,reject)=>{
const im = RongIMLib.init({ appkey: 'you key',token:token,
qiniuHost: 'https://upload.qiniup.com' }); // 應(yīng)用初始化以獲取 RongIMLib 實(shí)例對(duì)象洁灵,請(qǐng)務(wù)必保證此過(guò)程只被執(zhí)行一次
app.monitorIM(im)
resolve(im)
})
},
- 連接im
/**連接im */
connectIM(token) {
let im=app.globalData.im
return new Promise((resolve, reject) => {
im.connect({
token: token,
appkey: 'your key',token:token,
qiniuHost: 'https://upload.qiniup.com'
}).then(user => {
console.log('鏈接成功, 鏈接用戶 id 為: ', user.id);
resolve("ok")
}).catch(error => {
console.log('鏈接失敗: ', error.code, error.msg);
reject("err")
});
})
},
app.js頁(yè)面
/**im監(jiān)聽(tīng)函數(shù) */
const imMessage=require("./utils/imMessage.js")
monitorIM(im) {
let that=this
// 添加事件監(jiān)聽(tīng)
im.watch({
// 監(jiān)聽(tīng)會(huì)話列表變更事件, 觸發(fā)時(shí)機(jī):會(huì)話狀態(tài)變化(置頂、免打擾)掺出、會(huì)話未讀數(shù)變化(未讀數(shù)增加徽千、未讀數(shù)清空)苫费、會(huì)話 @ 信息、會(huì)話最后一條消息變化
conversation(event) {
// 發(fā)生變更的會(huì)話列表
const updatedConversationList = event.updatedConversationList;
console.log("app.js發(fā)生變更的會(huì)話列表:",event)
},
// 監(jiān)聽(tīng)消息通知
message(event) {
console.log("app.js新接收到的消息內(nèi)容:",event)
// 新接收到的消息內(nèi)容
let message = event.message;
imMessage.$emit({
name: "message",
data: message
})
if(message.messageType=="RC:TxtMsg"){
let allNotRead=String(that.globalData.allNotRead+1)
if(allNotRead>0){
wx.setTabBarBadge({
index: 0,
text: allNotRead
})
}
}
},
// 監(jiān)聽(tīng) IM 連接狀態(tài)變化
status(event) {
console.log("IM 連接狀態(tài)變化:",event)
console.log('connection status:', event.status);
},
// 監(jiān)聽(tīng)聊天室 KV 數(shù)據(jù)變更
chatroom(event) {
console.log("聊天室 KV 存儲(chǔ)數(shù)據(jù)更新:",event)
/**
* 聊天室 KV 存儲(chǔ)數(shù)據(jù)更新
* @example
* [
* {
* "key": "name",
* "value": "我是小融融",
* "timestamp": 1597591258338,
* "chatroomId": "z002",
* "type": 1 // 1: 更新( 含:修改和新增 )双抽、2: 刪除
* },
* ]
*/
const updatedEntries = event.updatedEntries
},
expansion(event) {
console.log("更新的消息拓展數(shù)據(jù):",event)
/**
* 更新的消息拓展數(shù)據(jù)
* @example {
* expansion: { key: 'value' }, // 設(shè)置或更新的擴(kuò)展值
* messageUId: 'URIT-URIT-ODMF-DURR' // 設(shè)置或更新擴(kuò)展的消息 uid
* }
*/
const updatedExpansion = event.updatedExpansion;
/**
* 刪除的消息拓展數(shù)據(jù)
* @example {
* deletedKeys: ['key1', 'key2'], // 設(shè)置或更新的擴(kuò)展值
* messageUId: 'URIT-URIT-ODMF-DURR' // 設(shè)置或更新擴(kuò)展的消息 uid
* }
*/
const deletedExpansion = event.deletedExpansion;
}
});
},
imMessage.js
全局監(jiān)聽(tīng)黍衙,進(jìn)行分發(fā)消息,在開(kāi)放社區(qū)找到的一位大佬寫(xiě)的全局監(jiān)聽(tīng)荠诬,可以直接使用
var event = {};
//接收消息 傳入params={name:"string 監(jiān)聽(tīng)事件名",success:"function 監(jiān)聽(tīng)事件回調(diào)",tg:"當(dāng)前頁(yè)面或App.js 傳入this即可"}
const $on = function(params) {
if (!params) {
return false;
}
if (!params.name) {
console.error("事件監(jiān)聽(tīng)未設(shè)置名稱 屬性key=name");
return false;
}
if (!params.success) {
console.error("事件監(jiān)聽(tīng)未設(shè)置回調(diào)函數(shù) 屬性key=success");
return false;
}
if (!params.tg) {
console.error("事件監(jiān)聽(tīng)未設(shè)置目標(biāo)對(duì)象 屬性key=tg");
return false;
}
if (event[params.name]) {
var list = event[params.name];
list.push([params.tg, params.success]);
} else {
event[params.name] = [
[params.tg, params.success]
];
}
pageStatus(params.tg);
}
const $emit = function(params) {
if (!params) {
return false;
}
if (!params.name) {
console.error("事件發(fā)送未設(shè)置名稱 屬性key=name");
return false;
}
if (event[params.name]) {
var list = event[params.name];
list.forEach(item => {
item[1].call(item[0], params.data);
})
}
}
const $remove = function(params) {
if (!params) {
return false;
}
if (!params.tg) {
console.error("事件監(jiān)聽(tīng)未設(shè)置目標(biāo)對(duì)象 屬性key=tg");
return false;
}
if (params.name && event[params.name]) {
console.log("手動(dòng)卸載琅翻,監(jiān)聽(tīng)移除1")
event[params.name] = event[params.name].filter(a => {
return a[0] != params.tg;
})
} else {
console.log("頁(yè)面卸載,監(jiān)聽(tīng)移除2")
// return false
for (let key in event) {
event[key] = event[key].filter(a => {
return a[0] != params.tg;
})
}
}
}
const pageStatus = function(self) {
if (self["onUnload"]) {
var s = self["onUnload"];
self["onUnload"] = function(a) {
s.call(this, a);
$remove({
tg: this
});
}
} else {
self["onUnload"] = function() {
$remove({
tg: this
});
}
}
}
exports.$on = $on;
exports.$emit = $emit;
exports.$remove = $remove;
使用
例如在index頁(yè)面需要監(jiān)聽(tīng)融云傳來(lái)的消息柑贞,就可以進(jìn)行后續(xù)自定義的邏輯了
imMessage.$on({
name: "message",
tg: this,
success: (res) => {
console.log("index頁(yè)面收到消息了", res);
}
})