? 發送文本\圖片\附件 — 我們假設Tony給John發送消息,示例代碼如下(參考Demo中IM. DO_sendMsg):
//新建消息體對象 var obj = new RL_YTX.MsgBuilder(); //設置自定義消息id obj.setId(msgid); //假設頁面存在一個id為file的<input type=”file”>元素 //獲取圖片或附件對象 var file = document.getElementById("file").files[0]; //設置圖片或附件對象 obj.setFile(file); //設置發送的文本內容 obj.setText(text); //設置發送的消息類型1:文本消息 4:圖片消息 6:壓縮文件 7:非壓縮文件 //發送非文本消息時,text字段將被忽略,發送文本消息時 file字段將被忽略 obj.setType(1); //設置接收者 obj.setReceiver(“john的id”); RL_YTX.sendMsg(obj, function(){ //發送消息成功 //處理用戶邏輯,通知頁面 }, function(obj){//失敗 //發送消息失敗 //處理用戶邏輯,通知頁面刷新,展現重發按鈕 }, function(sended, total){ //發送圖片或附件時的進度條 //如果發送文本消息,可以不傳該參數 });
? 接收消息 — 我們假設John收到Tony發送過來的消息,示例代碼如下(參考Demo中IM. EV_onMsgReceiveListener):
//獲取發送者為 var sender = obj.msgSender; //獲取發送者昵稱,如果不存在,使用賬號代替 var you_senderNickName = obj.senderNickName; var name = obj.msgSender; if(!!you_senderNickName){ name = you_senderNickName; } var content_type = null; //獲取消息版本號 var version = obj.version; //獲取消息發送時間 var time = obj.msgDateCreated; //獲取消息類型 //1:文本消息 2:語音消息4:圖片消息6:文件 var msgType = obj.msgType; if(1 == msgType || 0 == msgType){ //文本消息,獲取消息內容 var you_msgContent = obj.msgContent; }else if(2 == msgType){ //語音消息,獲取語音文件url var url = obj.msgFileUrl; }else if(3 == msgType){ //3:視頻消息,獲取視頻url //語音消息,獲取語音文件url var url = obj.msgFileUrl; }else if(4 == msgType){ //圖片消息 獲取圖片url var url = obj.msgFileUrl; }else{ //后續還會支持(地理位置,視頻,以及自定義消息等) } //通知前端更新頁面
? 閱后即焚 — 我們假設John要刪除Tony發送過來的消息,示例代碼如下(參考Demo中IM. DO_showFireMsg):
var deleteReadMsgBuilder = new RL_YTX.DeleteReadMsgBuilder(); deleteReadMsgBuilder.setMsgid(john接收到的msgid); RL_YTX.deleteReadMsg(deleteReadMsgBuilder,function(obj){ console.log("閱后即焚消息通知主叫側成功"); },function(obj){ console.log("閱后即焚消息通知主叫側失敗") alert(obj.code) });
? 閱后即焚操作通知 — 當john刪除了Tony發送的消息時,tony會收到閱后即焚操作通知,示例代碼如下(參考demo中IM._onMsgNotifyReceiveListener):
IM._onMsgNotifyReceiveListener = RL_YTX.onMsgNotifyReceiveListener(function(obj){ if(obj.msgType == 21 ){ console.log("接收方已刪除閱后即焚消息obj.msgId="+obj.msgId); var id = obj.sender+"_"+obj.msgId; $(document.getElementById(id)).remove(); } });
? 獲取輸入狀態
1、當John給Tony發消息:John將光標定位在輸入框的時候,如果有選中的當前聯系人Tony
var result = IM.Do_boxCheck(bOn); if (result != null) { // 發送消息至服務器 if ("C" == result[3]) { IM.EV_sendTextMsg(result[0], domain, result[2], false, IM._transfer); } }
2、當Tony收到這個正在輸入的狀態消息時,判斷如果msgType等于12的時候,說明這是個輸入狀態的消息監聽,通過msgDomain來判斷狀態
RL_YTX.onMsgReceiveListener(function(obj){ if(obj.msgType == 12){ if (obj.msgDomain == 1) { //正在輸入…… return; } else if (obj.msgDomain == 0) { //非任何輸入狀態 return; } else if (obj.msgDomain == 2) { //正在錄音; return; } } IM.DO_push_createMsgDiv(obj); })
? 發送文本\圖片\附件 — 我們假設Tony給群組名為”出彩中國人”發送消息,示例代碼如下(參考Demo中IM. DO_sendMsg):
//新建消息體對象 var obj = new RL_YTX.MsgBuilder(); //設置自定義消息id obj.setId(msgid); //假設頁面存在一個id為file的<input type=”file”>元素 //獲取圖片或附件對象 var file = document.getElementById("file").files[0]; //設置圖片或附件對象 obj.setFile(file); //設置發送的文本內容 obj.setText(text); //設置發送的消息類型1文本消息4 圖片消息6 附件消息 //發送非文本消息時,text字段將被忽略,發送文本消息時 file字段將被忽略 obj.setType(1); //設置接收者 obj.setReceiver(“出彩中國人的群組id”); RL_YTX.sendMsg(obj, function(){ //發送消息成功 //處理用戶邏輯,通知頁面 }, function(obj){//失敗 //發送消息失敗 //處理用戶邏輯,通知頁面刷新,展現重發按鈕 }, function(sended, total){ //發送圖片或附件時的進度條 //如果發送文本消息,可以不傳該參數 });
? 接收消息 — 我們假設John收到群組”出彩中國人”發送過來的消息,示例代碼如下(參考Demo中IM. EV_onMsgReceiveListener):
//獲取發送者 var you_sender = (b_isGroupMsg) ? obj.msgReceiver : obj.msgSender; //獲取發送者昵稱,如果不存在,使用賬號代替 var you_senderNickName = obj.senderNickName; var name = obj.msgSender; if(!!you_senderNickName){ name = you_senderNickName; } var content_type = null; //獲取消息版本號 var version = obj.version; //獲取消息發送時間 var time = obj.msgDateCreated; //獲取消息類型 //1:文本消息 2:語音消息 4:圖片消息6:文件 var msgType = obj.msgType; if(1 == msgType || 0 == msgType){ //文本消息,獲取消息內容 var you_msgContent = obj.msgContent; }else if(2 == msgType){ //語音消息,獲取語音文件url var url = obj.msgFileUrl; }else if(3 == msgType){ //3:視頻消息,獲取視頻url //語音消息,獲取語音文件url var url = obj.msgFileUrl; }else if(4 == msgType){ //圖片消息 獲取圖片url var url = obj.msgFileUrl; }else{ //后續還會支持(地理位置,視頻,以及自定義消息等) } //通知前端更新頁面
? 創建群組 — 我們假設Tony要創建一個名為"出彩中國人",示例代碼如下(參考Demo中IM. EV_createGroup):
//新建創建群組對象 var obj = new RL_YTX.CreateGroupBuilder(); //設置群組名稱 obj.setGroupName(“出彩中國人”); //設置群組公告 obj. setDeclared(“歡迎體驗云通訊群組功能”); // 設置群組類型,如:1臨時群組(100人) obj. setScope(1); // 設置群組驗證權限,如:需要身份驗證2 obj. setPermission(2); //設置為討論組 該字段默認為2 表示群組,創建討論組時設置為1 obj.setTarget(1); //發送消息 RL_YTX.createGroup(obj, function(obj){ //獲取新建群組id var groupId = obj.data; //更新頁面 }, function(obj){ //創建群組失敗 });
? 主動加入群組 — 只要知道群組id,就可以主動加入群組,討論組不可以主動加入。
1、我們假設"出彩中國人"群組已經有Tony和John兩位成員,現在Smith要加入"出彩中國人"群組,示例代碼如下:
var builder= new RL_YTX.JoinGroupBuilder(); //設置申請群組id builder.setGroupId(“出彩中國人群組id”); //設置申請理由 builder.setDeclared(“申請理由”); //發送請求 RL_YTX.joinGroup(builder, function(){ //操作成功 },function(obj){ //操作失敗 });
注意:
如果群組"出彩中國人"是公開群組,則smith直接被允許加入。如果群組"出彩中國人"是私有群組,則smith加入需要群主Tony的的同意。
Tony首先收到Smith加入的請求,示例代碼如下(參考DEMO中IM. EV_noticeReceiveListener):
//獲取群組id var groupId = obj.groupId; //獲取群組名稱 var groupName = obj.groupName; //獲取申請者id var peopleId = obj.member; //獲取申請者名稱 var people = (!!obj.memberName)?obj.memberName:obj.member; //1,(1申請加入群組,2邀請加入群組,3直接加入群組,4解散群組,5退出群組,6踢出群組,7確認申請加入,8確認邀請結果,10管理員修改群組信息,11用戶修改群組成員名片) var auditType = obj.auditType; if(1 == auditType){ //處理申請加入通知 }
Tony同意Smith加入的請求,示例代碼如下(參考IM. EV_confirmJoinGroup):
//新建同意加入請求對象 var obj = new RL_YTX.ConfirmJoinGroupBuilder(); //設置群組id obj.setGroupId(“出彩中國人群組id”); //設置申請者賬號 obj.setMemberId(“Smith賬號”); //設置同意或拒絕 1拒絕 2同意 obj.setConfirm(2); //發送請求 RL_YTX.confirmJoinGroup(obj, function(){ //處理成功 }, function(obj){ //處理失敗 });
2、Smith加入成功后,群組中成員John收到的通知回調方法示例代碼如下(參考DEMO中IM. EV_noticeReceiveListener):
//獲取群組id var groupId = obj.groupId; //獲取群組名稱 var groupName = obj.groupName; //獲取加入者id var peopleId = obj.member; //獲取加入者名稱 var people = (!!obj.memberName)?obj.memberName:obj.member; //1,(1申請加入群組,2邀請加入群組,3直接加入群組,4解散群組,5退出群組,6踢出群組,7確認申請加入,8確認邀請結果,10管理員修改群組信息,11用戶修改群組成員名片) var auditType = obj.auditType; if(7 == auditType){ //處理某人加入群組通知 }
? 邀請加入群組 — 群組時只能群主邀請別人加入,討論組時任意用戶可以邀請別人加入,且討論組時無需對方同意。我們假設"出彩中國人"群組的創建者Tony邀請Smith加入群組,示例代碼如下(參考Demo中IM. EV_inviteGroupMember):
var builder = new RL_YTX.InviteJoinGroupBuilder(); builder. setGroupId(“出彩中國人群組id”); builder. setMembers([“Smith的賬號”]); //是否需要對方確認(1不需要直接加入,2需要) var confirm = 2; builder. setConfirm(confirm); //發送邀請 RL_YTX.inviteJoinGroup(builder,function(){ //邀請成功 If(confirm == 1){ //更新頁面群組成員列表 } //等待被邀請者同意 },function(obj){ //邀請成員失敗 })
注意:
1、如果Tony邀請Smith加入的時候,接口參數指定不加入需要Smith確認,則smith直接被邀請加入。如果指定需要Smith同意才能加入,則Smith收到如下通知回調,并在回調里面回復"同意"或"拒絕"加入。示例代碼如下(參考DEMO中IM. EV_noticeReceiveListener):
//獲取群組id var groupId = obj.groupId; //獲取群組名稱 var groupName = obj.groupName; //獲取邀請者id var peopleId = obj.member; //獲取邀請者名稱 var people = (!!obj.memberName)?obj.memberName:obj.member; //1,(1申請加入群組,2邀請加入群組,3直接加入群組,4解散群組,5退出群組,6踢出群組,7確認申請加入,8確認邀請結果,10管理員修改群組信息,11用戶修改群組成員名片) var auditType = obj.auditType; if(2 == auditType){ if(1 == obj.confirm){ //直接加入群組,更新成員列表 }else{ // 處理邀請加入群組請求通知 } }
2、Smith加入成功后,群組中成員John收到的通知回調方法,示例代碼如下(參考DEMO中IM. EV_noticeReceiveListener):
//獲取群組id var groupId = obj.groupId; //獲取群組名稱 var groupName = obj.groupName; //獲取加入成員id var peopleId = obj.member; //獲取加入成員名稱 var people = (!!obj.memberName)?obj.memberName:obj.member; //1,(1申請加入群組,2邀請加入群組,3直接加入群組,4解散群組,5退出群組,6踢出群組,7確認申請加入,8確認邀請結果,10管理員修改群組信息,11用戶修改群組成員名片) var auditType = obj.auditType; if(8 == auditType){ if(2 != obj.confirm){ //拒絕管理員邀請,通知頁面 }else{ //同意管理員邀請,通知頁面 } }
? 退出群組
1、我們假設Smith要退出群組,示例代碼如下(參考DEMO中IM. EV_quitGroup):
//新建退出群組請求對象 var obj = new RL_YTX.QuitGroupBuilder(); //設置群組id obj.setGroupId(“出彩中國人群組id”); //發送請求 RL_YTX.quitGroup(obj, function(){ //退出群組成功 //更新頁面 }, function(obj){ //退出群組失敗 });
2、Smith退出成功后,群組中成員Tony和John收到的通知回調方法示例代碼如下 (參考Demo中的IM. EV_noticeReceiveListener) :
//獲取群組id var groupId = obj.groupId; //獲取群組名稱 var groupName = obj.groupName; //獲取退出 者id var peopleId = obj.member; //獲取退出者名稱 var people = (!!obj.memberName)?obj.memberName:obj.member; //1,(1申請加入群組,2邀請加入群組,3直接加入群組,4解散群組,5退出群組,6踢出群組,7確認申請加入,8確認邀請結果,10管理員修改群組信息,11用戶修改群組成員名片) var auditType = obj.auditType; if(5 == auditType){ //有用戶退出群組,更新列表 }
? 群主踢人
1、我們假設群主Tony要把Smith要踢出群組”出彩中國人”,示例代碼如下(參考DEMO中IM. EV_deleteGroupMember):
//構建踢出用戶請求對象 var builder = new RL_YTX.DeleteGroupMemberBuilder(groupId,memberId); builder.setGroupId(“出彩中國人群組id”); builder.setMemberId(“Smith賬號”); RL_YTX.deleteGroupMember(builder, function(){ //踢出成功 },function(obj){ //踢出失敗 });
2、群組中所有成員除管理員外都會收到的Smith被踢的消息,包括Smith自己,Smith判斷被踢用戶的id等于自己,則從本地刪除群組,此通知回調方法示例代碼如下 (參考Demo中的IM. EV_noticeReceiveListener) :
//獲取群組id var groupId = obj.groupId; //獲取群組名稱 var groupName = obj.groupName; //獲取被踢出者id var peopleId = obj.member; //被踢出者名稱 var people = (!!obj.memberName)?obj.memberName:obj.member; //1,(1申請加入群組,2邀請加入群組,3直接加入群組,4解散群組,5退出群組,6踢出群組,7確認申請加入,8確認邀請結果,10管理員修改群組信息,11用戶修改群組成員名片) var auditType = obj.auditType; if(6 == auditType){ if(“Smith賬號”.equals(“peopleId”)){ //是自己,更新群組列表 }else{ //更新群組成員列表 } }
? 解散群組 — 只有群主才能解散群組,討論組不能被解散
1、我們假設群主Tony要解散"出彩中國人",示例代碼如下:
//構建解散群組消息對象 var obj = new RL_YTX.DismissGroupBuilder(); obj.setGroupId(“出彩中國人群組id”); RL_YTX.dismissGroup(obj, function(){ //解散成功,更新頁面 }, function(obj){ //解散失敗 });
2、群組中所有成員收到的通知回調方法代碼如下(參考Demo中的IM. EV_noticeReceiveListener) :
//獲取群組id var groupId = obj.groupId; //獲取群組名稱 var groupName = obj.groupName; //獲取操作者id var peopleId = obj.member; //獲取操作者名稱 var people = (!!obj.memberName)?obj.memberName:obj.member; //1,(1申請加入群組,2邀請加入群組,3直接加入群組,4解散群組,5退出群組,6踢出群組,7確認申請加入,8確認邀請結果,10管理員修改群組信息,11用戶修改群組成員名片) var auditType = obj.auditType; if(4 == auditType){ //更新頁面 }
? 獲取群組成員 — 示例代碼如下(參考Demo中的IM. EV_getGroupMemberList):
//新建獲取群組成員列表請求對象 var obj = new RL_YTX.GetGroupMemberListBuilder(); //設置群組id obj.setGroupId(“出彩中國人群組id”); //該接口為分頁接口,如果要獲取全部數據,設置pageSize為-1 obj.setPageSize(-1); //發送請求 RL_YTX.getGroupMemberList(obj, function(obj){ //成功獲取數據,更新頁面 }, function(obj){ //獲取數據失敗 });
? 群組搜索 — 可以根據群組名字或者群組ID來搜索群組,討論組不可被搜索,示例代碼如下:
var builder = new RL_YTX.SearchGroupsBuilder(type,key); //搜索類型 1群組id精確查找 2 群組名稱模糊搜索 builder.setType(1); builder. setKeywords(“出彩中國人群組id”); RL_YTX.searchGroups(builder, function(obj){ //檢索成功 },function(obj){ //檢索失敗 });
? 群組免打擾 — 群組免打擾功能是指群組收到消息的時候,是否震動手機或振鈴(震動或振鈴是在應用層處理,通過sdk可以設置此狀態并保存在服務端,切換手機時,群組的狀態也可同步)。示例代碼如下(參考DEMO中IM.EV_groupPersonalization):
//新建設置群組個性化設置對象 var builder = new RL_YTX.SetGroupMessageRuleBuilder(); //設置群組id builder.setGroupId(“出彩中國人群組id”); //設置免打擾 1提醒 2免打擾 builder.setIsNotice(2); RL_YTX.setGroupMessageRule(builder,function(){ //設置免打擾成功 },function(obj){ //設置免打擾失敗 });
? 獲取個人所在的群組 — 用戶登錄后,通常首先調取此接口獲取自己所在群組,此接口會返回群組的id、名稱、免打擾狀態等信息,示例代碼如下(參考Demo中的IM. EV_getGroupList) :
//新建獲取群組列表請求對象 var obj = new RL_YTX.GetGroupListBuilder(); //設置獲取群組數量,該接口為分頁接口,如果要獲取全部數據,設置pageSize為-1 obj.setPageSize(-1); obj.setTarget(2); //獲取群組列表。默認為群組列表,如果要獲取討論組列表,該值傳1。 RL_YTX.getGroupList(obj, function(obj){ //更新頁面 }, function(obj){ //獲取群組列表失敗 });
? 群主轉讓功能
/* * 轉讓群組 * @groupId 群組ID * @member 轉讓給的成員 * @role 角色 1轉讓群主 2 設為管理員 3 取消管理員資格 * */ var roleBuilder = new RL_YTX.SetGroupMemberRoleBuilder(); roleBuilder.setGroupId(groupId); roleBuilder.setMemberId(member); roleBuilder.setRole(role); RL_YTX.setGroupMemberRole(roleBuilder, function() { var trobj = $('#pop').find('tr[contact_you="' + member + '"]'); var tdobj = trobj.children(); var spanobj = tdobj.children(); var deleobj = spanobj[3]; $(deleobj).remove(); console.log("修改成員角色成功"); if (role == 1) { IM.HTML_pop_hide(); } else if (role == 2) { $(spanobj).eq(0).children("span").text("[管理員]"); $(spanobj).eq(2).after(' 取消管理員資格 '); } else { $(spanobj).eq(0).children("span").text("[成員]"); $(spanobj).eq(2).after(' 設置為管理員 '); } }, function(obj) { alert("錯誤碼: " + obj.code + "; 錯誤描述:" + obj.msg); });
現在離線消息的拉取都是sdk底層處理的,客戶只要實現接收消息的通知回調即可,示例代碼如下(參考Demo中IM. EV_onMsgReceiveListener):
//判斷是否為群聊信息 var b_isGroupMsg = ('g' == obj.msgReceiver.substr(0,1)); //如果是群聊信息,發送者為msgSender字段,否則為msgReceiver字段 var you_sender = (b_isGroupMsg) ? obj.msgReceiver : obj.msgSender; //獲取發送者昵稱,如果不存在,使用賬號代替 var you_senderNickName = obj.senderNickName; var name = obj.msgSender; if(!!you_senderNickName){ name = you_senderNickName; } var content_type = null; //獲取消息版本號 var version = obj.version; //獲取消息發送時間 var time = obj.msgDateCreated; //獲取消息類型 //1:文本消息 2:語音消息 3:視頻消息4:圖片消息5:位置消息 6:文件 var msgType = obj.msgType; if(1 == msgType || 0 == msgType){ //文本消息,獲取消息內容 var you_msgContent = obj.msgContent; }else if(2 == msgType){ //語音消息,獲取語音文件url var url = obj.msgFileUrl; }else if(3 == msgType){ //3:視頻消息,獲取視頻url //語音消息,獲取語音文件url var url = obj.msgFileUrl; }else if(4 == msgType){ //圖片消息 獲取圖片url var url = obj.msgFileUrl; }else{ //后續還會支持(地理位置,視頻,以及自定義消息等) }
自定義消息通過發送文本消系接口擴展字段來實現,示例代碼如下:
//新建消息體對象 var obj = new RL_YTX.MsgBuilder(); //設置自定義消息id obj.setId(msgid); //設置接收者 obj.setReceiver(“john的id”); obj.setDomain(“用戶自定義消息”); RL_YTX.sendMsg(obj, function(){ //發送消息成功 //處理用戶邏輯,通知頁面 }, function(obj){//失敗 //發送消息失敗 //處理用戶邏輯,通知頁面刷新,展現重發按鈕 });
? 獲取個人信息 — 可以通過接口設置個人信息,包括昵稱、生日、性別,昵稱必須設置,以便在推送消息的時候使用,示例代碼如下(參考Demo中IM.EV_getMyInfo):
RL_YTX.getMyInfo(function(obj){ //獲取用戶名 if(!!obj&& !!obj.nickName){ IM._username = obj.nickName; } //通知頁面更新 $('#navbar_login_show').find('a[imtype="navbar_login_show"]').html('您好:'+ IM._username); }, function(obj){ //獲取數據失敗 });
? 設置個人信息 — 可以通過接口設置個人信息,包括昵稱、生日、性別,昵稱必須設置,以便在推送消息的時候使用,示例代碼如下:
var uploadPersonInfoBuilder = new RL_YTX.UploadPersonInfoBuilder(); uploadPersonInfoBuilder.setNickName(‘張三’); uploadPersonInfoBuilder.setSex(1); uploadPersonInfoBuilder.setBirth(‘1990-01-01’); uploadPersonInfoBuilder.setSign(‘個性簽名’); RL_YTX.uploadPerfonInfo(uploadPersonInfoBuilder, function(obj){ //設置成功 obj.version;//個人信息版本號 }, function(resp){ //設置失敗 alert(resp.code); });
? 錄音(暫緩提供)
1、準備并開始錄音 — 我們假設John想給smith發語音消息,調用RL_YTX.audio.apply方法,程序就會初始化并開始錄音。示例代碼如下(參考DEMO中IM. DO_startRecorder):
var objTag = {}; var audio = document.getElementById("audio"); //tag屬性表示頁面上一個audio元素的dom引用,用來表示語音 objTag.tag = audio; //當媒體流準備就緒以后,會觸發onCanPlay回調,觸發該回調以后才會真正開始錄音 var onCanPlay = function(){ }; //準備失敗 var onErr = function(errObj){ console.log("錯誤碼:"+errObj.code+";錯誤描述:"+errObj.msg); }; RL_YTX.audio.apply(objTag,onCanPlay,onErr);
2、錄音完成 — 當John調用RL_YTX.audio.apply方法成功之后,就已經開始錄音,當用戶錄音完成以后,可以調用RL_YTX.audio.make方法結束錄音,示例代碼如下(參考DEMO中IM. DO_endRecorder):
var resultObj = RL_YTX.audio.make(); //錄音成功 if("200" == resultObj.code){ var blob = resultObj.blob; //音頻的blob對象 var url = blob.url; //音頻資源url, 供audio標簽展示 //展示音頻 //發送消息 var obj = new RL_YTX.MsgBuilder(); //設置音頻信息 obj.setFile(blob); …. }
3、取消錄音 — 當John調用RL_YTX.audio.apply方法成功之后,想取消錄音,可以調用RL_YTX.audio.cancel取消,示例代碼如下(參考DEMO中IM. EV_cancel):
RL_YTX.audio.cancel(); //更新頁面
? 拍照
1、準備拍照 — 我們假設John想調用攝像頭拍張照片發給Smith,在執行拍照之前,需要先調用RL_YTX.photo.apply方法,示例代碼如下(參考DEMO中IM. DO_takePicture):
var objTag = {}; var video = document.getElementById("video"); //tag屬性表示頁面上一個view元素的dom引用,用來表示視頻圖像 objTag.tag = video; //當媒體流準備就緒以后,會觸發onCanPlay回調,觸發該回調以后點擊拍照才會有真實的圖像 var onCanPlay = function(){ }; //準備失敗 var onErr = function(errObj){ console.log("錯誤碼:"+errObj.code+";錯誤描述:"+errObj.msg); }; RL_YTX.photo.apply(objTag,onCanPlay,onErr);
2、拍照 — 當John調用RL_YTX.photo.apply方法成功之后,就可以進行拍照操作了,示例代碼如下(參考DEMO中IM. DO _snapshot):
var resultObj = RL_YTX.photo.make(); //拍照成功 if("200" == resultObj.code){ var blob = resultObj.blob; //圖片的blob對象 var url = blob.url; //圖片資源url, 供img標簽展示 //展示圖片 //發送消息 var obj = new RL_YTX.MsgBuilder(); //設置圖片信息 obj.setFile(blob); …. }
3、取消拍照 — 當John調用RL_YTX.photo.apply方法成功之后,想取消拍照,可以調用RL_YTX.phtot.cancel取消,示例代碼如下(參考DEMO中IM. _cancelTakePic):
RL_YTX.photo.cancel(); //更新頁面
? 獲取用戶在線狀態
獲取用戶狀態返回的對象由單個對象變為數組對象,并且支持一次性獲取多個。 需增加字段,且獲取用戶狀態的賬號為數組類型傳入,并設置setNewUserstate為true
var getUserStateBuilder = new RL_YTX.GetUserStateBuilder(); getUserStateBuilder.setNewUserstate(true);//使用新SDK的用戶狀態 getUserStateBuilder.setUseracc(“John賬號”); var onlineState = $(current_contact).find('span[contact_style_type="onlineState"]'); RL_YTX.getUserState(getUserStateBuilder, function(obj) { //獲取成功 //obj[i].useracc 對方賬號 //obj[i].state 對方在線狀態1:在線2:離線當用戶為離線狀態時,obj.state,obj.network和obj.device為undefined //obj[i].network對方網絡狀態 1:WIFI 2:4G 3:3G 4:2G(EDGE) 5: INTERNET 6: other //obj[i].device對方登錄終端1:Android 2:iPhone10:iPad11:Android Pad20:PC 21:H5 alert("錯誤碼:" + obj[0].state + "; 錯誤描述:獲得用戶狀態結果不合法") } }, function(obj) { if (174006 != obj.code) { alert("錯誤碼:" + obj.code + "; 錯誤描述:" + obj.msg) } });
? 解壓縮附件
當發送來的附件類型為6,即為壓縮文件的時候,可以選擇修改附件名稱來直接下載壓縮格式的附件, 也可以通過RL_YTX.getFileSource來獲取解壓縮過后的附件url
if (6 == msgType) { //壓縮文件 僅支持火狐和谷歌瀏覽器 console.log("6 == msgType 發來的壓縮文件"); RL_YTX.getFileSource(url, function(o) {// url = o.url; //成功回調函數,可創建a標簽來下載 }, function(obj) { if (obj.code) { alert(obj.code) } else { alert("錯誤碼:" + obj.code + "; 錯誤描述:" + obj.msg) } })
? 消息撤回
發送撤回消息指令, 此msgid是完整的消息版本號,是sendMsg后返回的msgId,如805588CEEFAB1C55B248DC4ACE7F875A|14 注:目前僅支持一次發送一個消息ID
EV_msgBack: function(msgId, callback) { var MsgBackBuilder = new RL_YTX.MsgBackBuilder(); MsgBackBuilder.setMsgId(msgId); RL_YTX.msgBack(MsgBackBuilder, function(e) { console.log(e); callback(e); }, function(e) { $.scojs_message(e.code + ' : ' + e.msg, $.scojs_message.TYPE_ERROR); }) },
接收者,消息撤回
if(obj.msgType == 25){//消息撤回 var oms = JSON.parse(obj.msgDomain); var id = obj.msgSender+'_'+ oms.dateCreated + '|' +oms.version; console.log(id); console.log($('[data-id="' + id + '"]')); $('[data-id="' + id + '"]').find("pre").html("對方撤回了一條消息"); return ; }
? 消息已讀
此msgid是精簡的消息版本號,是EV_onMsgReceiveListener中obj.version或obj.msgId.split("|")[1] 注:目前僅支持一次發送一個消息ID
EV_msgRead : function(msgId, callback) { var msgReadBuilder = new RL_YTX.MsgReadBuilder(); msgReadBuilder.setVersion(version); RL_YTX.msgRead(msgReadBuilder,function () { if(callback)callback(); },function (err) { if(e.code === 609028){ console.log("not support "); }else{ $.scojs_message(err.code + ' : ' + err.msg, $.scojs_message.TYPE_ERROR); } })
接收者
if(obj.msgType == 24){//消息已讀 var oms = JSON.parse(obj.msgDomain); var id = null; if(!!oms.groupid){//如果存在grouid,則是群組消息的已讀消息, id = oms.groupid+'_'+ oms.msgId; $('[data-id="' + id + '"]').find(".msgRead").html("已讀"); }else{//如果沒有grouid,則是普通消息的已讀消息, id = obj.msgSender+'_'+ oms.msgId; $('[data-id="' + id + '"]').find(".msgRead").html("已讀"); } return ; }
? 消息置頂
EV_SetTopContact:function (user) { if(!user)return ; var setTopContactBuilder = new RL_YTX.SetTopContactBuilder(); setTopContactBuilder.setContact(user.toString());//置頂聯系人的賬號,必須為字符串類型 setTopContactBuilder.setType(1);//設置置頂為1,取消置頂則傳2,類型為number類型 RL_YTX.setTopContact(setTopContactBuilder,function (e) { console.log(e); },function (err) { console.log(err); }); },
? 獲取消息置頂列表
EV_GetTopContact:function () { RL_YTX.getTopContact(function (e) { callback(JSON.parse(e[1])); },function (err) { console.log(err); });
? 播放音頻文件
RL_YTX.getAudioSource(obj.msgFileUrl,function (res) { //成功回調 var audioUrl = res.url; })
文檔更新時間:2017年9月12日