如何在群组和 Public 聊天的情况下使用 QMServicesManager 从对话框列表中删除对话框?
How to remove dialog from dialog list Using QMServicesManager in case of Group and Public chat?
这个问题是我上一个问题的扩展,有新的要求。 。
所以我的新要求是 :
现在如果我想删除群聊应该怎么处理?如果我在其中使用相同的方法,我们会将 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 创建组。
那么这个方法对所有不同的 3 个用户有何用处。我的意思是如果 User1 使用
会发生什么
[ServicesManager.instance.chatService deleteDialogWithID:dialog.ID completion:nil];
以及如果 User2 和 User3 使用相同的方法会发生什么。
天气它作为退出对话框或删除对话框。我有点困惑这种方法在群组和 public 聊天的情况下如何适用于不同的用户。
问题三:有没有其他退出群聊的方法?我希望它是清楚的!!
你说的对,目前没有为所有用户删除对话框的界面。但请记住,只有群组对话的所有者(其创建者)can delete it。所有者不能更改,即使他将离开对话框。我们会考虑在不久的将来添加这样的方法,但现在您可以根据需要轻松修改它(欢迎您从我们的服务存储库中分叉)。
如果任何用户使用此方法 - 他将离开该组(通过服务器),但组本身仍将与其他成员一起存在。但是其他成员只有在他们从 REST 重新下载对话框时才会知道离开的用户。所以为了实时通知他们,我们在离开前发送 XMPP 通知,like this one
与我在 2 中所说的差不多。通过 REST (QBRequest) 请求通知用户我们离开和删除对话框。
这个问题是我上一个问题的扩展,有新的要求。
所以我的新要求是 :
现在如果我想删除群聊应该怎么处理?如果我在其中使用相同的方法,我们会将 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 创建组。
那么这个方法对所有不同的 3 个用户有何用处。我的意思是如果 User1 使用
会发生什么[ServicesManager.instance.chatService deleteDialogWithID:dialog.ID completion:nil];
以及如果 User2 和 User3 使用相同的方法会发生什么。
天气它作为退出对话框或删除对话框。我有点困惑这种方法在群组和 public 聊天的情况下如何适用于不同的用户。
问题三:有没有其他退出群聊的方法?我希望它是清楚的!!
你说的对,目前没有为所有用户删除对话框的界面。但请记住,只有群组对话的所有者(其创建者)can delete it。所有者不能更改,即使他将离开对话框。我们会考虑在不久的将来添加这样的方法,但现在您可以根据需要轻松修改它(欢迎您从我们的服务存储库中分叉)。
如果任何用户使用此方法 - 他将离开该组(通过服务器),但组本身仍将与其他成员一起存在。但是其他成员只有在他们从 REST 重新下载对话框时才会知道离开的用户。所以为了实时通知他们,我们在离开前发送 XMPP 通知,like this one
与我在 2 中所说的差不多。通过 REST (QBRequest) 请求通知用户我们离开和删除对话框。