废话少说,直奔正题。
正常的发送消息无非就是发送:
1、文字消息
2、图片消息
往往这些都无法满足产品提出的开发需求,比如:自定义消息。
就像发送一个微信红包一样。
一步步分析吧:
一、首先我们需要先创建这样的一个cell。
1、在官方提供的demo中,找到展示消息的cell
所有消息类型的cell都要继承
ChatBaseTableViewCell
,定义好属性了,需要做UI处理。然后需要做赋值操作。
二、发送消息的时候一系列操作
1、选中要发送的自定义消息,将数据传过来,传给SDK自定义消息的方法中:
提供的demo当中,无论发送的什么消息,最后都会统一走
[self sendMsg:imaMsg];
这个方法。
其中[IMAMsg msgWithCustom:EIMAMSG_Custom params:dictionary];
这个方法是我自己写的,感觉官方提供的demo有问题,因为这些操作不走后台,我们是跟微信端交互,跟我说,无法处理转移符,只能我处理了。(也有可能是我搞错了)
来到这个方法中:
这里我是这样处理的:
- (NSData *)packToSendData {
NSMutableDictionary *post = [NSMutableDictionary dictionary];
[post setObject:@(_userAction) forKey:@"userAction"];
// if (_actionParam && _actionParam.length > 0) {
// [post setObject:_actionParam forKey:@"actionParam"];
// }
[post setObject:_customInfo forKey:@"actionParam"];
if ([NSJSONSerialization isValidJSONObject:post]) {
NSError *error = nil;
//这是demo带的方法,这么上传,微信端总是带转义符,无法解析。
// NSData *data = [NSJSONSerialization dataWithJSONObject:post options:NSJSONWritingPrettyPrinted error:&error];
//自己写,不要完全相信demo,会坑死人。
NSString *jsonStr = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:post options:kNilOptions error:&error] encoding:NSUTF8StringEncoding];
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\\" withString:@""];
NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
if(error) {
DebugLog(@"[%@] Post Json Error: %@", [self class], post);
return nil;
}
DebugLog(@"CustomElemCmd content is %@", post);
return data;
}else {
DebugLog(@"[%@] CustomElemCmd is not valid: %@", [self class], post);
return nil;
}
}
这样,TIM 发送自定义消息就完成了。