[英]iOS Push Notification Service Extension Not Consistent Work
由於APN不提供送達報告,因此我們實現了自己的使用Service Extension將報告發送到后端服務器的方法:
當應用收到推送通知時,它會在Service Extension的方法中向后端發送一個http請求-
didReceive(_ request:UNNotificationRequest,withContentHandler contentHandler:@轉義(UNNotificationContent)->無效)
只能在30秒內進行提取作業或發出http請求。
但是,有時用戶會抱怨同時接收SMS和PUSH。
當我們檢查數據庫中的日志時,這些設備沒有PUSH傳遞報告。
我的問題是:
在您的應用中,您可能已在應用的目標功能中啟用了后台模式或遠程通知以及服務擴展 。 因此,發生的是,當您收到推送通知時,您的應用程序處於激活狀態約30秒。 此時,您的交付服務將被調用並更新您的服務器。 由於通知不包含任何媒體,因此顯示通知會花費一些時間。
但是,一旦您收到郵件,服務器就會向用戶發送SMS。 因此,這就是為什么您同時獲得APN和SMS的原因。
修復:在您的服務器上增加大約1分鍾的發送SMS延遲。 以免發生沖突。
在服務擴展內打電話回家的想法存在缺陷,因為如果由於某種原因HTTP調用在擴展內失敗(例如,不良的信元接收,服務器打ic等),您將無法阻止傳遞通知:
服務擴展[..]無權刪除此通知或阻止其顯示。
如本WWDC 17演講中所述: 最佳做法和用戶通知中的新增功能
更好的方法是將靜默通知發送給用戶。 這將在用戶設備的后台喚醒您的應用,從而允許您進行HTTP調用。 如果呼叫成功,您可以安排本地通知。 如果失敗(或者從未發送過靜默通知),則用戶處於脫機狀態,您可以發送短信。
請記住:Apple將靜默通知視為低優先級,因此,要防止通過發送SMS 后發送的靜默通知來調度本地通知,您應該實現某種API調用,您的應用程序可用於查詢是否是否尚未發送短信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.