Quickblox iOS-未读取消息

Quickblox iOS-未读取消息,ios,objective-c,quickblox,Ios,Objective C,Quickblox,我遇到了一个问题,消息在Quickblox中没有被标记为已读,即使消息确实正在被读取 有没有一种简单的方法可以将对话框中的所有消息标记为在最新的Quickblox iOS SDK中读取的消息?Quickblox本身不会自动处理消息的读取状态:)为了保持消息的读取状态,客户端应用程序也必须配合:) 为了接收已读状态,您发送的所有预期已读状态的邮件都必须标记为可标记:) 下面是来自QB文档的示例代码 QBChatMessage *message = [QBChatMessage markableMe

我遇到了一个问题,消息在Quickblox中没有被标记为已读,即使消息确实正在被读取


有没有一种简单的方法可以将对话框中的所有消息标记为在最新的Quickblox iOS SDK中读取的消息?

Quickblox本身不会自动处理消息的读取状态:)为了保持消息的读取状态,客户端应用程序也必须配合:)

为了接收已读状态,您发送的所有预期已读状态的邮件都必须标记为可标记:)

下面是来自QB文档的示例代码

QBChatMessage *message = [QBChatMessage markableMessage];
[message setText:@"Hi there!"];
[message setRecipientID:1022725];
假设用户1向用户2发送Hi:)现在,用户2设备中的代码应通知用户2已看到或已向quickblox服务器读取消息:)在向quickblox服务器通知特定QBChatMessage的读取状态时,QB服务器向用户1发送通知,告知用户2已读取消息:)

在收到消息时,用户2应通知QB服务器使用的状态

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

        }];
    }
一旦用户2将读取状态通知QB服务器,QB服务器就会向用户1发送通知,确认相同的状态,可以使用以下命令捕获此信息:)

收到特定QBChatMessage的读取状态后,您可以更新UI以显示该消息的可见状态:)

提示

现在,正如您可能已经注意到的,读取状态是基于每条消息的,这可能会非常令人恼火,并导致复杂的逻辑,当您使用接收全部消息时,将读取状态逐个发送给所有消息

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

} errorBlock:^(QBResponse *response) {
    NSLog(@"error: %@", response.error);
}];
因此,简单的解决方案是:

与逐个向数组中的所有消息发送读取状态不同,您可以仅在用户点击对话框查看其中的消息时发送已看到的消息以保持消息的持续时间:)

一旦用户进入聊天屏幕,属于该dalog的所有消息都将被视为已读(这就是所有消息应用程序(包括whatsApp)的行为)

因此,仅将SEED状态发送到最后一条消息是有意义的:)并且在接收到特定消息的SEED状态时,您将SEED状态更改为发送日期小于接收SEED状态的消息的所有消息:)

编辑

总之,在某些情况下,您只需将已读状态发送给属于特定对话框的所有邮件,因为您的未读邮件数也取决于已读状态:)

例如,如果要将特定对话框的未读邮件计数从100更新为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
以下是指向文档的链接:)

你所要做的就是

1> 对api“”进行web服务调用

注意53aabe15e4b077ddd43e7fd3是您的邮件id:)如果您想将看到的状态发送到属于特定对话框的所有邮件,请不要将其附加到URL:)

2> 在标题字段中发送内容类型:application/json和QB Token:current_user_Token

3> 在正文中,请发送read=1和chat\u dialog\u id=dialog\u id:)

也就是说,属于此对话框的所有邮件都将更新为已读,因此该对话框的未读邮件计数将为0:)

我希望我回答了你的问题:)


快乐编码:)

Quickblox本身不会自动处理消息的读取状态:)为了保持消息的读取状态,客户端应用程序也必须配合:)

为了接收已读状态,您发送的所有预期已读状态的邮件都必须标记为可标记:)

下面是来自QB文档的示例代码

QBChatMessage *message = [QBChatMessage markableMessage];
[message setText:@"Hi there!"];
[message setRecipientID:1022725];
假设用户1向用户2发送Hi:)现在,用户2设备中的代码应通知用户2已看到或已向quickblox服务器读取消息:)在向quickblox服务器通知特定QBChatMessage的读取状态时,QB服务器向用户1发送通知,告知用户2已读取消息:)

在收到消息时,用户2应通知QB服务器使用的状态

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

        }];
    }
一旦用户2将读取状态通知QB服务器,QB服务器就会向用户1发送通知,确认相同的状态,可以使用以下命令捕获此信息:)

收到特定QBChatMessage的读取状态后,您可以更新UI以显示该消息的可见状态:)

提示

现在,正如您可能已经注意到的,读取状态是基于每条消息的,这可能会非常令人恼火,并导致复杂的逻辑,当您使用接收全部消息时,将读取状态逐个发送给所有消息

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

} errorBlock:^(QBResponse *response) {
    NSLog(@"error: %@", response.error);
}];
因此,简单的解决方案是:

与逐个向数组中的所有消息发送读取状态不同,您可以仅在用户点击对话框查看其中的消息时发送已看到的消息以保持消息的持续时间:)

一旦用户进入聊天屏幕,属于该dalog的所有消息都将被视为已读(这就是所有消息应用程序(包括whatsApp)的行为)

因此,仅将SEED状态发送到最后一条消息是有意义的:)并且在接收到特定消息的SEED状态时,您将SEED状态更改为发送日期小于接收SEED状态的消息的所有消息:)

编辑

总之,在某些情况下,您只需将已读状态发送给属于特定对话框的所有邮件,因为您的未读邮件数也取决于已读状态:)

例如,如果要将某个特定对话框的未读邮件计数从100更新为0,使其不是advica