关于iOS角标,当中途有消息延迟下发时,角标数量错误

ios
标签: #<Tag:0x00007fb84d592498>

(Liven) #1

在使用极光推送的时候出现这种情况:
APP 客户端推送给极光服务器badge的数量,比如10条,这时后台调用API 连续发了10条推送,按照正常的逻辑的话,客户端这边红点角标的数量应该是从10条、11条、12条 顺序升到20条的数量,但是如果在中间的第15条发送的时候未成功或网络波动等原因造成发送未成功,但是极光服务器是并发发送这些消息的,所以从第16条还是会继续发送,到了第19条时,第15条又发送成功了,这是角标的数量就会变成15,跟实际的未读消息对不上

请问这个能怎么解决?谢谢


标签推送 角标的数量错误
#2

1、请说清楚你们管理角标的全部逻辑

2、如果你们推送的时候,每条消息的badge都写的+1,那么不会出现你说的情况

3、[quote=“Liven, post:1, topic:20728”]
发送的时候未成功或网络波动等原因造成发送未成功
[/quote]

不知道你说的这种是什么清楚,未成功之后就不会自动的又重发导致成功。

已经成功发到Apple服务器的消息,但是由于你App网络波动了,此时消息发不下去,那么Apple会存为离线消息等在线的时候再发,那么在收到第16条消息之前,肯定会先收到第15条消息,另外,如果波动时间较长,Apple只保留1条消息,可能第15条消息就收不到了,被删除了。之后也不可能收到。除非你们自己重新请求推送了一次,那样也变成了第21条消息


(Liven) #3

我们这边的逻辑跟你们画的图是一样的,APP 在前台的时候,如果badge有变化,我们这个就调用极光的setBadge,更新未读数量。但是如果APP 进入后台或者被杀死了,那么APP端就不能即时的更新badge的数量到极光,极光服务器只能是根据我最后一次的更新的badge的数量,不断的+1。现在有个问题就是,如果我们后台连续发了20条推送,极光这边是不是并发依次发送到苹果的APNS?


#4

你们后台请求了,我们收到就将消息往Apple服务器发


(Liven) #5

也就是送到消息就发送。如果10条推送,发到第5条你们服务器的线程阻塞了,这时第六条消息怎么处理?


#6

我们线程阻塞了,等通的时候,自然是从第5条开始继续发啊,难不成堵的时候只堵第五条,第六条就不堵了?通的时候就偏偏要绕过第5条,从第6条开始发?


(Liven) #7

哦!就是如果前面的消息还没发送出去,后面的消息就会等待,除非这条消息失败了,那么就忽略,不重发。照这样的话,角标的数量只会跳格增加,不会变小。
我这边的情况是这样的,当APP退到后台或者被杀死了,有很多推送消息过来,badge的数量会变小,比如一直增加,增加到100的时候,某一条消息再过来的话,变成了98。弄得很疑惑了


(Liven) #8

https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#notification 请问后天设置自动加1,是设置这个链接中的“badge”这个字段吗?因为我看到之前的帖子https://community.jiguang.cn/t/topic/13924/6,里面的评论中,指出后台不是通过setBadge,而是autoBadge或者incrBadge。
谢谢


#9

你可以获取一下这些信息的具体内容,包括msgid,badge的值,对照你推送的msgid和badge去找原因

另外,刚刚说的是我们服务器的推送过程,有疑问可以提供几条消息的msgid和你设备的registrationID,我来查具体他推下去的时间是否是依次排队的

Apple服务器那边理应也是排队推送,但无法去查证,可能有小几率会出现明明这条消息先发,却实际收到的时候却在后面一点点,我们这边的推送时间点可以查证。

根据不同的SDK的设定,json字段就是badge,但具体操作看你用的什么SDK。


(Liven) #10

后台用的是PHP SDK,这个用影响吗?


(Liven) #11

使用极光的后台发送一条推送,是根据别名的推送,点击发送成功,但是在极光中查看发送历史时,都是目标为0,成功为0。这是为什么?:joy:


#12

用PHP SDK就看PHP的规则

截图并提供
推送的消息的msgid(MessageID)和收不到这条消息的设备的registrationID(在客户端获取,无论以何种方式做推送,该信息必须提供)
信息如何获取: 极光产品相关提问简要说明


(Liven) #13

registrationID: 1517bfd3f7fde245f8d
msg_id:“2251800433937302”


#14

1、你官网看到的是0|0?截图说明,我这里看到的不是这样的

2、恕不的消息的原因是你这个设备并没有设置该别名。最起码推送的当时没有设置


(Liven) #15

别名是设置的,并且返回的参数提示已经设置成功


#16

1、你给我的消息的msgid是API推送的,你截图是web推送,麻烦你对应好消息和msgid好嘛?点详情!

2、我查出来的这条消息,他就是没有设置别名,不在目标内的


(Liven) #17

:grinning:没有啊!我用web推送就是为了测试,结果碰到另外一个问题了,也反应给你。


#18

:confused:那你倒是分开说啊

官网推送,选择开发环境,他就能收到了

客户端的环境与证书有关!
关于测试两种环境的说明: 常见问题 - JPush 合集(持续更新)


(Liven) #19

这是苹果APNS 的最新协议,请问如果你们将消息推送到APNS,APNS 返回的是错误码,你们这边会继续重现推送这条消息给APNS还是丢弃?