转发消息
Global IM UIKit 支持对单条消息转发,和对多条消息的逐条转发/合并转发的功能,允许用户在聊天页面中将消息转发到其他会话中。转发后消息将出现在目标会话页面的消息列表组件中。
Global IM UIKit 默认未启用合并转发功能。您可以按需启用合并转发功能。下图中 App 已打开合并转发功能,因此可看到逐条转发和合并转发两个功能选项。
局限
- 并非所有消息类型均支持逐条转发。
- 支持逐条转发的消息类型:文本、语音、小视频、图片、文件、图文、表情贴纸(
RC:StkMsg
)、位置、合并、引用。 - 不支持的情况:未在支持列表中的消息类型,以及未发送成功的消息等特殊情况不支持转发。
- 支持逐条转发的消息类型:文本、语音、小视频、图片、文件、图文、表情贴纸(
- 并非所有消息类型均支持合并转发。
- 支持的消息类型:文本、图片、GIF、表情贴纸(
RC:StkMsg
)、小视频、文件、普通语音、高清语音、合并转发。 - 不支持的情况:未在支持列表中的消息类型,例如名片、位置、图文、引用消息、小灰条(
RC:InfoNtf
)、命令提醒消息(RC:CmdNtf
),以及未发送成功的消息等特殊情况不支持转发。自定义消息均不支持合并转发。
- 支持的消息类型:文本、图片、GIF、表情贴纸(
- 合并转发支持合并最多 100 条消息。
- 转发选择会话页面需要应用层实现,然后调用接口发送。
用法
用户在会话页面长按消息,在弹框里点击选择,即可展示转发消息选项。
逐条转发
点击逐条转发的回调是 -forwardOriginalMessages:
, 重写该方法,跳转到选择转发的会话,选择结束后,调用 viewModel
的 -forwardMessages:messageModels:combine:
转发消 息,代码示例如下:
/// 点击 逐条转发 的回调
- (void)forwardOriginalMessages:(NSArray *)messageModels {
/// 选择会话页面
TestForwardSelectionViewController *controller = [[TestForwardSelectionViewController alloc] init];
controller.chatModels = self.recentChatModels;
__weak typeof(self) weakSelf = self;
controller.selectionResult = ^(NSArray *models) {
/// 选择结束后逐条发送
[weakSelf.viewModel forwardMessages:messageModels toChats:models combine:NO];
/// 结束会话页面消息选择状态
[weakSelf endSelection];
};
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:controller];
navigation.modalPresentationStyle = UIModalPresentationOverFullScreen;
navigation.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:navigation animated:YES completion:NULL];
}
合并转发
点击合并转发的回调是 -forwardCombinedMessages:
, 重写该方法,跳转到选择转发的会话,选择结束后,调用 viewModel
的 -forwardMessages:messageModels:combine:
转发消息,代码示例如下:
/// 点击 合并转发 的回调
- (void)forwardCombinedMessages:(NSArray *)messageModels {
/// 选择会话页面
TestForwardSelectionViewController *controller = [[TestForwardSelectionViewController alloc] init];
controller.chatModels = self.recentChatModels;
__weak typeof(self) weakSelf = self;
controller.selectionResult = ^(NSArray *models) {
/// 选择结束后合并转发
[weakSelf.viewModel forwardMessages:messageModels toChats:models combine:YES];
/// 结束会话页面消息选择状态
[weakSelf endSelection];
};
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:controller];
navigation.modalPresentationStyle = UIModalPresentationOverFullScreen;
navigation.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:navigation animated:YES completion:NULL];
}