1、单聊

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


                    

2、群聊

✾ 发送文本\图片\附件 — 我们假设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{
	//后续还会支持(地理位置,视频,以及自定义消息等)
}
//通知前端更新页面

                    

3、群组操作

✾ 创建群组 — 我们假设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);
	});


                    

4、离线消息

现在离线消息的拉取都是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{
  //后续还会支持(地理位置,视频,以及自定义消息等)
}

                

5、自定义消息

自定义消息通过发送文本消系接口扩展字段来实现,示例代码如下:

//新建消息体对象
var obj = new RL_YTX.MsgBuilder();
//设置自定义消息id
obj.setId(msgid);
//设置接收者
obj.setReceiver(“john的id”);
obj.setDomain(“用户自定义消息”);
RL_YTX.sendMsg(obj, function(){
//发送消息成功
//处理用户逻辑,通知页面
}, function(obj){//失败
//发送消息失败
//处理用户逻辑,通知页面刷新,展现重发按钮
});

                    

6、辅助接口

✾ 获取个人信息 — 可以通过接口设置个人信息,包括昵称、生日、性别,昵称必须设置,以便在推送消息的时候使用,示例代码如下(参考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日