昨天的为什么说只有远程通知才是最吼的!(续)更新了。增加了新的缺点。这篇文章就是为了解决这个新缺点的。
新缺点
远程通知用久了,你会发现,有时Provider
服务器会在你要求发送远程通知的时候回复你错误,说token
未注册之类的。如果你之前能成功发送远程通知,那么这个错误指的不是token
未注册,而是过期了。是的,远程通知注册之后的token
,可能过期。
token
会过期?
哪些情形- 一种是
token
用了一段时间会过期。这个一段时间是多久,苹果并未说明,我这里测试平均至少是一天以上。 - 当你的程序被卸载并重新安装。这个卸载指的是从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发消息,让它重新注册通知。