我将在应用商店和 1 个城市飞艇帐户上拥有多个应用程序,以向所有这些设备发送推送通知。我想知道的是,每台 Apple 设备是否在所有应用程序中都具有相同的“推送令牌”?这更像是一种数据库架构,因此如果一台设备使用我的许多应用程序,我就不会多次复制推送令牌。
如果每个 Apple 设备为它安装的每个应用程序生成一个唯一的推送令牌,我的架构就需要更改。
我将在应用商店和 1 个城市飞艇帐户上拥有多个应用程序,以向所有这些设备发送推送通知。我想知道的是,每台 Apple 设备是否在所有应用程序中都具有相同的“推送令牌”?这更像是一种数据库架构,因此如果一台设备使用我的许多应用程序,我就不会多次复制推送令牌。
如果每个 Apple 设备为它安装的每个应用程序生成一个唯一的推送令牌,我的架构就需要更改。
每个设备的设备令牌并不完全是唯一的;它们在每个操作系统安装中都是唯一的。因此,如果用户购买了新设备但没有从备份中恢复,那么他们将获得一个新的设备令牌。如果设备被擦除,它将获得一个新的设备令牌,因此新用户不会收到旧用户的消息。
此外,对于使用沙盒的开发应用程序和使用生产系统的分发应用程序,会返回不同的令牌。
由于单个用户可能将您的应用程序合法地安装在多个设备上(例如 iPhone 和 iPad),因此为了安全起见,在用户和设备令牌之间建立多对多关系会更安全。
既然您提到了 Urban Airship,您可能会发现我们的别名功能有助于此类事情;您可以在我们最后为不同的令牌分配一个非唯一的别名,然后我们将跟踪您的用户和他们的设备令牌之间的映射。请参阅UA 文档的注册和推送部分。
编辑:更新,因为我在这个旧答案上看到了更多的赞成票。从 iOS 7 开始,每个应用程序的设备令牌都是唯一的,即使在同一设备上也是如此。
根据苹果最新文档:
永远不要在你的应用中缓存设备令牌;相反,在需要时从系统中获取它们。当某些事件发生时,APNs 会向您的应用程序发出一个新的设备令牌。设备令牌保证是不同的,例如,当用户从备份恢复设备时,当用户在新设备上安装您的应用程序时,以及当用户重新安装操作系统时。获取令牌而不是依赖缓存,可确保您拥有提供商与 APN 通信所需的当前设备令牌。当您尝试获取设备令牌但它没有更改时,获取方法会快速返回。 有关更多信息,请查看苹果文档