LeanCloud IM 即時(shí)聊天

對于每一個(gè)聊天用戶來說,我們將這個(gè)用戶抽象成Client模型,在我們的應(yīng)用中,根據(jù)用戶的唯一標(biāo)識(shí)userID來創(chuàng)建一個(gè)client。

// Tom 創(chuàng)建了一個(gè) client,用自己的名字作為 clientId 
self.client =  [[AVIMClient alloc] initWithClientId:@"Tom"];

第二步:開啟聊天

- (void)openWithCallback:(AVIMBooleanResultBlock)callback;

第三步:聊天開啟成功后,根據(jù)傳入對方的 clientId,創(chuàng)建一個(gè)新的用戶對話(conversation)。

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

后續(xù)的發(fā)送消息,都是通過對話(conversation)來發(fā)送。

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

第四步:結(jié)束某個(gè)賬戶的聊天

- (void)closeWithCallback:(AVIMBooleanResultBlock)callback;
如何接收消息
- (void)jerryReceiveMessageFromTom { 
// Jerry 創(chuàng)建了一個(gè) client,用自己的名字作為 clientId 
self.client = [[AVIMClient alloc] initWithClientId:@"Jerry"]; 
// 設(shè)置 client 的 delegate,并實(shí)現(xiàn) delegate 方法 self.client.delegate = self; 
// Jerry 打開 client 
[self.client openWithCallback:^(BOOL succeeded, NSError *error) { // ... }];}

#pragma mark - AVIMClientDelegate
// 接收消息的回調(diào)函數(shù)
- (void)conversation:(AVIMConversation *)conversation didReceiveTypedMessage:(AVIMTypedMessage *)message { 
NSLog(@"%@", message.text); // 耗子,起床!
}
如何發(fā)送圖片,音頻文件

圖片來源可以從系統(tǒng)提供的拍照 API 或本地媒體庫中獲取,也可以用有效的圖像 URL。先調(diào)用 SDK 方法構(gòu)造出一個(gè)AVIMImageMessage對象,然后把它當(dāng)做參數(shù)交由 AVIMConversation發(fā)送出去即可。

【場景一】用系統(tǒng)自身提供的 API 去獲取本地媒體庫里的照片的數(shù)據(jù)流,然后構(gòu)造出 AVIMImageMessage來發(fā)送:

// Tom 創(chuàng)建了一個(gè)圖像消息 
NSString *filePath = [self imagePath]; 
NSDictionary *attributes = @{ @"location": @"舊金山" }; AVIMImageMessage *message = [AVIMImageMessage messageWithText:@"發(fā)自我的 iPhone" attachedFilePath:filePath attributes:attributes]; 
// Tom 將圖像消息發(fā)給 Jerry 
[conversation sendMessage:message callback:^(BOOL succeeded, NSError *error) { 
  if (succeeded) { 
  NSLog(@"發(fā)送成功!"); 
} }];

場景二】從微博上復(fù)制的一個(gè)圖像鏈接來創(chuàng)建圖像消息:

// Tom 發(fā)了一張圖片給 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(@"發(fā)送成功!"); 
} }];

以上兩種場景對于 SDK 的區(qū)別為:

場景一:SDK 獲取了完整的圖像數(shù)據(jù)流,先上傳文件到云端,再將文件的元數(shù)據(jù)以及 URL 等一并包裝,發(fā)送出去。

場景二:SDK 并沒有將圖像實(shí)際上傳到云端,而僅僅把 URL 包裝在消息體內(nèi)發(fā)送出去,這種情況下接收方是無法從消息體中獲取圖像的元信息數(shù)據(jù),但是接收方可以自行通過客戶端技術(shù)去分析圖片的格式、大小、長寬之類的元數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容