写点什么

融云 SDK 如何实现群组操作

发布于: 2021 年 03 月 16 日

背景


在集成融云 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 = [NSString
复制代码


                stringWithFormat:NSLocalizedStringFromTable(@"GroupJoin", @"RongCloudKit", nil), operationName];
复制代码


        } else {
复制代码


            content = [NSString
复制代码


                stringWithFormat: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 
复制代码


用户头像

还未添加个人签名 2021.01.26 加入

还未添加个人简介

评论

发布
暂无评论
融云 SDK 如何实现群组操作