iphone - 为什么每次用户启动应用程序时都要注册推送通知?

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

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

An application should register every time it launches and give its provider the current token. It calls registerForRemoteNotificationTypes: to kick off the registration process.

因此,当我在我的应用程序中实现推送通知时,我必须注册设备,并且我按照文档中的说明进行操作:每次用户启动我的应用程序时进行注册。 对于给定用户,我从 APNS 收到的 token 始终相同。

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

我在某处读到,如果用户滑动他的 iPhone 或应用程序, token 会发生变化。是唯一的情况吗?

谢谢!

最佳答案

The token that I receive from the APNS is always the same for a given user.

除非它不是,主要是因为在 iPhone 设置中没有任何东西可以作为“用户”。每个设备的每个应用程序的设备 token 始终相同。因此,同一设备上的不同应用程序会获得不同的 token 。两个不同设备上的同一个应用会获得两个不同的 token 。

需要注意的关键一点是,APNS 指南中提到了这一点,即用户可以备份他们的应用程序、设置和所有内容。然后他们就可以 Handlebars 机丢到马桶里了。当他们拿到替换手机时,他们可以备份并将其恢复到新手机上。 Bingo - 相同的应用程序、相同的用户、不同的设备、和不同的 token

就您的应用而言,自上次运行以来没有任何变化 - 它不知道它现在实际上是在不同的设备上运行。它知道的唯一方法是因为它要求“当前”设备 token ,嘿,这是与上次不同的 token 。

您可以选择缓存 token 并根据您刚刚收到的 token 检查它(例如,将其保存在您的 NSUserDefaults 中)- 这样您就不必将它传回服务器,除非它自上次运行以来发生了变化,但您绝对必须检查,否则您的用户会提示他们更换手机后不再收到推送通知。

关于iphone - 为什么每次用户启动应用程序时都要注册推送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117395/

相关文章:

iphone - 以编程方式设置 UIView 的自动调整大小掩码?

iphone - 如何在设备重启时在后台运行 ios 应用程序?

iphone - 控制主音量 - iPhone、Cocoa Touch

ios - 调整tableHeaderView或tableFooterView的大小后,UITableView contentSize未更新

IOS 使用 presentModalViewController 显示一些 Controller

android - 图片推送通知angularjs/ionic

iphone - 从 EventStore EventKit iOS 获取所有事件

ios - 超强音频播放器暂停位置

ios - Xcode 6 中的 Mapkit 仅在放大时显示日期线以西的叠加层(使用 Swift)

javascript - 当用户访问网站时,是否可以使用 Service Worker 显示通知?