Quickblox nicht behandelt Status der Nachrichten automatisch auf seine eigenen :) Um liest den Lesestatus der Nachrichten-Client-Anwendungen zu halten hat zu kooperieren als auch :)
Um den Lesestatus zu erhalten alle Nachrichten, die Sie für die auszusenden erwarten Sie den Lesestatus als kenntliches markiert werden muss :)
Hier ist ein Codebeispiel von QB docs
QBChatMessage *message = [QBChatMessage markableMessage];
[message setText:@"Hi there!"];
[message setRecipientID:1022725];
es sei angenommen, dass Benutzer 1 Hallo dort sendet an Benutzer 2 :) Jetzt der Code in U Das Gerät von ser 2 sollte informieren, dass der Benutzer die Nachricht an quickblox server gesehen oder gelesen hat :) Wenn der QB-Server den Status quickBlox für eine bestimmte QBChatMessage informiert, teilt der Benutzer ihm mit, dass Benutzer 2 die Nachricht gelesen hat :)
Beim Empfang Nachricht User 2 sollte QB-Server über den Status informiert mit
if([message markable]){
[[QBChat instance] readMessage:message completion:^(NSError * _Nullable error) {
}];
}
Sobald Benutzern 2 QB-Server über den Lesestatus informiert, QB Server Benachrichtigung an Benutzer1 sendet die gleiche Anerkennung, der erfasst werden mit :)
- (void)chatDidReadMessageWithID:(NSString *)messageID dialogID:(NSString *)dialogID readerID:(NSUInteger)readerID
{
}
Sobald der Lesestatus für einen bestimmten QBChatMessage Empfangen Sie die Benutzeroberfläche aktualisieren können den gesehenen Status für diese Nachricht zu zeigen :)
TIP
Nun, wie Sie vielleicht bemerkt haben, las Status pro Nachricht Basis funktioniert diese sehr irritierend sehr sein kann und zu komplizierter Logik führt Lesestatus auf alle Nachrichten nacheinander zu senden, wenn Sie die ganze Menge von Nachrichten mit
[QBRequest messagesWithDialogID:@"54fda689535c125b0700bbfa" extendedRequest:nil forPage:resPage successBlock:^(QBResponse *response, NSArray *messages, QBResponsePage *responcePage) {
} errorBlock:^(QBResponse *response) {
NSLog(@"error: %@", response.error);
}];
So einfacher Lösung erhalten ist:
Anstatt den Lesestatus versandt werden, um alle Nachrichten in einem Array eines nach dem anderen können Sie nur die gesehene Nachricht senden, die Nachricht zu halten, wenn der Benutzer auf dem Dialog tippt die Nachrichten im Innern :)
zu sehen einmal gibt der Benutzer die Chats Bildschirm die ganze Nachricht zu diesem DALOG gehören, werden ohnehin als gelesen betrachtet werden (das ist, wie alle Messaging-Anwendungen einschließlich WhatsApp benimmt)
so gesehen Status sendet nur auf die letzte Nachricht macht Sinn :) Und auf Wenn Sie den Status "Gesehen" für eine bestimmte Nachricht empfangen, ändern Sie den Status "Gesehen" in alle Nachrichten mit einem gesendeten Datum, das kleiner ist als die Nachricht, die den Status "Gesehen" erhalten hat:
EDIT
Wie dem auch sei Alle gesagt gibt es Szenarien, in denen, in denen Sie nur den Lesestatus auf alle Meldungen, die zu einem bestimmten Dialog senden müssen als Ungelesen-Anzahl als auch auf dem Lesestatus hängt :)
zum Beispiel, wenn Sie die ungelesenen Nachrichtenanzahl für einen bestimmten Dialog als 0 von 100, so seine nicht advicable senden gesehen Status an alle 100 :)
aktualisieren möchten, können Sie die Verwendung dieser API machen.Docs sagt klar (und ich es in meiner app auch verwende) Sie den Lesestatus auf alle Nachrichten nur nicht die Nachrichten-ID senden :)
Hier wird die 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
Zugehörigkeit zu einem bestimmten Dialog einstellen
Hier ist der Link zu docs :) http://quickblox.com/developers/Chat#Update_message
Alles, was Sie tun müssen, ist zu
1> einen Web-Service-Aufruf zu api machen "https://api.quickblox.com/chat/Message"
Hinweis 53aabe15e4b077ddd43e7fd3 ist Ihre Nachricht ID :) Wenn Sie den Status gesehen auf alle Nachrichten, die zu einem bestimmten Dialog hängen Sie ihn an URL nicht senden wollen :)
2> Im Header-Feld Content-Type senden: Anwendung/json und QB-Token:
3> und in Körper current_user_token bitte 1 lesen = senden und chat_dialog_id = Dialog_Id :)
das ist es alle zu diesem Dialog gehören, Nachrichten werden als gelesen aktualisiert werden und daher ungelesen die Nachrichtenanzahl des Dialogs wird 0 sein :)
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];
Ich hoffe, dass ich Ihre Frage beantwortet :)
Glücklich Codierung :)