LeanCloud IM 即时聊天

对于每一个聊天用户来说,我们将这个用户抽象成Client模型,在我们的应用中,根据用户的唯一标识userID来创建一个client。

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

第二步:开启聊天

- (void)openWithCallback:(AVIMBooleanResultBlock)callback;

第三步:聊天开启成功后,根据传入对方的 clientId,创建一个新的用户对话(conversation)。

[self.client createConversationWithName:@"猫和老鼠" clientIds:@[@"Jerry"] callback:^(AVIMConversation *conversation, NSError *error) 

后续的发送消息,都是通过对话(conversation)来发送。

[conversation sendMessage:[AVIMTextMessage messageWithText:@"耗子,起床!" attributes:nil] callback:^(BOOL succeeded, NSError *error) { if (succeeded) { NSLog(@"发送成功!"); } }];

第四步:结束某个账户的聊天

- (void)closeWithCallback:(AVIMBooleanResultBlock)callback;
如何接收消息
- (void)jerryReceiveMessageFromTom { 
// Jerry 创建了一个 client,用自己的名字作为 clientId 
self.client = [[AVIMClient alloc] initWithClientId:@"Jerry"]; 
// 设置 client 的 delegate,并实现 delegate 方法 self.client.delegate = self; 
// Jerry 打开 client 
[self.client openWithCallback:^(BOOL succeeded, NSError *error) { // ... }];}

#pragma mark - AVIMClientDelegate
// 接收消息的回调函数
- (void)conversation:(AVIMConversation *)conversation didReceiveTypedMessage:(AVIMTypedMessage *)message { 
NSLog(@"%@", message.text); // 耗子,起床!
}
如何发送图片,音频文件

图片来源可以从系统提供的拍照 API 或本地媒体库中获取,也可以用有效的图像 URL。先调用 SDK 方法构造出一个AVIMImageMessage对象,然后把它当做参数交由 AVIMConversation发送出去即可。

【场景一】用系统自身提供的 API 去获取本地媒体库里的照片的数据流,然后构造出 AVIMImageMessage来发送:

// Tom 创建了一个图像消息 
NSString *filePath = [self imagePath]; 
NSDictionary *attributes = @{ @"location": @"旧金山" }; AVIMImageMessage *message = [AVIMImageMessage messageWithText:@"发自我的 iPhone" attachedFilePath:filePath attributes:attributes]; 
// Tom 将图像消息发给 Jerry 
[conversation sendMessage:message callback:^(BOOL succeeded, NSError *error) { 
  if (succeeded) { 
  NSLog(@"发送成功!"); 
} }];

场景二】从微博上复制的一个图像链接来创建图像消息:

// Tom 发了一张图片给 Jerry 
AVFile *file = [AVFile fileWithURL:[self imageURL]]; AVIMImageMessage *message = [AVIMImageMessage messageWithText:@"萌妹子一枚" file:file attributes:nil]; [conversation sendMessage:message callback:^(BOOL succeeded, NSError *error) { 
  if (succeeded) { 
    NSLog(@"发送成功!"); 
} }];

以上两种场景对于 SDK 的区别为:

场景一:SDK 获取了完整的图像数据流,先上传文件到云端,再将文件的元数据以及 URL 等一并包装,发送出去。

场景二:SDK 并没有将图像实际上传到云端,而仅仅把 URL 包装在消息体内发送出去,这种情况下接收方是无法从消息体中获取图像的元信息数据,但是接收方可以自行通过客户端技术去分析图片的格式、大小、长宽之类的元数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容