前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >更改 TUIKit 实现消息转发的功能

更改 TUIKit 实现消息转发的功能

原创
作者头像
腾讯云 - zjiezhu
发布2021-02-02 17:07:17
9190
发布2021-02-02 17:07:17
举报
文章被收录于专栏:IMSDK

更改 TUIKit 实现消息转发的功能

前提背景: 当前 IMSDK 5.1.21 版本的 TUIkit 还不支持消息转发的功能(后续很快将提供). 这个示例可以作为一个转发消息参考

实现原理一句话介绍: 拿到当前消息的信息, 转发的时候重新构建一条新的消息发送出去

step1: 添加长按菜单项目

长按消息出现转发选项, 可以在 tuikit 的 - (void)onLongPressMessage:(TUIMessageCell *)cell 方法添加中

[items addObject:[[UIMenuItem alloc] initWithTitle:@"转发" action:@selector(onTransMsg:)]];

可以通过 [data isKindOfClass:[TUITextMessageCellData class]] 这个方法判断消息类型, 对想要提供转发的消息类型添加该选项, 例如这里的文本消息

添加后效果如下:

示例图片
示例图片

step2: 响应转发点击

响应点击转发操作: 你可以自定义页面, 这里例子为点击后弹出通讯录页面, 转发给好友

在 TUIKit 下面这个方法中加上 onTransMsg: 添加响应

代码语言:txt
复制
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(onDelete:) ||
        action == @selector(onRevoke:) ||
        action == @selector(onReSend:) ||
        action == @selector(onCopyMsg:) ||
        action == @selector(onTransMsg:)){
        return YES;
    }
    return NO;
}

处理响应: 弹出通讯录页面, 传递数据

创建 ShareContactViewController 控制器, 可以复制 TUIKit 中的 TUIContactController 里面的代码, 提供 TUIMessageCellData *shareCellData; 属性来传递数据

代码语言:txt
复制
- (void)onTransMsg:(id)sender {
    // 这里的 ShareContactViewController 是一个通讯录页面 (仿照TUIContactController demo的通讯录页面)
    ShareContactViewController *shareVC = [[ShareContactViewController alloc] init];
    shareVC.shareCellData = _menuUIMsg;
    [self presentViewController:shareVC animated:YES completion:nil];
}

step3: 发送消息

在弹出的通讯录界面 ShareContactViewController 处理转发, 也就是拿到数据自己创建一条消息发出去

通讯录点击好友的响应方法是: onSelectFriend

onSelectFriend 中拿到数据发送, 示例为文字和图片消息

图片消息需要拿到当前的图片消息, 获取当前的 localPath, 再构造一个图片消息, 调发送接口发送(视频文件消息同理)

代码语言:txt
复制
- (void)onSelectFriend:(TCommonContactCell *)cell
{
    TCommonContactCellData *data = cell.contactData;
    id<TUIFriendProfileControllerServiceProtocol> vc = [[TCServiceManager shareInstance] createService:@protocol(TUIFriendProfileControllerServiceProtocol)];
    if ([vc isKindOfClass:[UIViewController class]]) {
        vc.friendProfile = data.friendProfile;
        
        if ([self.shareCellData isKindOfClass:[TUITextMessageCellData class]]) {
            TUITextMessageCellData *txtMsg = (TUITextMessageCellData *)self.shareCellData;
            [[V2TIMManager sharedInstance] sendC2CTextMessage:txtMsg.content to:data.identifier succ:^{
                NSLog(@"成功");
            } fail:^(int code, NSString *desc) {
                NSLog(@"执行方法 function:: %s -- 错误码 code:: %d, 错误描述 msg::%@", __func__, code, desc);
            }];
        }
        
        if ([self.shareCellData isKindOfClass:[TUIImageMessageCellData class]]) {
            TUIImageMessageCellData *imageMsg = (TUIImageMessageCellData *)self.shareCellData;
            BOOL isExist = YES;
            NSString *path = [imageMsg getImagePath:TImage_Type_Thumb isExist:&isExist];
            V2TIMMessage *imgMsg = [[V2TIMManager sharedInstance] createImageMessage:path];
            [[V2TIMManager sharedInstance] sendMessage:imgMsg receiver:data.identifier groupID:nil priority:V2TIM_PRIORITY_DEFAULT onlineUserOnly:NO offlinePushInfo:nil progress:^(uint32_t progress) {
                NSLog(@"progress=%u", progress);
            } succ:^{
                NSLog(@"成功");
            } fail:^(int code, NSString *desc) {
                NSLog(@"执行方法 function:: %s -- 错误码 code:: %d, 错误描述 msg::%@", __func__, code, desc);
            }];
        }
        [self dismissViewControllerAnimated:YES completion:nil];
    }
}

对于多选转发则会复杂一点, 原理以相同, 只是需要更多的自定义的 UI, 如果不着急可以等等 TUIKit 官方的更新

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 更改 TUIKit 实现消息转发的功能
    • step1: 添加长按菜单项目
      • step2: 响应转发点击
        • step3: 发送消息
        相关产品与服务
        即时通信 IM
        即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持 Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、好友与资料、消息漫游、群组管理、会话管理、直播弹幕、内容审核和推送等能力。适用于直播互动、电商带货、客服咨询、社交沟通、企业办公、互动游戏、医疗健康等场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档