簡體   English   中英

在iOS上使用UNNotificationRequest(UserNotificationFramework)進行僅數據本地通知

[英]Use UNNotificationRequest (UserNotificationFramework) for data only local notification on iOS

我想在iOS 10上使用UserNotificationFramework向我自己發送數據通知 - 即,沒有用戶面向文本或聲音。 基本上將它用作持久性計時器,以便能夠觸發應用程序,如果它在觸發時運行,則檢查由於令牌到期而導致的會話超時等事情。

有點像本地通知中的“內容可用”無面推送通知的模擬。

我已經完成了所有工作,除非我不能在沒有某些用戶需要參與的數據的情況下獲得通知。

以下是添加到UNUserNotificationCenter以觸​​發通知的UNNotificationRequestUNMutableNotificationContent的相關部分。

//  content.body = "Expiration"
//  content.sound = UNNotificationSound(named: "silent-short.wav")
    content.threadIdentifier = typeIdentifier
    content.userInfo = ["1":"One"]
    content.setValue("YES", forKey: "shouldAlwaysAlertWhileAppIsForeground")

如上所述,通知根本不會觸發。 如果我取消注釋其中任何一行 - 無論哪一行 - 它都會觸發。 但我不希望向用戶顯示文本通知橫幅(在應用程序內部或外部),因此第一個沒有幫助。 我嘗試使用靜音,以便系統可以認為它正在播放聲音,但用戶沒有任何體驗。 但該系統引發了一個方便的振動。 在這種情況下,這不是那么方便。 有沒有辦法讓通知不振動? 或者以任何其他方式獲取本地數據通知?

您無法將本地通知安排為靜默推送通知,也不會顯示在通知中心。 UserNotifications框架旨在以通知的形式向用戶顯示數據。

您只能使用推送通知實現靜默通知,目前無法使用本地通知實現相同的功能。

如果您需要在應用程序不在前台時執行任務,則可以使用后台執行 ,但如果您只需要在應用程序位於前台時運行任務,則有比使用通知更好的方法來實現此目的。 即使您的問題對於您實際想要實現的內容非常模糊,您也提到了會話超時。 對於測量會話超時,您可以使用普通Date對象,在啟動會話時保存當前日期,並使用Date().timeIntervalSince(date: startDate)檢查已用Date().timeIntervalSince(date: startDate)然后才需要使用令牌來決定是否令牌已過期或未過期。

暫無
暫無

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

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