上一篇簡要主要介紹了融雲制作聊天室的基本方法,這次基本屬於對上一篇的補充以及進階...^_^...
(ps:吐槽一下,加了三個融雲的線下qq群,全部沒人解決問題,也不知道建此群的意義,若是民間的話就當我沒說,若是融雲的工作人員的話,那這做的確實有些糙。反正我是那種給我文檔我可能還要懵B的人,而且web這一塊的文檔真心不算很友好!!!)
根據需求,聊天室已經創建出來了,可是需求不會一成不變,上面又下達了需要根據直播人的行為來改變觀看人狀態的事(簡單點說就是,直播的點一個按鈕,看直播的這邊即時增加一個按鈕出來)
了解需求后,首先想到的是創建長連接來達成,可后來發現利用融雲的消息監聽功能可以不錯的完成這個功能。
1.小灰條
官方給出的是這樣的,然后我就
var msg = new InformationNotificationMessage('小灰條'); RongIMClient.getInstance().sendMessage(conversationType,targetId, msg, { onSuccess: function (message) { // do something... }, onError: function (errorCode) {
// do something... } })
so:
然后又去api里查也沒有給出個方法,不過最后還是找到類似的方法,替換下方法名即可。
var msg = new RongIMLib.InformationNotificationMessage({"message": "命令"}); var conversationtype = RongIMLib.ConversationType.CHATROOM;//聊天室 var targetId = "xxx"; // xxx聊天室Id RongIMClient.getInstance().sendMessage(conversationType,targetId, msg, { onSuccess: function (message) { // do something... }, onError: function (errorCode) { // do something... } })
之后在消息監聽器中找到對應方法進行事件處理
// 消息監聽器 RongIMClient.setOnReceiveMessageListener({ // 接收到的消息 onReceived: function (message) { // 判斷消息類型 switch(message.messageType){ case RongIMClient.MessageType.TextMessage: // 發送的消息內容將會被打印 //console.log(message.content.content); console.log('收到發送的消息') break; case RongIMClient.MessageType.VoiceMessage: // 對聲音進行預加載 // message.content.content 格式為 AMR 格式的 base64 碼 RongIMLib.RongIMVoice.preLoaded(message.content.content); break; case RongIMClient.MessageType.ImageMessage: // do something... break; case RongIMClient.MessageType.DiscussionNotificationMessage: // do something... break; case RongIMClient.MessageType.LocationMessage: // do something... break; case RongIMClient.MessageType.RichContentMessage: // do something... break; case RongIMClient.MessageType.DiscussionNotificationMessage: // do something... break; case RongIMClient.MessageType.InformationNotificationMessage: // do something... console.log('收到小灰條信息') break; case RongIMClient.MessageType.ContactNotificationMessage: // do something... break; case RongIMClient.MessageType.ProfileNotificationMessage: // do something... break; case RongIMClient.MessageType.CommandNotificationMessage: // do something... break; case RongIMClient.MessageType.CommandMessage: // do something... break; case RongIMClient.MessageType.UnknownMessage: // do something... break; case RongIMClient.RegisterMessage.PersonMessage: // do something... break; default: // 自定義消息 // do something... } } });
2.自定義消息
自定義消息官方還是給了足夠多的解釋的,這里就簡單梳理一下
首先,創建消息
//創建消息 var messageName = "PersonMessage"; // 消息名稱。 var objectName = "s:person"; // 消息內置名稱,請按照此格式命名。 var mesasgeTag = new RongIMLib.MessageTag(true,true);// 消息是否保存是否計數,true true 保存且計數,false false 不保存不計數。 var propertys = ["name","age"]; // 消息類中的屬性名。 RongIMClient.registerMessageType(messageName,objectName,mesasgeTag,propertys); var conversationType = RongIMLib.ConversationType.CHATROOM; //聊天室,其他會話選擇相應的消息類型即可。 var targetId = "xxx"; // 想獲取自己和誰的歷史消息,targetId 賦值為對方的 Id。
之后,在事件中觸發
//發送消息 var msg = new RongIMClient.RegisterMessage.PersonMessage({name:"zhang",age:12}); RongIMClient.getInstance().sendMessage(conversationType,targetId, msg, { onSuccess: function (message) { }, onError: function (errorCode) { } })
這里需要注意的是,不僅需要在直播方創建消息,在觀看方同樣需要創建,而上面說到的小灰條則只在直播方或者管理者創建就可以...
發送完信息后,接受信息的地方同時需要更改
// 消息監聽器 RongIMClient.setOnReceiveMessageListener({ // 接收到的消息 onReceived: function (message) { // 判斷消息類型 switch(message.messageType){ case RongIMClient.MessageType.TextMessage: // 發送的消息內容將會被打印 //console.log(message.content.content); $('.list').prepend('<li>'+message.content.content+'</li>'); console.log('收到信息') break; case RongIMClient.MessageType.VoiceMessage: // 對聲音進行預加載 // message.content.content 格式為 AMR 格式的 base64 碼 RongIMLib.RongIMVoice.preLoaded(message.content.content); break; case RongIMClient.MessageType.ImageMessage: // do something... break; case RongIMClient.MessageType.DiscussionNotificationMessage: // do something... break; case RongIMClient.MessageType.LocationMessage: // do something... break; case RongIMClient.MessageType.RichContentMessage: // do something... break; case RongIMClient.MessageType.DiscussionNotificationMessage: // do something... break; case RongIMClient.MessageType.InformationNotificationMessage: // do something... console.log('收到小灰條') break; case RongIMClient.MessageType.ContactNotificationMessage: // do something... break; case RongIMClient.MessageType.ProfileNotificationMessage: // do something... break; case RongIMClient.MessageType.CommandNotificationMessage: // do something... break; case RongIMClient.MessageType.CommandMessage: // do something... break; case RongIMClient.MessageType.UnknownMessage: // do something... break; case RongIMClient.MessageType.PersonMessage: // do something... //這里看清上面是PersonMessage,即創建消息時候所創建的消息名稱 console.log('自定義消息') break; default: // 自定義消息 // do something... } } });
基本上就是這些了,如果在閱讀過程中遇到任何問題,歡迎指正...
本文地址:http://www.cnblogs.com/bbbiu/p/6895016.html
小人持器,叫囂不停;君子藏器,待機而動;國有利器,不示於人