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