0

註冊推送通知的常用方法是在Appdelegate中添加以下代碼。是否需要在註冊apns推送通知時檢查互聯網連接

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationType)(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];

如果沒有互聯網連接,會發生什麼?當互聯網連接回來時,應用程序是否會嘗試自動註冊推送通知?

是必要的檢查互聯網連接和註冊的推送通知,如以下

if ([wifiConnection wifiConnectivity]){ 
    if (![[NSUserDefaults standardUserDefaults] stringForKey:@"MyAppSpecificGloballyUniqueString"]) {    
     [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationType)(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)]; 
    } 
} 

此外,如果我們將它添加到應用程序變爲活動前已經註冊的條件 - 它會按預期希望。

請確認。

回答

1

如果您沒有WIFI或網絡,則不會調用註冊回調,因此在調用註冊方法之前不需要檢查連接。

據我瞭解,如果在撥打registerForRemoteNotificationTypes:時沒有WIFI或手機連接,但連接回來,那麼您的委託方法application:didRegisterForRemoteNotificationsWithDeviceToken:將在此時被調用。

關於第二點,您必須在每次啓動應用程序時註冊設備令牌。 在上推送通知蘋果的指導方針仔細一看,它真的是有據可查的: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

應用程序應註冊每次啓動時,給其供應商當前令牌

通過請求設備令牌和每次啓動應用程序時都會將其傳遞給提供者,這有助於確保提供者擁有設備的當前令牌。如果用戶將備份恢復到設備或計算機以外的設備或計算機(例如,用戶將數據遷移到新設備或計算機),則他或她必須至少啓動一次該應用程序才能再次收到通知。如果用戶將備份數據恢復到新設備或計算機,或者重新安裝操作系統,則設備令牌會發生變化。此外,切勿緩存設備令牌並將其提供給您的提供商;每當你需要時總是從系統獲取令牌。如果您的應用程序先前已註冊,則調用registerForRemoteNotificationTypes:會導致操作系統立即將設備令牌傳遞給委託,而不會產生額外開銷。

你應該applicationDidFinishLaunching:註冊設備,無需調用它didBecomeActive,令牌不會在這種情況下發生改變。