我正在使用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