高级功能
阅后即焚
阅后即焚(暂时只支持单聊)可以参考demo通过ECMessage中的扩展userData字段去实现、当接收方收到发送方发送过来的消息、解析userData字段发现是阅后即焚消息,在查看之后可以调用删除阅后即焚消息、通知服务器删除消息,同时发送方会收到消息被删除的通知。
发送自定义消息(userData字段)参考文档 自定义消息。
API介绍
- void deleteMessage(ECMessage delMessage,
- ECChatManager.OnDeleteMessageListener listener)
- 删除消息接口(目前只支持删除接收到的消息)
- 参数:
- delMessage - 需要删除的消息
- listener - 删除消息回调接口
代码示例
- //接收方删除阅后即焚消息
- ECDevice.getECChatManager().deleteMessage("阅后即焚的消息的ECMessage对象", new OnDeleteMessageListener() {
- public void onDeleteMessage(ECError paramECError, ECMessage paramECMessage) {
- //处理删除阅后即焚消息的回调、获取删除消息的结果响应
- }});
阅后即焚通知
发送方收到接收方删除阅后即焚消息的通知(通过实现OnChatReceiveListener中的onReceiveMessageNotify方法可以获取到消息被删除的通知),参考文档:IM接收消息监听
- public void onReceiveMessageNotify(ECMessageNotify msg) {
- if(msg.getNotifyType()==NotifyType.DELETE)
- { //通过if判断代表当前类型是删除阅后即焚的通知
- ECMessageDeleteNotify deleteMsg=(ECMessageDeleteNotify) msg;
- //处理接收方删除阅后即焚消息的通知、比如删除本地图片等
- }
- }
撤回消息
发送消息成功后,如果用户想要撤回此消息时,此接口可以帮用户实现功能。
消息撤回的时长可以自行设置,具体说明参考:消息撤回时长。
API介绍
- void revokeMessage(ECMessage revMessage,
- ECChatManager.OnRevokeMessageListener listener)
- 撤回消息
- 参数:
- revMessage - 需要撤回的消息
- listener - 回调监听
代码示例
- //获取消息发送者管理
- ECChatManager manager = ECDevice.getECChatManager();
- //调用撤回接口
- chatManager.revokeMessage(message, new ECChatManager.OnRevokeMessageListener() {
- @Override
- public void onRevokeMessage(ECError error, ECMessage message) {
- if(error.errorCode ==SdkErrorCode.REQUEST_SUCCESS){
- Log.d(“撤回成功");
- }else {
- Log.d(“撤回失败");
- }
- }
- });
撤回消息通知
撤回消息后,接收方会收到对方撤回消息的通知。(通过实现OnChatReceiveListener中的onReceiveMessageNotify方法可以获取到消息被删除的通知),参考文档:IM接收消息监听。
代码示例
- public void onReceiveMessageNotify(ECMessageNotify msg) {
- if(msg.getNotifyType()==NotifyType.REVOKE)
- { //通过if判断代表当前类型是撤回消息的通知
- ECMessageRevokeNotify RevokeMsg=(ECMessageRevokeNotify) msg;
- //处理撤回的通知
- }
- }
把消息置为已读(消息回执)
当用户接收到消息并且查看此消息时,可以向发送方发送消息已读,这样发送方就可以知道消息是否被读过。
API介绍
- void readMessage(ECMessage message,
- ECChatManager.OnReadMessageListener listener)
- 设置消息为已读状态
- 参数:
- message - 需要设置的消息
- listener - 回调监听
代码示例
- //获取发送消息管理者
- ECChatManager ecChatManager = ECDevice.getECChatManager();
- if(ecChatManager==null){
- return;}
- //调用已读接口将消息设置为已读
- chatManager.readMessage(message, new ECChatManager.OnReadMessageListener() {
- @Override
- public void onReadMessageResult(ECError error, ECMessage message) {
- if(error.errorCode== SdkErrorCode.REQUEST_SUCCESS){
- Log.d(“置为已读成功");
- } else{
- Log.d(“置为已读失败");
- }
- };
消息回执通知
当接收方读完消息发送消息回执时,消息发送方会收到这一条通知消息,消息发送方可以在这里做发送方消息回执的逻辑判断处理。(通过实现OnChatReceiveListener中的onReceiveMessageNotify方法可以获取到消息被删除的通知),参考文档:IM接收消息监听。
代码示例
- public void onReceiveMessageNotify(ECMessageNotify msg) {
- if(msg.getNotifyType()==NotifyType.READ)
- { //通过if判断代表当前类型是删除阅后即焚的通知
- ECMessageReadNotify deleteMsg=(ECMessageReadNotify) msg;
- //处理接收方删除阅后即焚消息的通知、比如删除本地图片等
- }
- }
获取已读未读消息
云通讯平台为开发者提供了获取已读未读消息列表接口,该接口主要用于获取群组已读未读消息。此接口为服务器接口,调整链接:获取已读未读消息。
设置会话置顶
sessionId:单聊的话为对方账号,群聊则为群组ID。
API介绍
- void setSessionToTop(java.lang.String contact,
- boolean isTop,
- ECChatManager.OnSetContactToTopListener listener)
- 设置会话是否为置顶状态
- 参数:
- contact - 会话id
- isTop - 是否置顶
- listener - 回调监听
代码示例
- //获取发送消息管理者
- ECChatManager chatManager = ECDevice.getECChatManager();
- if(chatManager ==null){
- return null;
- }
- //调用置顶接口
- chatManager.setSessionToTop(sessionId, isTop, new ECChatManager.OnSetContactToTopListener() {
- @Override
- public void onSetContactResult(ECError error, String contact) {
- if(error.errorCode==SdkErrorCode.REQUEST_SUCCESS){
- Log.d(TAG,"设置成功");
- }else {
- Log.d(TAG,"设置失败");
- }
- }
- });
获取置顶会话列表
用户可以通过获取置顶会话,来做本地的展示。
API介绍
- void getSessionsOfTop(ECChatManager.OnGetSessionsOfTopListener listener)
- 获取个人设置为置顶的会话列表
- 参数:
- listener -回调
代码示例
- //获取发送消息管理者
- ECChatManager chatManager =ECDevice.getECChatManager();
- if(chatManager ==null){
- return;
- }
- //获取置顶
- chatManager.getSessionsOfTop(new ECChatManager.OnGetSessionsOfTopListener() {
- @Override
- public void onGetSessionsOfTopResult(ECError error, String[] sessionsArr) {
- if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
- Log.d(TAG,”获取成功");
- }else{
- Log.d(TAG,”获取失败");
- }
- }
- });
获取用户在线状态
专有云提供该接口,获取用户在线状态一次可以传50个账号。
API介绍
- getUsersState
- public static void getUsersState(java.lang.String[] userId,
- ECDevice.OnGetUsersStateListener listener)
- 批量查询用户状态信息
- 参数:
- userId - 用户账号数字
- l-回调
代码示例
- ECDevice.getUsersState(new String[]{userId}, new OnGetUsersStateListener() {
- @Override
- public void onGetUsersState(ECError error, ECUserState... userState) {
- //查询多个用户状态回调 可变数组 userState
- }
- });
说明:
服务端也提供了获取用户在线的接口。一次可以传100个。
具体参考文档: 获取用户在线状态。
单应用多证书
专有云支持单应用配置多证书,具体配置指南参考:IM基础功能配置
建议初始化成功后,登录之前调用。
- /**
- * ECDevice类
- * 多证书设置
- * @param pushCerKey 推送证书标识,与服务器上传证书保持一致
- */
- ECDevice.setPushCerKey("xxxx");
设置网络代理
- /**
- * ECDevice类
- * 设置网络代理。需要走代理时登录前设置,不支持ssl;socks5代理支持im和点对点(底层将关闭媒体流内网打洞),http代理支持im
- * @param proxyHost 代理服务器地址,最大长度255。当设置空时,取消代理
- * @param proxyPort 代理端口
- * @param authType 鉴权类型。 目前支持 0 不鉴权;2 用户名密码鉴权
- * @param userName 用户名,最大长度255。authType=2时有效
- * @param userPass 用户名密码,最大长度255。authType=2时有效
- * @param proxyType 代理类型。 目前支持 0 socks5代理;1 http代理
- * @return
- */
- ECDevice.setNetworkProxy(proxyHost,proxyPort,authType,userName,userPass,proxyType);