高级功能
阅后即焚
阅后即焚(暂时只支持单聊)可以参考自定义消息domain字段去实现(例如obj.setDomain("fireMessage");)、当接收方收到发送方发送过来的消息、解析domain字段发现是阅后即焚消息,在查看之后可以调用删除阅后即焚消息、通知服务器删除消息,同时发送方会收到消息被删除的通知。
API介绍
方法名:RL_YTX.deleteReadMsg(DeleteReadMsgBuilder, callback, onError)查看API
对象:DeleteReadMsgBuilder
代码示例
我们假设John要删除Tony发送过来的消息(参考Demo中IM. DO_showFireMsg)
- //新建删除消息对象
- var deleteReadMsgBuilder = new RL_YTX.DeleteReadMsgBuilder();
- //设置消息id
- 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();
- }
- });
消息撤回
发送端撤回消息指令, 此msgid是完整的消息版本号,是sendMsg后返回的msgId,如805588CEEFAB1C55B248DC4ACE7F875A|14
注:目前仅支持一次发送一个消息ID
API介绍
方法名:RL_YTX. msgBack (MsgBackBuilder,callback,onError)查看API
对象:MsgBackBuilder
代码示例
- //新建撤回事件对象
- var MsgBackBuilder = new RL_YTX.MsgBackBuilder();
- //设置消息id
- 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);
- })
消息撤回通知
发送者撤回消息,接收者会收到通知,根据消息类型msgtype=25来处理。设置回调参考方法:登录及设置回调
代码示例
- //设置回调
- IM._onMsgNotifyReceiveListener = RL_YTX.onMsgNotifyReceiveListener(function(obj){
- //消息撤回
- 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。
API介绍
方法名:RL_YTX. msgRead (MsgReadBuilder,callbacsk,onError)查看API
对象:MsgReadBuilder
代码示例
- //新建消息已读对象
- 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);
- }
消息已读通知
接收者阅读消息,发送者会收到已读通知,根据消息类型msgtype=24来处理。设置回调参考方法:登录及设置回调
代码示例
- 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;
- }
消息置顶
API介绍
方法名:RL_YTX.setTopContact(setTopContactBuilder,callback,onError)查看API
对象: setTopContactBuilder
代码示例
(参考demo EV_SetTopContact方法)
- var setTopContactBuilder = new RL_YTX.SetTopContactBuilder();
- //置顶联系人的账号,必须为字符串类型
- setTopContactBuilder.setContact(user.toString());
- //设置置顶为1,取消置顶则传2,类型为number类型
- setTopContactBuilder.setType(1);
- //设置置顶
- RL_YTX.setTopContact(setTopContactBuilder,function (e) {
- console.log(e);
- },function (err) {
- console.log(err);
- }
获取消息置顶列表
获取置顶列表用于页面显示。
API介绍
方法名:RL_YTX. getTopContact (callback,onError)查看API
代码示例
- //调用获取消息置顶列表
- RL_YTX.getTopContact(function (e) {
- callback(JSON.parse(e[1]));
- },function (err) {
- console.log(err);
- });
获取用户在线状态
获取用户状态返回的对象由单个对象变为数组对象,并且支持一次性获取多个。
需增加字段,且获取用户状态的账号为数组类型传入,并设置setNewUserstate为true。
API介绍
方法名:RL_YTX. getUserState(GetUserStateBuilder, callback, onError) 查看API
对象:GetUserStateBuilder
代码示例
- //新建用户状态对象
- 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)
- }
- });
拍照
准备拍照
我们假设John想调用摄像头拍张照片发给Smith,在执行拍照之前,需要先调用RL_YTX.photo.apply方法。
API介绍
方法名:RL_YTX.photo.apply(obj, onCanPlay, onError)查看API
代码示例
(参考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);
拍照
当John调用RL_YTX.photo.apply方法成功之后,就可以进行拍照操作了。
API介绍
方法名:RL_YTX.photo.make()查看API
代码示例
(参考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);
- ….
- }
取消拍照
当John调用RL_YTX.photo.apply方法成功之后,想取消拍照,可以调用RL_YTX.phtot.cancel取消,示例代码如下(参考DEMO中IM. _cancelTakePic):
- //更新页面
- RL_YTX.photo.cancel();
解压缩附件
当发送来的附件类型为6,即为压缩文件的时候,可以选择修改附件名称来直接下载压缩格式的附件,也可以通过RL_YTX.getFileSource来获取解压缩过后的附件url。
API介绍
方法名:RL_YTX.getFileSource(url, callback, onError)查看API
- //压缩文件 仅支持火狐和谷歌浏览器
- 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)
- }
播放AMR音频文件
接收到语音文件后,可调用getAudioSource方法来播放amr语音文件。
API介绍
方法名:RL_YTX.getAudioSource(msgFileUrl,callback,onError)查看API
代码示例
- //附件消息
- if(obj.msgType ===2){
- RL_YTX.getAudioSource(obj.msgFileUrl,function (res) {
- //成功回调
- var audioUrl = res.url;
- })
录音(暂缓提供)
准备并开始录音
我们假设John想给smith发语音消息,调用RL_YTX.audio.apply方法,程序就会初始化并开始录音。
API介绍
方法名:RL_YTX.audio.apply(obj, onCanPlay, onError)查看API
代码示例
(参考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);
录音完成
当John调用RL_YTX.audio.apply方法成功之后,就已经开始录音,当用户录音完成以后,可以调用RL_YTX.audio.make方法结束录音。
API介绍
方法名:RL_YTX.audio.make()查看API
代码示例
(参考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);
- //发送消息
- RL_YTX.sendMsg(obj, function(){
- //发送消息成功
- //处理用户逻辑,通知页面
- }, function(obj){//失败
- //发送消息失败
- //处理用户逻辑,通知页面刷新,展现重发按钮
- }
- }
取消录音
当John调用RL_YTX.audio.apply方法成功之后,想取消录音,可以调用RL_YTX.audio.cancel取消,示例代码如下(参考DEMO中IM. EV_cancel)
- //更新页面
- RL_YTX.audio.cancel();