自定义消息类型
除了使用 SDK 内置消息外,还可以创建自定义消息类型。
您需要根据业务需求来选择自定义消息类型继承的消息基类:
RCMessageContent
,即普通类型消息内容。例如在 SDK 内置消息类型中的文本消息和位置消息。RCMediaMessageContent
,即多媒体类型消息。多媒体类型消息内容继承自RCMessageContent
,并在其基础上增加了对多媒体文件的处理逻辑。在发送和接收消息时,SDK 会判断消息类型是否为多媒体类型消息,如果是多媒体类型,则会触发上传或下载多媒体文件流程。
关于消息实体类与消息内容的更多介绍,可参见消息介绍。
创建自定义消息类型
自定义消息类型类遵守下面三个协议:
- 编解码协议(必须遵守):
RCMessageCoding
指定消息类型名称、消息收发过程中的编码与解码行为,以及提供消息搜索所需的关键词。该协议是所有自定义消息类型必须实现的协议,否则将无法正常传输和使用。 - 存储协议(必须遵守):
RCMessagePersistentCompatible
指定此消息类型在客户端与服务端是否计入未读消息数、是否存储的行为。 - 内容摘要协议(非必须遵守):
RCMessageContentView
设置如何显示该类型消息的摘要。
编解码协议
提示
任何自定义消息类型都必须实现 RCMessageCoding
协议,否则将无法正常传输和使用。
协议原型:
Objective C
@protocol RCMessageCoding <NSObject>
编解码协议(RCMessageCoding
)主要有以下功能:
- 提供该自定义消息类型的唯一 ID。
- 在消息发送时,将消息中的所有信息编码为 JSON 数据传输。
- 在消息接收时,将 JSON 数据解码还原为消息对象。
- 提供消息搜索数据。
遵守编解码协议需实现下面的方法:
-
序列化:消息内容通过此方法,将消息中的所有数据,编码成为 JSON 数据,返回的 JSON 数据将用于网络传输。
Objective C- (NSData *)encode;
-
反序列化:网络传输的 JSON 数据,会通过此方法解码,获取消息内容中的所有数据,生成有效的消息内容。
Objective C- (void)decodeWithData:(NSData *)data;
-
定义消息类型名:定义的消息类型名,需要在各个平台上保持一致,否则消息无法互通。为避免和 SDK 默认的消息类型名称冲突,请勿使用
RC:
开头的类型名。Objective C+ (NSString *)getObjectName;
-
提供消息搜索数据:如果需要自定义消息需要被搜索,需要将关键字返回。如果不需要被搜索,可直接返回 nil。
Objective C- (NSArray<NSString *> *)getSearchableWords;