高级功能
阅后即焚
阅后即焚消息是通过设置消息ECMessage的userData属性来标识的。
我们假设John与Tony单聊时,John发送给Tony一条消息,Tony阅读后会自动删除,并且通知John这条消息已经被删除(暂时只支持单聊),则代码如下:
接收阅后即焚消息方,即Tony
- //阅后即焚消息删除
- [[ECDevice sharedInstance].messageManager deleteMessage:message completion:^(ECError *error, ECMessage *message) {
- if(error.errorCode == ECErrorType_NoError){// 删除服务器上的消息后,你也需要将本地的消息清空
- }
- }];
阅后即焚通知
在阅后即焚消息接收方删除消息后,发送方会收到消息通知,即John
- //阅后即焚消息删除后,发送方收到通知
- - (void)onReceiveMessageNotify:(ECMessageNotifyMsg *)message {
- if (message.messageType == ECMessageNotifyType_DeleteMessage) {
- ECMessageDeleteNotifyMsg *msg = (ECMessageDeleteNotifyMsg *)message;
- //可删除对应的消息(此处可通过msg.messageId判断删除的消息)
- }
- }
消息撤回
发送消息成功后,如果用户想要撤回此消息时,此接口可以帮用户实现功能,但是发送成功消息必须在两分钟之内。
- /**
- @brief 撤回消息
- @param message 需要撤回的消息
- @param completion 执行结果回调block
- */
- [[ECDevice sharedInstance].messageManager revokeMessage:message
- completion:^(ECError *error, ECMessage *message) {
- __strong typeof(weakSelf)strongSelf = weakSelf;
- NSLog(@"撤回消息 error=%d", (int)error.errorCode);
- if (error.errorCode == ECErrorType_NoError) {
- // 撤回消息成功后,此位置显示为你撤回了一条消息,此消息是需要本地去做,因为不经过服务器。可以仿照demo具体实现
- }}
消息撤回通知
撤回消息通知增加ECMessageRevokeNotifyMsg — 当发送方撤回消息时,接收方会收到这一条通知消息-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message,接收方可以在这里做接收方的逻辑判断处理,代码如下:
- -(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message {
- if(message.messageType==ECMessageNotifyType_RevokeMessage) {
- // 接收方收到对方撤回消息的逻辑处理
- }
- }
消息回执
当用户接收到消息并且查看此消息时,可以向发送方发送消息已读,这样发送方就可以知道消息是否被读过。
- /**
- @brief 消息已读(接收到的消息)
- @param message 设置已读的消息
- @param completion 执行结果回调block
- */ECMessage *message(接收消息)
- [[ECDevice sharedInstance].messageManager readedMessage:message
- completion:^(ECError *error, ECMessage *amessage) {}
消息回执通知
消息回执通知增加ECMessageIsReadedNotifyMsg — 当接收方读完消息发送消息回执时,消息发送方会收到这一条通知消息-(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message,消息发送方可以在这里做发送方消息回执的逻辑判断处理,代码如下:
- -(void)onReceiveMessageNotify:(ECMessageNotifyMsg*)message {if(message.messageType==ECMessageNotifyType_MessageIsReaded) {// 消息发送方收到对方回执消息的逻辑处理}}
获取已读未读消息
云通讯平台为开发者提供了获取已读未读消息列表接口,该接口主要用于获取群组消息已读未读人数。此接口为服务器接口,接口文档:获取已读未读消息。
置顶(取消置顶)会话
是否置顶会话场景:用户可以置顶本地的会话,并且在切换设备时可以调用获取置顶会话列表来达到会话置顶的功能。
- /**
- @brief 是否置顶会话
- @param seesionId 会话id
- @param isTop 0 取消置顶 1 置顶
- */
- seesionId = @”通讯号码”
- isTop = 0/1(“是否置顶0“)
- [[ECDevice sharedInstance].messageManager setSession:sessionId IsTop:isTop
- completion:^(ECError *error, NSString *seesionId) {if (error.errorCode == ECErrorType_NoError) {
- //是否置顶成功失败}}
获取置顶会话列表
用户可以通过获取置顶会话,来做本地的展示。
- /**
- @brief 获取置顶会话列表
- @param completion 执行结果回调block
- */
- - (void)getTopSession:(void(^)(ECError *error, NSArray *topContactLists))completion{
- // topContactLists里面包含会话sessionId
- }
获取用户在线状态
专有云提供该接口,获取用户在线状态一次可以传50个账号。
- /**
- @brief 获取用户在线状态
- @brief userAccs 用户账号数组
- @param completion 执行结果回调block
- */
- -(void)getUsersState:(NSArray *)userAccs
- completion:(void(^)(ECError* error, NSArray* usersState)) completion;
- 例:
- userAccs = @”用户账号数组”;//每次最多获取50人
- [[ECDevice sharedInstance] getUsersState: userAccs completion:^(ECError* error, NSArray* usersState) {
- __strong __typeof(weakSelf)strongSelf = weakSelf;
- if ([strongSelf.sessionId isEqualToString:state.userAccs]) {// 判断是否是本次会话id
- if (state.isOnline) { //显示他人的在线状态
- _stateLabel.text = [NSString stringWithFormat:@"%@-%@",
- [strongSelf getDeviceWithType:state.deviceType],
- [strongSelf getNetWorkWithType:state.network]];
- } else { //显示他人的不在线状态
- _stateLabel.text = @"对方不在线";
- }
- }
- }];
说明:
服务端也提供了获取用户在线的接口。一次可以传100个。
具体参考文档: 获取用户在线状态。
单应用多证书
专有云支持单应用配置多证书,具体配置指南参考:IM基础功能配置
建议初始化成功后,登录之前调用。
- /**
- @brief 多证书设置
- @param pushCerKey 推送证书标识,与服务器上传证书保持一致
- */
- [[ECDevice sharedInstance] setPushCerKey:@"小余6位数字或字母"];
设置网络代理
- /**
- @brief 设置网络代理,需要走代理时登录前设置,不支持ssl;socks5代理支持IM和点对点音视频(关闭p2p),http代理支持IM
- @param proxyHost 代理服务器地址,最大长度255。当设置空时,取消代理
- @param proxyPort 代理端口
- @param type 鉴权类型。 目前支持 0 不鉴权;2 用户名密码鉴权
- @param authName 用户名,最大长度255。authType=2时有效
- @param authPwd 用户名密码,最大长度255。authType=2时有效
- @param proxyType 代理类型。 目前支持 0 socks5代理;1 http代理
- @return 0成功,非0失败
- */
- [[ECDevice sharedInstance] setNetworkProxy:(NSString*)proxyHost port:(NSInteger)proxyPort
- authType:(NSInteger)type name:(NSString*)authName pwd:(NSString*)authPwd ProxyType:(NSInteger)proxyType];