1、在自定义消息类的编解码方法中打断点,看收发消息的时候会不会执行。
=====================================
编解码方法:
1、序列化:消息内容通过此方法,将消息中的所有数据,编码成为 JSON 数据,返回的 JSON 数据将用于网络传输。
- (NSData *)encode;
2、反序列化:网络传输的 JSON 数据,会通过此方法解码,获取消息内容中的所有数据,生成有效的消息内容。
- (void)decodeWithData:(NSData *)data;
如果上述两个方法不执行:
1、注册自定义消息方法 - (void)registerMessageType:(Class)messageClass; 必须在融云初始化方法 initWithAppkey: 之后、融云连接方法connectWithToken: 之前调用。
(注意:a、自定义消息类名不要写错成cell类名;
b、如果使用IMKit带UI SDK库,使用RCIM类调用初始化和连接融云方法;
如果使用IMLib无UI SDK库,使用RCIMClient类调用初始化和连接融云方法。)
[[RCIM sharedRCIM] registerMessageType:[自定义消息类 class]];
2、看一下接收到的消息中消息名称 objectName 与 自定义消息类中获取消息名称方法
- (NSString *)getObjectName; 返回值是否完全一致,如果不一致,SDK 会认为不是一种消息类型,不会上述走编解码方法。
(注意:a、定义的消息类型名,需要在各个平台上保持一致,否则消息无法互通;
b、请勿使用 RC:
开头的消息名称objectName,避免和 融云SDK内部的消息名称冲突,更不能使用SDK内置的 消息名称objectName进行自定义消息。
)
2、如果自定义消息的编解码方法可以执行,但是会话页面中自定义cell里面的代码不执行。
查看一下RCConversationViewController类的子类中
- (void)registerClass:(Class)cellClass forMessageClass:(Class)messageClass;方法调用时机,该方法的调用时机必须紧跟着 - (void)viewDidLoad;中 [super viewDidLoad];方法之后执行。
(注意:cell 类名和自定义消息类名不要写错)