✾ 发送文本\图片\附件 — 我们假设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日