语音消息
用户可以通过 Global IM UIKit 内置的输入组件录制并发送语音消息。消息将出现在会话页面的消息列表组件中。SDK 默认生成和发送的消息包含高清语音消息内容对象 RCHQVoiceMessage(类型标识:RC:HQVcMsg
)。
局限性
语音输入功能目前存在以下限制:
- Global IM UIKit 仅 单聊会话和群聊会话支持发送语音消息。
- 用户必须录制至少为 1 秒的音频内容,且必须短于 60 秒钟。
- 用户在录制语音消息时无法暂停。
用法
在输入栏组件中默认启用语音消息输入功能,长按语音按钮录制语音,松开发送。
输入文本时,录音按钮会切换成发送按钮,当输入文本为空后,会再次切换为录音按钮。
语音消息展示
消息列表中,语音消息会展示分贝、时长等信息,用户可以通过点击播放按钮查看和播放语音消息,消息可多次播放。当语音消息第一次展示时,会自动下载语音文件,并在本地缓存语音文件。
语音分贝
在录音时,会将声音的分贝信息记录下来,随高清语音消息一起发送。分贝信息会以 JSON 格式转换成字符串放在 RCHQVoiceMessage 的 extra
中,格式如下:
{
"HQVoicePowers": "level,level,level,level,..."
}
定制化
语音消息的定制化涉及到输入栏的录音按钮图标、录音事件、语音消息展示 UI。
自定义语音消息 UI
SDK 默认生成和发送高清语音消息(RC:HQVoiceMsg
),使用 RCVoiceMessageCell
模板展示在消息列表中。开发者可以创建继承 RCVoiceMessageCell
的 Cell,自定义语音消息的展示。详见修改消息的展示样式。
处理录音相关事件
Global IM UIKit 在 RCChatViewController
中实现了录音相关的事件:
@protocol RCVoiceRecordDelegate <NSObject>
@optional
/// 将要开始语音录制
- (BOOL)voiceRecordWillBegan;
/// 已经开始语音录制
- (void)voiceRecordDidBegan;
/// 取消语音录制
- (void)voiceRecordDidCancel;
/// 语音录制结束
- (void)voiceRecordDidEnd:(RCAudioModel *)audioModel;
/// 语音录制中断
- (void)voiceRecordDidInterrupt:(RCAudioModel *)audioModel;
/// 语音录制失败
- (void)voiceRecordDidFailed:(NSError *)error;
@end
自定义录音按钮 UI
在输入组件中,默认显示录音按钮,由 recordItem
控制,开发者可以设置图片和事件:
- (void)viewDidLoad {
[super viewDidLoad];
self.inputBar.recordItem.image = CustomImage;
self.inputBar.recordItem.action = ^(RCBarItem *item) {
// custom action
};
self.inputBar.rightItems = @[self.inputBar.rightItems];
}