肇鑫的技术博客

业精于勤,荒于嬉

为什么说只有远程通知才是最吼的!(续+1)

昨天的为什么说只有远程通知才是最吼的!(续)更新了。增加了新的缺点。这篇文章就是为了解决这个新缺点的。

新缺点

远程通知用久了,你会发现,有时Provider服务器会在你要求发送远程通知的时候回复你错误,说token未注册之类的。如果你之前能成功发送远程通知,那么这个错误指的不是token未注册,而是过期了。是的,远程通知注册之后的token,可能过期。

哪些情形token会过期?

  1. 一种是token用了一段时间会过期。这个一段时间是多久,苹果并未说明,我这里测试平均至少是一天以上。
  2. 当你的程序被卸载并重新安装。这个卸载指的是从iOS上卸载。因为watchOS不能直接注册远程通知,因此从watchOS卸载,再重新安装无影响。

解决方案

知道问题的原理,就可以开始解决了。我的思路是,既然远程通知的token会过期,过期的表现在app看来就是通知不来。那么可以通过计算通知的间隔来决定何时重新注册通知。比如,我的通知设定在整点和整点20分通知。且整点的通知了,之后的20分钟的那么就不通知了。因此,不来的情形是这样:

上次通知时间 没来的通知 没来的通知 间隔时长
9:00 10:00 10:20 80分钟
9:20 10:00 10:20 60分钟


可以看出来,理论上只要连续80分钟没有通知过来,就可以认为通知出了问题。实际上,考虑远程通知的延迟,可以将间隔时长设定为90分钟。即连续时长90分钟没有通知过来,就通过session给iOS发消息,让它重新注册通知。

系列文章

为什么说只有远程通知才是最吼的!
为什么说只有远程通知才是最吼的!(续)
为什么说只有远程通知才是最吼的!(续+1)