2016-05-14 123 views
0

即時消息確實正在讀取中,我遇到了未在Quickblox中標記爲已讀消息的問題。Quickblox iOS - 未讀取消息

是否有一種簡單的方法將對話框中的所有消息標記爲在最新的Quickblox iOS SDK中讀取?

回答

2

Quickblox不處理讀取它自己的:)自動將郵件的狀態。爲了保持郵件客戶端應用程序的讀取狀態有合作,以及:)

爲了接收讀取狀態你送出去的消息,你所期望的讀取狀態已被標記爲可標記:)

下面是QB文檔樣本代碼

QBChatMessage *message = [QBChatMessage markableMessage]; 
[message setText:@"Hi there!"]; 
[message setRecipientID:1022725]; 

假設用戶1發出您好到用戶2 :)現在在U的代碼服務器2的設備應該通知用戶2已經看到或讀取了到quickblox服務器的消息:)在向Quickblox服務器通知特定QBChatMessage的讀取狀態時,QB服務器向用戶1發出通知,告訴他用戶2已經閱讀了消息:)

在接收到消息用戶2應告知QB服務器有關使用狀態

if([message markable]){ 
     [[QBChat instance] readMessage:message completion:^(NSError * _Nullable error) { 

     }]; 
    } 

一旦用戶2通知有關所讀取的狀態QB服務器,QB服務器發送通知爲User1確認相同的,這可以被捕獲使用:)

- (void)chatDidReadMessageWithID:(NSString *)messageID dialogID:(NSString *)dialogID readerID:(NSUInteger)readerID 
{ 

} 

一旦接收特定QBChatMessage讀狀態,你可以更新用戶界面,顯示該消息:)

尖端看到狀態現在

,你可能已經注意到,每秒讀取信息的基礎工作狀態,這可能是非常刺激,導致複雜的邏輯讀取狀態發送給所有的消息一個接一個,當你收到使用

[QBRequest messagesWithDialogID:@"54fda689535c125b0700bbfa" extendedRequest:nil forPage:resPage successBlock:^(QBResponse *response, NSArray *messages, QBResponsePage *responcePage) { 

} errorBlock:^(QBResponse *response) { 
    NSLog(@"error: %@", response.error); 
}]; 

所以,簡單的解決方案一大堆的消息是:

而不是發送讀取狀態到陣列中的所有消息一個接一個地發送出去的消息只是當用戶點擊對話框以查看其中的消息時才發送消息:)

一旦用戶進入聊天屏幕,所有屬於該dalog的消息都將被視爲已讀(即包括whatsApp在內的所有消息應用程序的行爲)

因此,僅將發送狀態視爲最後一條消息纔有意義:)接收特定消息的可見狀態,將所看到的狀態更改爲發送日期少於收到已查看狀態的消息的所有消息:)

編輯

反正一切都這樣說有些情況下中,你只需要讀取狀態發送給所有屬於特定對話框中的消息爲未讀郵件數取決於讀狀態,以及場景:)

例如,如果你想從100所以它不是advicable更新特定對話的未讀郵件數爲0至看到狀態發送給所有100 :)

你可以利用這個API的。文件明確說了(我在我的應用程序中使用它),你可以設置讀取狀態屬於特定對話的所有消息只是不發送郵件ID :)

這裏是API

curl -X PUT \ 
-H "Content-Type: application/json" \ 
-H "QB-Token: eddf864695d72d33b959eec2ae6c640d817dfada" \ 
-d '{"read": "1", "chat_dialog_id": "53a99a7be4b094c7c6d31b41"}' \ 
https://api.quickblox.com/chat/Message/53aabe15e4b077ddd43e7fd3.json 

這裏是鏈接到文檔:) http://quickblox.com/developers/Chat#Update_message

所有您需要做的是

1>使Web服務調用API 「https://api.quickblox.com/chat/Message

注意 53aabe15e4b077ddd43e7fd3是你的消息ID :)如果你想看到的狀態發送到屬於特定對話的所有消息不追加到網址:)

2>在報頭字段發送內容類型:應用程序/ JSON和QB-令牌:current_user_token

3>和在身體請發送讀取= 1和chat_dialog_id = dialog_id :)

那爲已讀,因此未讀它所有屬於該對話中的消息將被更新對話框的消息數將爲0 :)

NSURL *url = [NSURL URLWithString:@"https://api.quickblox.com/chat/Message"]; 
NSMutableURLRequest *mutableRequest=[NSMutableURLRequest requestWithURL:url]; 
[mutableRequest setHTTPMethod:@"PUT"]; 
[mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[mutableRequest setValue:[QBSession currentSession].sessionDetails.token forHTTPHeaderField:@"QB-Token"]; 
NSString *jsonString=[NSString stringWithFormat:@"{\"read\": \"1\", \"chat_dialog_id\": \"%@\"}",dialogToSendReadStatus.id]; 
[mutableRequest setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]]; 
NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *uploadTask = [session dataTaskWithRequest:mutableRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    if(error){ 
      DLog(@"Error"); 
    } 
    else{ 
     DLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 
    } 
}]; 
[uploadTask resume]; 

我希望我回答了你的問題:)

編碼愉快:)