2013-03-01 61 views
4

當我第一次在我的UIApplication上撥打registerForRemoteNotificationTypes時,用戶獲得系統提示,允許此應用程序向他們發送推送通知。如果他們說是,那麼didRegisterForRemoteNotificationsWithDeviceToken被我的應用程序委託調用。如果他們說不,didFailToRegisterForRemoteNotificationsWithError確實不是被調用。一旦他們對最初的提示表示拒絕,當我嘗試在未來重新註冊時,我從未得到任何回調。當用戶拒絕初始提示時Apple推送通知註冊回調?

這是標準行爲嗎?知道何時拒絕提示的最佳方式是什麼? Apple's docs on this對此場景沒有提及任何有用的信息。

+3

不,我的問題是如何知道他們說不,稍後再問。 – 2013-03-01 22:31:59

+0

在這種情況下,也許http://stackoverflow.com/questions/5399137/reading-notification-flag-in-settings-application-inside-my-iphone-application是你的問題的答案。 – Asa 2013-10-04 21:10:22

回答

14

用戶決定選擇哪個選項不影響使用哪個回調。如果用戶說「不」,您仍然會成功獲取用戶的設備令牌。您仍然可以向該設備發送推送通知,並且Apple的反饋服務會將其發送(意味着反饋服務不會告訴您他們已取消訂閱)。推送「否」的唯一效果是「隱藏」發送到您的特定應用的設備的推送通知。

由於此設計決定,用戶可以通過轉到設置 - >通知,併爲您的應用重新啓用推送通知,並接收推送通知,而無需從您的應用或應用中提供任何特殊的重新註冊邏輯OS。編輯(iOS7):這種行爲在iOS 5上有記載。當我在iOS 7上再次測試時,我推送「不允許」後沒有收到設備令牌。只有訪問了設置>通知> MyApp並啓用了通知後,才獲取設備令牌。編輯(iOS8):在iOS 8中通知設置與遠程通知是分開的,但其行爲與iOS 7類似。似乎在通知授權給您的應用程序之前,您不會獲得設備標記。我測試的應用程序沒有啓用遠程通知後臺模式功能,但假設您的應用程序確實有可以獲取設備令牌,即使未啓用通知。 (我很難測試這個,因爲試圖讓通知提示再次出現是一個巨大的痛苦。)

+3

我不相信這是完全正確的。根據我的經驗,如果用戶點擊「不允許」,您的應用程序不會*獲取設備令牌。 – AriX 2013-12-23 01:54:24

+4

我注意到iOS 7中的相同內容。它在某個時刻必須已經更改。謝謝AriX! – Asa 2013-12-31 19:16:15

+0

啊,有道理! – AriX 2014-02-07 09:35:45