高级功能

阅后即焚

阅后即焚(暂时只支持单聊)可以参考自定义消息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();