首页 文章

在iOS上使用UNNotificationRequest(UserNotificationFramework)进行仅数据本地通知

提问于
浏览
0

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

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

1 回答

  • 1

    您无法将本地通知安排为静默推送通知,也不会显示在通知中心 . UserNotifications 框架旨在以通知的形式向用户显示数据 .

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

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

相关问题