簡體   English   中英

在應用終止時安排本地通知

[英]Scheduling a local notification when the app is terminated

我的目標是創建一個本地通知,該通知將在用戶兩周未啟動應用程序時觸發。 我使用Manager類來處理應用程序本地通知的調度。

這是我目前的解決方案:

func applicationWillTerminate(_ application: UIApplication) {
    NotificationManager.shared.schedule(notification)
}

但是, 如果應用程序在后台終止 (例如,從擴展塢中清除),則不會調用applicationWillTerminate因此不會安排通知。

有什么解決方法嗎?

我考慮過的一種解決方法是,在應用程序進入后台時安排通知,然后在應用程序再次變為活動狀態時調用removePendingNotificationRequests() ,如下所示:

func applicationDidEnterBackground(_ application: UIApplication) {
    NotificationManager.shared.schedule(notification)
}

func applicationDidBecomeActive(_ application: UIApplication) {
   UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["notification"])
}

問題在於,在我看來,這似乎是一種浪費且不夠理想的解決方案。 是否有比安排此通知更好的解決方案

您非常接近我要使用的策略。 無需在進入后台時安排通知,而是在應用程序每次激活時清除並安排時間。

func applicationDidBecomeActive(_ application: UIApplication) { 
    UNUserNotificationCenter.current().removePendingNotificationRequests( withIdentifiers: ["notification"]
    NotificationManager.shared.schedule(notification)
}

每次啟動時,您都應該在未來2周內設置一個通知。 如果它們明天發布,請刪除舊的通知,然后在兩周后設置一個新的通知。

我不建議您使用當前的解決方法,實際上,在后台運行的ios應用程序的后台體驗非常差,並且不能保證applicationWillTerminate會被調用,甚至無法保持運行直到調度發生,因為IOS始終在乎放在最前面的應用程序,發送到后台終止時幾乎要花5分鍾的時間,如果用戶同時打開多個應用程序,則花費的時間要少得多

您可以創建后台獲取流程來安排在應用關閉時進行安排,但這將比當前流程麻煩更多

暫無
暫無

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

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