在我的應用程序中,首次推送通知註冊時,我撥打didRegisterForRemoteNotificationsWithDeviceToken
並將設備標記保存爲持久性,並更新設備標記的服務器列表。現在,如果有人將推送通知設置從iPhone設置關閉,我怎麼能從我的應用程序中確定它,以便我可以從服務器中刪除設備令牌。我知道APNS提供了一個反饋列表,但除此之外,有沒有一種方法可以在應用程序中以編程方式確定?謝謝你的幫助!如何通過編程方式確定推送通知狀態?
2
A
回答
7
我相信你不想這樣管理令牌。
您的應用程序應該始終詢問Apple是否有APN令牌。您應該始終將該令牌發送到您自己的服務器,可能會將該令牌與您的用戶(如果有的話)相關聯。您這樣做是因爲令牌可能會更改,所以您要確保始終擁有最新的令牌。
反饋服務會告訴你哪些令牌失效(實際上,你在你所選擇的一些間隔輪詢的話)。此時,您將從服務器端數據庫中刪除令牌。清楚的是,您需要一個服務器端進程來輪詢Apple的反饋服務,然後更新您的服務器端數據庫。
,直到您嘗試使用令牌發送通知您將不會收到有關無效令牌的反饋。當我們發送通知時(我相信)它會被Apple接受,但當Apple發現它是針對無效令牌的時候,該消息會被丟棄,並且令牌會被添加到您的反饋中。
現在,如果你的應用程序的用戶接受推送通知時,你的應用程序首先詢問這件事,但後來通過爲您的應用程序設置應用程序關閉通知,你不會得到任何關於它的反饋。接近我所知道的是,發送給該設備的任何通知都會發送到設備,但操作系統會將其刪除,並在設置應用程序中爲您的應用程序和通知履行用戶的最終選擇。
最後,還有你可以在你的應用程序調用來獲取其中的通知類型是在設備上的應用程序啓用了位掩碼的API。這是我爲此寫的一個方法;根據需要進行調整:
+(BOOL)acceptsPushNotifications
{
UIRemoteNotificationType mask = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
return (mask & UIRemoteNotificationTypeAlert) == UIRemoteNotificationTypeAlert;
}
但我不會建議使用此來決定,如果你的應用程序應該告訴你的服務器從數據庫中刪除令牌。這不是整個APN系統打算工作的方式......我相信。
相關問題
- 1. 推送通知未確定
- 2. Android狀態欄通知 - 通過任何方式通知狀態欄(烤麪包)通過狀態欄?
- 3. 如何以編程方式清除推送通知 - iOS
- 4. 解析推送通知,如何以編程方式控制它?
- 5. 通過沙盒上的webhooks進行狀態推送通知
- 6. 通過Android的狀態欄處理推送通知
- 7. HTML5 - 推送狀態桌面通知
- 8. FCM:跟蹤狀態FCM推送通知
- 9. 如何以編程方式知道android上的通話狀態
- 10. 推送通知通過GCM
- 11. 通過PHP推送通知?
- 12. 通過quickblox推送通知
- 13. 通過Wifi推送通知
- 14. 通過WiFi推送通知
- 15. 以編程方式更改Apple推送通知的樣式
- 16. 狀態推送通過Redis的
- 17. 從Azure通知中心發送推送通知的單個設備的跟蹤推送通知狀態
- 18. 如何以不帶sudo的通知發送以編程方式發送通知?
- 19. 通過Firebase發送推送通知
- 20. 通過node.js發送android推送通知
- 21. 在Swift中以編程方式更改推送通知
- 22. iOS:禁用推送通知以編程方式下拉托盤
- 23. 更改推送通知內容以編程方式
- 24. 以編程方式從Azure Web服務啓動推送通知?
- 25. iOS - 推送通知未確定
- 26. 推送通知:如何使用Pubnub向特定設備發送推送通知?
- 27. 想要同時使用基於應用程序狀態的無聲推送通知和遠程推送通知
- 28. 我們如何通知mixpanel在ios中以編程方式發送推送通知
- 29. 如何通過推送通知從AppDelegate打開特定的uitabbarcontroller?
- 30. Telerik推送通知過濾