簡體   English   中英

iOS:為推送通知注冊設備

[英]iOS: Registering device for push notifications

我的應用程序在啟動時首先使用registerForRemoteNotificationTypes注冊推送通知。

我自然希望didRegisterForRemoteNotificationsWithDeviceToken事件或didFailToRegisterForRemoteNotificationsWithError觸發。

但我注意到,如果用戶為我的應用禁用了推送通知,那么這些都不會被調用。 在這種情況下它不應該失敗並觸發didFailToRegisterForRemoteNotificationsWithError嗎?

問題是,我的應用程序在繼續執行其余的網絡任務之前等待推送注冊的結果(無論是通過還是失敗)。 在做任何其他事情之前,我基本上依賴於結果。

我可以用另一種方法來做到這一點嗎? didFailToRegisterForRemoteNotificationsAsDisabledForApplication類的didFailToRegisterForRemoteNotificationsAsDisabledForApplication (我編的)??

編輯:

Apple Docs 對registerForRemoteNotificationTypes說了以下內容:

當您發送此消息時,設備會啟動 Apple Push Service 的注冊過程。 如果成功,應用程序委托會在應用程序中收到一個設備令牌:didRegisterForRemoteNotificationsWithDeviceToken: 方法; 如果注冊不成功,則通過 application:didFailToRegisterForRemoteNotificationsWithError: 方法通知委托人。 如果應用程序委托收到設備令牌,它應該與其提供者連接並將令牌傳遞給它。

因此,如果用戶為我的應用程序禁用了推送通知,並且我的代碼正在嘗試registerForRemoteNotificationTypes為什么不觸發didFailToRegisterForRemoteNotificationsWithError

來自技術說明 TN2265

沒有委托回調

安裝第一個支持推送的應用程序后,iOS 或 OS X 會嘗試與推送服務建立持久的網絡連接,該連接將由系統上的所有支持推送的應用程序共享。 如果委托回調 application:didRegisterForRemoteNotificationsWithDeviceToken: 和 application:didFailToRegisterForRemoteNotificationsWithError: 均未調用,則表示此連接尚未建立。

這不一定是錯誤條件。 該系統可能根本沒有互聯網連接,因為它超出了任何蜂窩塔或 Wi-Fi 接入點的范圍,或者它可能處於飛行模式。 您的應用程序不應將其視為錯誤,而是應繼續正常運行,僅禁用依賴推送通知的功能。

請記住,網絡可用性可能會經常變化。 一旦與推送服務的持久連接成功,將調用前面提到的應用程序委托方法之一。

在 iOS 上,推送通知會盡可能使用蜂窩數據網絡,即使設備當前正在使用 Wi-Fi 進行其他網絡活動,例如網頁瀏覽或電子郵件。 但是,如果蜂窩數據服務不可用,推送服務將回退到 Wi-Fi。

如果您的 iOS 設備能夠使用蜂窩數據網絡,請檢查它是否具有有效的蜂窩數據計划。 例如,在“設置”中關閉 Wi-Fi,看看您是否仍然可以使用 Safari 瀏覽網頁。 另一方面,如果推送服務使用 Wi-Fi,則您的設備或計算機與 Internet 之間的任何防火牆都必須允許進出端口 5223 的 TCP 流量。

來自同一文檔的另一部分:

在 iOS 上重置推送通知權限警報

啟用推送的應用程序首次注冊推送通知時,iOS 會詢問用戶是否希望接收該應用程序的通知。 一旦用戶對此警報做出響應,除非設備恢復或應用程序已卸載至少一天,否則它不會再次出現。

如果您想模擬應用程序的首次運行,您可以將應用程序卸載一天。 您可以按照以下步驟實現后者,而無需等待一天:

  1. 從設備中刪除您的應用程序。
  2. 完全關閉設備並重新打開。
  3. 前往“設置”>“通用”>“日期與時間”,然后將日期提前一天或更長時間。
  4. 再次完全關閉設備並重新打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM