3

我想使用 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")

如上所述,通知根本不会触发。如果我取消注释其中任何一行——不管哪一行——它都会触发。但我不希望向用户(在应用程序内部或外部)显示文本通知横幅,所以第一个没有帮助。我尝试使用无声的声音,以便系统可以认为它正在播放声音但用户没有任何体验。但是系统会发出方便的振动。在这种情况下不是那么方便。有没有办法让通知不振动?或任何其他方式来获取仅本地数据的通知?

4

1 回答 1

3

您不能将本地通知安排为像静默推送通知一样不显示在通知中心。该UserNotifications框架旨在以通知的形式向用户显示数据。

您只能使用推送通知实现静默通知,目前无法使用本地通知实现相同的功能。

如果您需要在应用程序不在前台时执行任务,则可以使用后台执行,但如果您只需要在应用程序在前台时运行任务,则有比使用通知更好的方法来实现这一点。即使您的问题对于您实际想要实现的目标非常模糊,但您提到了会话超时。对于测量会话超时,您可以只使用普通Date对象,在开始会话时保存当前日期,并Date().timeIntervalSince(date: startDate)在需要使用令牌来确定令牌是否已过期之前检查已用时间。

于 2017-09-01T14:50:24.407 回答