Quickblox он не обрабатывает состояние сообщений автоматически на его собственном :) прочитал Для того, чтобы сохранить статус чтения из сообщений клиентских приложений должен сотрудничать, а :)
Для того, чтобы получить статус чтения все сообщения, которые отсылают, для которых вы ожидаете, что статус чтения должен быть отмечен как маркируемый :)
Вот пример кода из QB Docs
QBChatMessage *message = [QBChatMessage markableMessage];
[message setText:@"Hi there!"];
[message setRecipientID:1022725];
Предположим, что пользователь 1 посылает Привет пользователю 2 :) Теперь код в U Ser 2 в устройство должно сообщить, что пользователь 2 видел или прочитать сообщение для quickblox сервера :) На информирование о состоянии чтения к серверу Quickblox сюда конкретного QBChatMessage, QB сервер отправляет уведомление пользователя 1, говоря ему, что пользователь 2 Прочитала сообщение :)
При получении сообщения пользователя 2 должен информировать сервер QB о состоянии с помощью
if([message markable]){
[[QBChat instance] readMessage:message completion:^(NSError * _Nullable error) {
}];
}
После User 2 информирует QB сервер о состоянии чтения, QB сервер отправляет уведомление Пользователя1 подтверждающее то же самое, что может быть получены с помощью :)
- (void)chatDidReadMessageWithID:(NSString *)messageID dialogID:(NSString *)dialogID readerID:(NSUInteger)readerID
{
}
После получения статуса чтения для конкретного QBChatMessage вы можете обновить пользовательский интерфейс, чтобы показать видел статус этого сообщения :)
TIP
Теперь, как вы могли заметить, прочитать статус работы на основе сообщений , это может быть очень раздражает и приводит к сложной логики для отправки чтения статуса для всех сообщений, один за другим, когда вы получаете весь много сообщений с использованием
[QBRequest messagesWithDialogID:@"54fda689535c125b0700bbfa" extendedRequest:nil forPage:resPage successBlock:^(QBResponse *response, NSArray *messages, QBResponsePage *responcePage) {
} errorBlock:^(QBResponse *response) {
NSLog(@"error: %@", response.error);
}];
Так простое решение:
Вместо того, чтобы посылать статус чтения всех сообщений в массиве по одному вы можете отправить увиденные сообщения только последнее сообщение, когда пользователь вводит в диалоговом окне, чтобы увидеть сообщения внутри него :)
Как только пользователь войдет в экран чатов, все сообщения, принадлежащие этому dalog, будут считаться прочитанными (Thats, как ведут себя все приложения для обмена сообщениями, включая whatsApp)
Таким образом, отправка видимого статуса только в последнее сообщение имеет смысл :) И на получив статус видели для конкретного сообщения, которое вы видели изменения статуса всех сообщений с отправленной датой меньше, чем сообщение, которое получило статус видели :)
EDIT
Во всяком случае все сказанное есть сценарии, где, в которых нужно просто отправить статус чтения всех сообщений, относящихся к конкретному диалогу как ваше непрочитанных количество сообщений зависит от состояния чтения, а :)
Например, если вы хотите обновить непрочитанные сообщения для конкретного диалога как 0 из 100 так что его не advicable отправить видел статус на все 100 :)
вы можете использовать этот API.Docs ясно говорит (и я использую его в моем приложении, а) вы можете установить статус чтения для всех сообщений, относящихся к конкретному диалогу просто не передать идентификатор сообщения :)
Вот в 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> сделать вызов веб-службы УПУ «https://api.quickblox.com/chat/Message»
Уведомление 53aabe15e4b077ddd43e7fd3 Ваш идентификатор сообщения :) Если вы хотите отправить видел статус всех сообщений, относящихся к конкретному диалогу Dont добавить его к URL :)
2> В поле заголовка отправить Content-Type: приложение/JSON и QB-Токен: current_user_token
3> и в теле, пожалуйста, отправить прочитать = 1 и chat_dialog_id = dialog_id :)
Thats это все сообщения, относящиеся к этому диалогу будет обновляться по мере чтения и, следовательно, непрочитанные количество сообщений в диалоговом окне будет 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];
Я надеюсь, что я ответил на ваш вопрос :)
Happy кодирования :)