iOS-腾讯云TIM SDK发送自定义消息

废话少说,直奔正题。
正常的发送消息无非就是发送:
1、文字消息
2、图片消息
往往这些都无法满足产品提出的开发需求,比如:自定义消息。


iOS-腾讯云TIM SDK发送自定义消息_第1张图片
发送自定义消息

就像发送一个微信红包一样。


iOS-腾讯云TIM SDK发送自定义消息_第2张图片
发送出去的自定义消息

一步步分析吧:

一、首先我们需要先创建这样的一个cell。

1、在官方提供的demo中,找到展示消息的cell

iOS-腾讯云TIM SDK发送自定义消息_第3张图片
展示消息的cell

所有消息类型的cell都要继承 ChatBaseTableViewCell,定义好属性了,需要做UI处理。
iOS-腾讯云TIM SDK发送自定义消息_第4张图片
UI处理

然后需要做赋值操作。
iOS-腾讯云TIM SDK发送自定义消息_第5张图片
赋值操作

二、发送消息的时候一系列操作

1、选中要发送的自定义消息,将数据传过来,传给SDK自定义消息的方法中:

iOS-腾讯云TIM SDK发送自定义消息_第6张图片
发送自定义消息

提供的demo当中,无论发送的什么消息,最后都会统一走 [self sendMsg:imaMsg];这个方法。

其中[IMAMsg msgWithCustom:EIMAMSG_Custom params:dictionary];这个方法是我自己写的,感觉官方提供的demo有问题,因为这些操作不走后台,我们是跟微信端交互,跟我说,无法处理转移符,只能我处理了。(也有可能是我搞错了)

自定义消息方法

来到这个方法中:
iOS-腾讯云TIM SDK发送自定义消息_第7张图片
packToSendData

这里我是这样处理的:

-  (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 发送自定义消息就完成了。

你可能感兴趣的:(iOS-腾讯云TIM SDK发送自定义消息)