Как удалить диалог из списка диалогов, используя QMServicesManager в случае группового и публичного чата?
Этот вопрос является дополнением к моему предыдущему вопросу с новыми требованиями. Это мой предыдущий вопрос.
Итак, моё новое требование :
Теперь, если я хочу удалить групповой чат, как я должен справиться с этим? Если я использую тот же метод внутри него, мы передаем forAllUsers как "NO", который жестко запрограммирован. написано внутри QMChatServices.m
- (void)deleteDialogWithID:(NSString *)dialogId completion:(void (^)(QBResponse *))completion {
NSParameterAssert(dialogId);
__weak __typeof(self)weakSelf = self;
[QBRequest deleteDialogsWithIDs:[NSSet setWithObject:dialogId] forAllUsers:NO successBlock:^(QBResponse *response, NSArray *deletedObjectsIDs, NSArray *notFoundObjectsIDs, NSArray *wrongPermissionsObjectsIDs) {
//
[weakSelf.dialogsMemoryStorage deleteChatDialogWithID:dialogId];
[weakSelf.messagesMemoryStorage deleteMessagesWithDialogID:dialogId];
if ([weakSelf.multicastDelegate respondsToSelector:@selector(chatService:didDeleteChatDialogWithIDFromMemoryStorage:)]) {
[weakSelf.multicastDelegate chatService:weakSelf didDeleteChatDialogWithIDFromMemoryStorage:dialogId];
}
[weakSelf.loadedAllMessages removeObjectsForKeys:deletedObjectsIDs];
if (completion) {
completion(response);
}
} errorBlock:^(QBResponse *response) {
//
if (response.status == QBResponseStatusCodeNotFound || response.status == 403) {
[weakSelf.dialogsMemoryStorage deleteChatDialogWithID:dialogId];
if ([weakSelf.multicastDelegate respondsToSelector:@selector(chatService:didDeleteChatDialogWithIDFromMemoryStorage:)]) {
[weakSelf.multicastDelegate chatService:weakSelf didDeleteChatDialogWithIDFromMemoryStorage:dialogId];
}
}
else {
[weakSelf.serviceManager handleErrorResponse:response];
}
if (completion) {
completion(response);
}
}];
}
Так что теперь мое сомнение..
Вопрос 1: Что делать, если мы хотим удалить диалог для всех пользователей. Вопрос 2: Допустим, есть 3 пользователя. Пользователь1, Пользователь2 и Пользователь3. Теперь User1 создал группу с User2 и User3.
Так как этот метод полезен для всех трех разных пользователей. Я имею в виду, что произойдет, если User1 использует
[ServicesManager.instance.chatService deleteDialogWithID:dialog.ID completion:nil];
и что происходит, если User2 и User3 используют один и тот же метод.
Погода это работает как выход из диалога или удаление диалога. Меня немного смущает, как этот метод работает для разных пользователей в случае группового и публичного чата.
Вопрос 3: Есть ли другой способ выйти из группового чата? Надеюсь понятно!!
1 ответ
Вы правы, сейчас нет интерфейса для удаления диалога для всех пользователей. Но имейте в виду, что только владелец диалогового окна группы (его создатель) может удалить его. И владелец не может быть изменен, даже если он покинет диалоговое окно. Мы рассмотрим возможность добавления такого метода в ближайшем будущем, но сейчас вы можете легко изменить его для своих нужд (добро пожаловать в наш репозиторий сервисов).
Если кто-либо из пользователей использует этот метод - он будет вне этой группы (по серверу), но сама группа все еще будет существовать с другими членами. Но другие участники будут знать о оставленных пользователях только тогда, когда они снова загрузят диалог из REST. Таким образом, чтобы уведомить их в прямом эфире, мы отправляем уведомления XMPP перед отъездом, как этот
Почти то, что я сказал в 2. Уведомление пользователей в прямом эфире о нашем выходе и удалении диалога с помощью запроса REST (QBRequest).