关于ios未读消息数问题

1.当关闭app后,获取的会话未读数量为空,但是并没有设置会员为已读,就是说,关闭app断开连接后会自动清除当前用户的未读消息数量
AVIMConversationQuery * query = [[LCIMClient ShareClient] conversationQuery];
query.limit = 10000;
/* 指定返回对话的最后一条消息 */
// query.cachePolicy = kAVCachePolicyNetworkElseCache;
query.option = AVIMConversationQueryOptionWithMessage;
__weak typeof(self)weakself = self;
[query findConversationsWithCallback:^(NSArray * _Nullable objects, NSError * _Nullable error) {
[weakself.recentchatview passconversations:objects];
}];未读书是通过查询列表累加的。

2.关于离线推送角标数量的控制,设置@"badge" : @"Increment"自增长时,角标数量会一直累加,请问不是设置会话已读会清空对应数量吗,怎么处理角标一直累加问题。
AVIMMessageOption *option = [[AVIMMessageOption alloc] init];
NSMutableDictionary * pushdata = [NSMutableDictionary dictionaryWithDictionary:@{@"alert" : @"[圖片]", @"sound" : @"default", @"badge" : @"Increment", @"nickname":[AFNetworkingQuest GetLoginUserInfo][@"nickName"],@"mutable-content":@(1)}];
if ([AFNetworkingQuest GetLoginUserInfo][@"picture"]) {
[pushdata setObject:[AFNetworkingQuest GetLoginUserInfo][@"picture"] forKey:@"imageAbsoluteString"];
}
option.pushData = pushdata;

[conversation sendMessage:message option:option callback:^(BOOL succeeded, NSError *error) {//带option发送推送。。。。。

}

问题一:当关闭app后,获取的会话未读数量为空,但是并没有设置会员为已读

你好,请问未读消息有两种处理方式:未读消息数量通知与离线消息通知您使用的是哪种方式?
「未读数是通过查询列表累加的」是什么意思?

问题二:怎么处理角标一直累加问题

App 的角标数量只受推送的 badge 数量的影响。与对话列表的未读数量无关。

badge 数量受以下因素的影响:

  • 收到未读消息时,服务端向客户端发推送时,推送中设置的 badge 参数。如果未读消息的推送设置了 badge 数量,会影响到 App 角标的展示。
  • 自己正常的业务逻辑发推送时,推送中设置的 badge 参数。

清除 Badge 数字的最好时机是打开应用的时候,文档参考:清除 Badge

1.未读数是通过那个查询接口拿的,conversation.unreadMessagesCount

你好,您对问题一的描述有些不清楚。

未读消息有两种处理方式:
1:未读消息数量通知
2:离线消息通知。

如果开启未读消息数量通知,需要在 AVOSCloud 初始化语句后面加上[AVIMClient setUnreadNotificationEnabled:YES]; 这种方式下 unreadMessagesCount 字段才会有值。

请您阅读下文档:未读消息。如果文档仍不能解决您的疑问,请详细描述您的问题。

设置[AVIMClient setUnreadNotificationEnabled:YES];后- (void)conversation:(AVIMConversation *)conversation didReceiveTypedMessage:(AVIMTypedMessage *)message
{
NSLog(@"富媒体消息:%@",message);
[self messagesDidReceive:@[message]];//
[[NSNotificationCenter defaultCenter]postNotificationName:DidReceiveLeanCloudMessageNoti object:message];//
}
接受消息的方法不走了,本来查会话列表是有未读数量的

那样设置关闭app有未读数,单接受消息怎么弄

  • (void)conversation:(AVIMConversation *)conversation didUpdateForKey:(NSString *)key

去拿key 为lastmessage作为新消息来源吗

设置未读消息后,发送了的离线消息不会走在线,那在会话列表里面没有推出去就不能一条条接新消息,只能去固定刷新多少条历史记录,这个有点坑,不能通知离线在线都走吗。

设置[AVIMClient setUnreadNotificationEnabled:YES];后,接受消息的方法不走了。

你好,未读消息数更新通知的机制为:当客户端上线时,会收到其参与过的对话的离线消息数量。客户端需要主动拉取离线消息。

并且在线用户可以正常调用接收消息的方法。

那样设置关闭app有未读数,单接受消息怎么弄,设置未读消息后,发送了的离线消息不会走在线

你好,如果用户离线,是不会回调接收消息方法的。离线消息的接收只有未读消息数量通知与离线消息通知两种。

目前在对话我是直接根据未读消息数量去查的离线消息,拿会话的最后一条消息去查,[conversation queryMessagesBeforeId:messageId timestamp:times limit:messagesNumber callback:^(NSArray * _Nullable objects, NSError * _Nullable error) {但是根据这个api查的话,返回的条数貌似不是最新的,而是本地最新的,但是直接拿数量去查 [conversation queryMessagesWithLimit:messagesNumber callback:^(NSArray * _Nullable objects, NSError * _Nullable error) {,返回的就是离线的那几条消息,是最新,这样貌似没什么问题

你好,关于对话的查询,有缓存机制。默认的策略是先走本地缓存的再走网络的。如果希望先走网络查询,可以使用
query.cachePolicy = kAVCachePolicyNetworkElseCache;

详细内容可以参考文档:缓存查询

[AVIMClient setUnreadNotificationEnabled:YES]

您好,我用的是最新的5.0.1 发现这个方法现在已经没有了!
请问目前离线消息是默认开启的吗?如果是的话,我监听didUpdateForKey方法发现没有响应,conversation对应的unreadMessagesCount也全部都是0,请问这个怎么解决啊?
如果不是默认开启的话,现在离线通知的机制是什么啊?查阅文档发现都是原来的。

您好,objc-sdk 最新版是 11.4.9