2012-02-08 111 views
11

如果用戶拒絕啓用推送通知,我們將通過didFailToRegisterForRemoteNotificationsWithError獲取錯誤。有人知道在這種情況下NSError對象中的代碼是什麼(爲了區分它,比如說沒有可用的連接)?didFailToRegisterForRemoteNotificationsWithError:用戶拒絕錯誤?

+0

你應該真的獎勵傑瑞德的答案 - 他是正確的答案。我只需要重新驗證一下我公司的客戶。下載我們的企業應用程序(使用生產推送服務),當被問到時不允許所有通知,並且應用程序仍然有一個令牌。在「設置」中啓用它們,重新啓動應用程序,然後在「設置」中禁用它們,重新啓動應用程序 - 在所有情況下,令牌都會正確返回。 – 2014-12-02 19:23:57

回答

19

我不認爲你的初始陳述(總是)成立。如果應用使用有效的配置文件正確簽名,則無論用戶在「設置」應用中的「通知」選項如何,調用registerForRemoteNotificationTypes:都將導致application:didRegisterForRemoteNotificationsWithDeviceToken:。根據我的經驗,我看到application:didFailToRegisterForRemoteNotificationsWithError:被調用的唯一時間是因爲未正確簽名的應用程序。有問題的錯誤提到「沒有有效的APS環境權利找到應用程序」。

18

雖然這個問題很老,並且同意@ Jerred的大部分答案,我還是想過發佈一個更新的答案。

該主題中主要問題的答案是NO

應用程序:didFailToRegisterForRemoteNotificationsWithError:在應用程序使用不正確的置備配置文件進行簽名時被調用。

此外,

應用:didRegisterForRemoteNotificationsWithDeviceToken:被稱爲只有當用戶能夠在,至少在通知中心的徽章,旗幟/警報或聲音設置的一個(在設置應用)爲您的應用程序。

有場景中的iOS不會調用這些方法之一

  • 當用戶拒絕授予權限的應用程序發送推送通知
  • 當沒有網絡連接和用戶授予權限發送推送通知。
  • 當用戶在設置應用程序中禁用來自通知中心的應用程序推送通知時。
+1

除了一部分外,這是一篇很好的文章:「APNS有獨立的環境:** sandbox(用於開發和特別構建)**和production。每個環境都有自己的證書,並且需要在他們倆。」。 Ad-hoc構建實際上擊中了生產APNS:「操作系統爲開發構建建立了與沙箱環境的持久連接;臨時和分佈構建連接到生產環境。」從https://developer.apple.com/library/ios/technotes/tn2265/_index。html#// apple_ref/doc/uid/DTS40010376-CH1-TNTAG42 – 2014-05-08 15:15:40

+0

將文章中描述爲最佳實踐的答案更新是非常好的,因爲現在它不再可用。 – leolobato 2015-05-08 13:31:13

+0

同意@leolobato,該文章的鏈接無效。 – Zorayr 2015-05-18 02:09:33

1

根據我的經驗,didFailToRegisterForRemoteNotificationsWithError:方法是保留給更嚴重的情況,防止應用程序甚至向用戶顯示通知權限請求對話框。我所知道的情況包括應用程序在不支持推送通知的設備上運行(例如模擬器),或者在應用程序二進制文件中的aps環境權限中存在一些錯誤配置。