这里是官方的文档:
发送音频消息

发送音频消息的基本流程是:读取音频文件(或者录制音频)> 构建音频消息 > 消息发送。

- (void)tomSendAudioToJerry {
    // Tom 创建了一个 client,用自己的名字作为 clientId
    self.client = [[AVIMClient alloc] initWithClientId:@"Tom"];

    // Tom 打开 client
[self.client openWithCallback:^(BOOL succeeded, NSError *error) {
    // Tom 建立了与 Jerry 的会话
    [self.client createConversationWithName:@"猫和老鼠" clientIds:@[@"Jerry"] callback:^(AVIMConversation *conversation, NSError *error) {
        // Tom 发了一首歌曲给 Jerry
        NSString *path = [[NSBundle mainBundle] pathForResource:@"忐忑" ofType:@"mp3"];
        AVFile *file = [AVFile fileWithName:@"忐忑.mp3" contentsAtPath:path];
        AVIMImageMessage *message = [AVIMImageMessage messageWithText:@"听听人类的神曲~" file:file attributes:nil];
        [conversation sendMessage:message callback:^(BOOL succeeded, NSError *error) {
            if (succeeded) {
                NSLog(@"发送成功!");
            }
        }];
    }];
}];
}

这的确是示例代码的问题,类型应该是 AVIMAudioMessage,我们会尽快修复。谢谢反馈。

你们是官方? 我还以为这里面没有官方人员呢?

已经修改。

  • (void)passMessage:(AVIMMessage *)message toConversation:(AVIMConversation *)conversation {
    NSArray *arguments = @[conversation, message];
if ([message isKindOfClass:[AVIMTypedMessage class]]) {
    if ([_delegate respondsToSelector:@selector(conversation:didReceiveTypedMessage:)]) {
        [AVIMRuntimeHelper callMethodInMainThreadWithTarget:_delegate selector:@selector(conversation:didReceiveTypedMessage:) arguments:arguments];
    } else {
        [AVIMRuntimeHelper callMethodInMainThreadWithTarget:_delegate selector:@selector(conversation:didReceiveCommonMessage:) arguments:arguments];
    }
} else if ([message isKindOfClass:[AVIMMessage class]]) {
    [AVIMRuntimeHelper callMethodInMainThreadWithTarget:_delegate selector:@selector(conversation:didReceiveCommonMessage:) arguments:arguments];
}

}

看到这里 我们去发送消息的时候是可以基于AVIMTypedMessage 也可以基于AVIMMessage 对吗?

是的,可以发送普通的 AVIMMessage。只要 UI 上保证正确显示消息内容。

如果我想自定义消息类型,自定义消息的字段 直接发送是不是内部会给我进行json转换?

是的,可以在 Xcode 控制台中观察消息的日志。