我想使用iOS 10上的UserNotificationFramework向我自己发送数据通知 - 即,没有用户面向文本或声音 . 基本上将它用作持久性计时器,以便能够触发应用程序,如果它在触发时运行,则检查由于令牌到期而导致的会话超时等事情 .
有点像本地通知中的“内容可用”匿名推送通知的模拟 .
我已经完成了所有工作,除非我不能在没有某些用户需要参与的数据的情况下获得通知 .
以下是添加到 UNUserNotificationCenter 以触发通知的 UNNotificationRequest 的 UNMutableNotificationContent 的相关部分 .
// content.body = "Expiration"
// content.sound = UNNotificationSound(named: "silent-short.wav")
content.threadIdentifier = typeIdentifier
content.userInfo = ["1":"One"]
content.setValue("YES", forKey: "shouldAlwaysAlertWhileAppIsForeground")
如上所述,通知根本不会触发 . 如果我取消注释这些行中的任何一行 - 无论哪一行 - 它都会触发 . 但我不希望向用户显示文本通知 Banner (在应用程序内部或外部),因此第一个没有帮助 . 我尝试使用静音,以便系统可以认为它正在播放声音,但用户没有任何体验 . 但是系统会产生一种方便的振动 . 在这种情况下,这不是那么方便 . 有没有办法让通知不振动?或者以其他方式获取本地数据通知?
1 回答
您无法将本地通知安排为静默推送通知,也不会显示在通知中心 .
UserNotifications
框架旨在以通知的形式向用户显示数据 .您只能使用推送通知实现静默通知,目前无法使用本地通知实现相同的功能 .
如果您需要在应用程序不在前台时执行任务,则可以使用background execution,但如果您只需要在应用程序位于前台时运行任务,则有比使用通知更好的方法来实现此目的 . 即使您的问题对于您实际想要实现的内容非常模糊,您也提到了会话超时 . 对于测量会话超时,您可以使用普通的
Date
对象,在启动会话时保存当前日期,并在需要使用令牌来确定令牌是否已过期之前使用Date().timeIntervalSince(date: startDate)
检查已用时间 .