【问题标题】:Use UNNotificationRequest (UserNotificationFramework) for data only local notification on iOS将 UNNotificationRequest (UserNotificationFramework) 用于 iOS 上的仅数据本地通知
【发布时间】:2018-02-10 15:41:41
【问题描述】:

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

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

【问题讨论】:

  • 继承它的名字是user通知,即user看到的东西。 AFAIK 没有办法使用 UNNotificationRequest 做到这一点,您必须使用 silent 来实现这一点 - 以其名称继承的通知是无声的,即 user 没有的东西见。

标签: ios swift unnotificationrequest


【解决方案1】:

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

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

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

【讨论】:

  • 您需要一个计时器来知道何时检查日期时间间隔。我希望能够使用通知作为触发器来告诉我何时检查它。感谢您的回答。我将向 Apple 提出请求以增强它以允许它,因为他们确实预见到应用程序在无需用户干预的情况下处理通知,当应用程序运行时,凭借处理传入通知的委托例程上的 completionHandler 能够将“none”作为参数。
  • @chadbag 你最后是怎么做到的?
  • @iAnurag。我们将要求更改为在应用实际运行之前不需要检查,而不是强制应用在计时器到期时间运行。
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 2020-06-14
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多