背景

在集成融云 SDK 后,需要实现群组操作的消息通知。包括:

  • 群创建、销毁通知
  • 群公告通知
  • 群人员加入、退出通知
  • 群昵称修改通知

融云现有的 SDK 仅提供了 RCGroupNotificationMessage,内部封装了几种简单的类型操作,且扩展性不强,无法完成现有的操作。

解决方案:

使用自定义消息重新来构建群组通知消息。

参考 sealtlak 中的 RCDGroupNotificationMessage,也是单独对群组操作内容,重新进行了封装处理。

/*!群组通知消息*/
@interface RCDGroupNotificationMessage : RCMessageContent//操作名
@property (nonatomic, copy) NSString *operation;//操作人
@property (nonatomic, copy) NSString *operatorUserId;//操作对象
@property (nonatomic, strong) NSArray<NSString *> *targetUserIds;//内容
@property (nonatomic, copy) NSString *message;//获取摘要
- (NSString *)getDigest:(NSString *)groupId;
@end

这个类预定义了下面几种操作类型消息,具体内容可参考名字定义

extern NSString *const RCDGroupCreate;
extern NSString *const RCDGroupMemberAdd;
extern NSString *const RCDGroupMemberQuit;
extern NSString *const RCDGroupMemberKicked;
extern NSString *const RCDGroupRename;
extern NSString *const RCDGroupBulletin;
extern NSString *const RCDGroupOwnerTransfer;
extern NSString *const RCDGroupDismiss;
extern NSString *const RCDGroupMemberJoin;
extern NSString *const RCDGroupMemberManagerSet;
extern NSString *const RCDGroupMemberManagerRemove;
extern NSString *const RCDGroupMemberProtectionOpen;
extern NSString *const RCDGroupMemberProtectionClose;

.m 的实现还是按照自定义消息的实现进行处理。唯一有区别的是在获取摘要的方法,在这个方法中对消息内容进行了处理,根据操作名的不同,来对显示的内容进行各种适配。此处根据根据自己的业务进行修改。

- (NSString *)getDigest:(NSString *)groupId {NSString *content;//获取用户信息NSString *operationName = [self getDisplayNames:@[ self.operatorUserId?self.operatorUserId:@""] groupId:groupId];NSString *targetNames = [self getDisplayNames:self.targetUserIds groupId:groupId];//是否当前用户操作BOOL isMeOperate = NO;if ([self.operatorUserId isEqualToString:[RCIMClient sharedRCIMClient].currentUserInfo.userId]) {isMeOperate = YES;}//判断操作类型if ([self.operation isEqualToString:RCDGroupCreate]) {content =[NSString stringWithFormat:NSLocalizedStringFromTable(isMeOperate ? @"GroupHaveCreated" : @"GroupCreated",@"RongCloudKit", nil),operationName];} else if ([self.operation isEqualToString:RCDGroupMemberAdd]) {if (self.targetUserIds.count == 1 && [self.targetUserIds containsObject:self.operatorUserId]) {content = [NSStringstringWithFormat:NSLocalizedStringFromTable(@"GroupJoin", @"RongCloudKit", nil), operationName];} else {content = [NSStringstringWithFormat:NSLocalizedStringFromTable(isMeOperate ? @"GroupHaveInvited" : @"GroupInvited",@"RongCloudKit", nil),operationName, targetNames];}} else if ([self.operation isEqualToString:RCDGroupMemberJoin]) {content =[NSString stringWithFormat:NSLocalizedStringFromTable(@"GroupJoin", @"RongCloudKit", nil), operationName];} else if ([self.operation isEqualToString:RCDGroupMemberQuit]) {content = [NSString stringWithFormat:NSLocalizedStringFromTable(isMeOperate ? @"GroupHaveQuit" : @"GroupQuit",@"RongCloudKit", nil),operationName];} else if ([self.operation isEqualToString:RCDGroupMemberKicked]) {content =[NSString stringWithFormat:NSLocalizedStringFromTable(isMeOperate ? @"GroupHaveRemoved" : @"GroupRemoved",@"RongCloudKit", nil),operationName, targetNames];} else if ([self.operation isEqualToString:RCDGroupRename]) {content = [NSString stringWithFormat:NSLocalizedStringFromTable(@"GroupChanged", @"RongCloudKit", nil),operationName, self.targetGroupName];} else if ([self.operation isEqualToString:RCDGroupDismiss]) {content =[NSString stringWithFormat:NSLocalizedStringFromTable(isMeOperate ? @"GroupHaveDismiss" : @"GroupDismiss",@"RongCloudKit", nil),operationName];} else if ([self.operation isEqualToString:RCDGroupOwnerTransfer]) {content = [NSString stringWithFormat:RCDLocalizedString(@"GroupHasNewOwner"), targetNames];} else if ([self.operation isEqualToString:RCDGroupMemberManagerSet]) {content = [NSString stringWithFormat:RCDLocalizedString(@"GroupSetManagerMessage"), targetNames];} else if ([self.operation isEqualToString:RCDGroupMemberProtectionOpen]) {content = RCDLocalizedString(@"openMemberProtection");} else if ([self.operation isEqualToString:RCDGroupMemberProtectionClose]) {content = [NSString stringWithFormat:RCDLocalizedString(@"closeMemberProtection"), operationName];} else {content = NSLocalizedStringFromTable(@"unknown_message_cell_tip", @"RongCloudKit", nil);}return content;
}

此外,还有一个获取名称的方法,用来维护用户信息。

- (NSString *)getDisplayNames:(NSArray<NSString *> *)userIds groupId:(NSString *)groupId

融云 SDK 如何实现群组操作相关推荐

  1. 调用融云SDK创建讨论组失败bug记录

    问题描述 项目集成融云SDK,在调用融云创建讨论组的时候,第一次创建失败,第二次创建成功. 猜测一: 猜测是因为创建的讨论组的时候,讨论组成员中有userId是融云中没有的,于是去向融云技术支持提工单 ...

  2. android 融云sdk集成,使用融云SDK集成

    使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...

  3. 基于融云SDK实现高仿微信

    本篇主要介绍了一下本人正式完成的第一个Android demo应用. 1.demo运行效果图 2.为了实现微信的体验效果,这里面用到了几个特殊的控件或者技术. 2.1 第一张图中的"+&qu ...

  4. 集成融云 SDK 怎么实现多端同步未读数

    最近在集成融云 SDK 的时候,碰到了一个跟未读数有关的问题,现象是这样的: 比如我在其中 Web 端已经清除了某个会话的未读数然后退出,再换个设备登入,这个时候未读数还有,并没有清除掉,我就纳闷了, ...

  5. android融云消息提示,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多人在嵌入融云SDK之后,遇到过Android手机收不到消息推送问题.下面来给大家一些干货.解决Android类手机收不到消息推送的解决方法.供大家参考 ...

  6. 融云 android 推送图标,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多人在嵌入融云SDK之后,遇到过Android手机收不到消息推送问题.下面来给大家一些干货.解决Android类手机收不到消息推送的解决方法.供大家参考 ...

  7. android 融云消息推送,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多人在嵌入融云SDK之后,遇到过Android手机收不到消息推送问题.下面来给大家一些干货.解决Android类手机收不到消息推送的解决方法.供大家参考 ...

  8. android手机收不到推送消息推送消息,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多人在嵌入融云SDK之后,遇到过Android手机收不到消息推送问题.下面来给大家一些干货.解决Android类手机收不到消息推送的解决方法.供大家参考 ...

  9. 融云SDK实现类QQ即时通讯的前端开发

    一.概述 接到一个需求,需要在我们的客户端里实现类似QQ的社交功能,以方便玩家之间的沟通互动.我们的客户端是C++实现的,在开会讨论考虑到成本和时间问题,实现这个功能的任务交个了前端.为了简化说明,我 ...

  10. 融云android sdk文档,使用融云SDK集成

    使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...

最新文章

  1. 移动端列表点击跳转 返回保存原来高度
  2. 【JEECG技术博文】JEECG 简单实例讲解权限控制
  3. php txt 下载文件,PHP下载单个TXT文件
  4. jQuery创建Dom元素
  5. java框架之SpringBoot(16)-分布式及整合Dubbo
  6. DEA博弈交叉效率matlab,基于DEA/AR博弈交叉效率方法的学术期刊评价研究
  7. 让国外买家秒回复的询盘模板示例
  8. C#读取网卡地址的几种方法
  9. 基于DragonBoard410C的智能管家
  10. BST中序遍历(Iterative)
  11. 牧神记之后,宅猪新书《临渊行》首日八万排第二,不敌《庆余年》
  12. 丁二烯橡胶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. 记一次windows 10启动报错 An operat ing system wasn‘t found. Try disconnecting any drives that don‘t con问题
  14. python下的一个好用的日历库,支持农历和公历互转,四柱反查等功能
  15. JVM 直接内存的使用与回收
  16. python插入excel文件数据(递增+随机)
  17. The Painted Veil
  18. SQLServer中用户 'sa' 登录失败解决办法
  19. 系统设置——亮度调节
  20. OpenGL 超级宝典笔记 —— 纹理高级(一)

热门文章

  1. 伪随机生成器具体实现——线性同余法
  2. 【初识SciPy库】
  3. 都这麽大了还不快了解防病毒网关?
  4. C/C++面试宝典2022版(最新版)
  5. 单片机原理及应用(c语言编程),单片机原理及应用——C语言程序设计与实现
  6. S4 HANA BP 维护客户信贷管理数据
  7. 如何在一台电脑上安装2个以上JDK
  8. 通过命令行安装silverlight4
  9. compoundbutton(compoundbutton是什么意思)
  10. ASP+ACCESS校园网物品交易平台