iOS上的重复推送通知

时间:2013-08-06 07:51:40

标签: iphone ios push-notification apple-push-notifications

这个问题可能与Duplicate Apple APNS push notifications?相同,但由于那个问题没有得到答案,而且我有更多的信息,我会再试一次。

重现问题的步骤:

  • 设置通知中心以将通知显示为提醒,这将使问题更加明显。
  • 确保应用未在前台运行。
  • 快速连续发送3个相同的推送通知。
  • 等到消息到达手机后,您现在必须解除警报3次。
  • 现在再发送1个通知,这与之前的通知不一致。
  • 您现在可以获得最后一次通知,但您还会再次显示之前的通知之一。这就是问题所在。
  • 如果您继续发送单个通知,则前3个中的一个将不会弹出。

以下是按照这些步骤操作的视频,其中清楚地显示了问题:

http://youtu.be/TSqt8S4FY6w

我们就像Remy Gale在上面的链接问题中所做的一样,确保我们的通知以正确的方式发送,每次通知只发送一次。我们还用sandbox-apns和production-apns对它进行了测试,两者的行为完全相同。

如果app-badge设置为0,问题就会消失,从而会从通知中心删除所有通知。手动删除通知无济于事。

UIApplication *app = [UIApplication sharedApplication];
app.applicationIconBadgeNumber = 0;

但这不是解决方案。

如果所有通知都包含唯一文本,则不会出现此问题。向警报文本添加GUID将使问题消失。将它作为自定义属性或本地化参数添加到apns-payload中将无济于事,因此这也不是解决方案。

这可能很少发生在带有实时应用程序的生产环境中,但它可能会发生,当它发生时,它对用户来说真的很烦人!

有谁知道为什么会这样?有没有人有可行的解决方案?

2 个答案:

答案 0 :(得分:7)

这封适用于Gmail的Google Group版本来自已经研究过该错误的用户提供的条目,其中包含可能的解决方法。根据该条目,该错误在iOS 5中不存在,但在iOS 6中引入。

解决方法只是在标题上附加一个随机数Zero-width non-joiner,以确保唯一性。

答案 1 :(得分:0)

这可能是服务器在向APN发送推送通知时选择的时间戳的问题。只选择最新的时间戳。