我正在使用Azure推送通知,并且注意到每次启动应用程序时,APNS都会向我发送新的设备令牌。根据Apple的文档,设备令牌通常应该保持不变:iOS应用程序每次都收到新的APNS设备令牌
包含在每个请求中的设备令牌代表接收通知的设备的标识 。 APN使用设备令牌 标识每个独特的应用和设备组合。它还使用它们对 进行身份验证,以发送到设备的远程通知的路由。 每次您的应用在设备上运行时,它都会从APNs 中获取该令牌并将其转发给您的提供商。您的提供商存储令牌, 在向该特定应用和设备发送通知时使用该令牌。 令牌本身是不透明且持久的,只有当设备的数据和设置被擦除时才会改变。只有APN可以解码并读取设备令牌。
但是,根据通过Azure发送的失败消息数量不变,我可以推断出我的应用每次启动应用时都会从APNS接收新的设备令牌。有人可以告诉我:
为什么我每次都得到新的设备令牌,即使我没有更改手机设置或删除应用程序?
在上面的Apple的摘录中,它们是什么意思“删除设备的数据”? APNS使用哪些数据来确定“独特的应用程序和设备组合”?
下面的代码:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeAlert |
UIUserNotificationTypeSound)
categories:nil];
[application registerUserNotificationSettings:settings];
} else {
[application registerForRemoteNotifications];
}
}
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
//initiate registration process with Apple Push Notification service
[application registerForRemoteNotifications];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *) token {
// Setting token with Azure hub
[[MyAzureNotificationHub sharedInfo] setDeviceTokenData:token];
}
感谢您的回答。你是正确的,设备令牌不应该被缓存;然而,这不是我在这个问题上讨论的。尽管如此,我发现了这个问题(见下面的答案)。简单的答案是,每次应用程序注册APNS时,设备标记都不应该改变;虽然它可以改变,但除非应用程序已被删除然后重新安装(除此之外,这只是简单的回答),但APNS通常会向用户返回相同的标记。我的应用程序没有缓存令牌。 – Vee