为什么每次用户启动应用时都会注册推送通知?

Mar*_*ard 16 iphone push-notification apple-push-notifications ios

在Apple文档中,您可以找到以下句子:

应用程序应在每次启动时进行注册,并为其提供者提供当前令牌.它调用registerForRemoteNotificationTypes:启动注册过程.

因此,当我在我的应用程序中实现推送通知时,我必须注册该设备,并且我按照他们在该文档中所说的做了:每次用户启动我的应用程序时都会注册.我从APNS收到的令牌对于给定用户始终是相同的.

我的问题是:如果APNS给我总是相同的令牌,我为什么每次都需要注册?

如果用户刷了他的iPhone或应用程序,我读到的地方可能会改变.这是唯一的案例吗?

谢谢 !

MrC*_*nky 29

我从APNS收到的令牌对于给定用户始终是相同的.

除非它不是,基本上是因为没有什么可以挂在iPhone设置中的"用户".每个设备的每个应用程序的设备令牌始终相同.因此,同一设备上的不同应用程序会获得不同的令牌.两个不同设备上的相同应用程序获得两个不同的令牌.

需要注意的重要一点是,APNS指南中提到的是,用户可以备份他们的应用程序,设置,一切.然后他们可以把手机放下马桶.当他们获得更换手机时,他们可以将备份恢复到新手机上.宾果游戏 - 相同的应用程序,相同的用户,不同的设备和不同的令牌.

至于你的应用程序,自上次运行以来没有任何变化 - 它现在不知道它实际上在不同的设备上运行.它知道的唯一方法是因为它要求"当前"设备令牌,并且它是前一个不同的令牌.

您可以选择缓存令牌并根据您刚收到的令牌进行检查(例如将其保存在您的NSUserDefaults中) - 这样您就不必将其传回服务器,除非它自上次运行后已经更改,但您绝对必须检查,否则你的用户会抱怨他们更换手机后不再收到推送通知.

  • 我认为你误解了"使用"在这种情况下的含义.**app**正在检查它刚从APNS呼叫中获取的令牌,而不是本地存储在首选项中的内容.这很便宜,不涉及任何网络访问或联系您的服务器.就服务器而言,没有任何改变,所以它不需要知道.如果令牌已经改变,那么服务器绝对**需要知道,因为下次需要使用不同的令牌发送推送通知. (2认同)