通知中心和更改时区

Posted

技术标签:

【中文标题】通知中心和更改时区【英文标题】:Notification Center and changing timezones 【发布时间】:2017-11-16 10:37:58 【问题描述】:

Swift 4 & >iOS 10.0

我想在特定日期和特定时间(比如下午 3 点)安排本地通知。我希望通知始终在下午 3 点触发,无论我在哪个时区(根据时区自动重新安排通知)。

以前,您可以调整 UILocalNotifications' 时区来实现这一点,就像在 this SO post 中完美解释的那样。但是,在 >ios 10.0 中,UILocalNotifications 已弃用。

这是我的代码:

func scheduleNotification(title: String, message: String, atDate: Date)

    let center = UNUserNotificationCenter.current()

    // Create content
    let content = UNMutableNotificationContent()
    content.title = title
    content.body = message
    content.sound = UNNotificationSound.default()

    // Create trigger
    let calendar = Calendar(identifier: .gregorian)
    let triggerDate = calendar.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: atDate)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: false)

    // Create identifier
    let identifier = "\(UUID())"

    // Create request & add to center
    let request = UNNotificationRequest(identifier: identifier,
                                        content: content,
                                        trigger: trigger)
    center.add(request, withCompletionHandler:  (error) in
    )
  

问题: 如何在更改时区时正确触发通知?

【问题讨论】:

【参考方案1】:

所以,我设法让它工作。 triggerDate 有一个 timeZone 变量,该变量自动为零,与 UILocalNotification 完全相同。

triggerDate.timeZone 的行为与UILocalNotification.timeZone 完全相同(this post 中描述的行为,与问题中提到的相同)。

它似乎无法在模拟器上运行的原因之一是因为我在更改时区时没有重新启动模拟器。重新启动将使一切按预期工作。

注意事项:也许重启不是强制性的,但由于目前尚不清楚正在运行的模拟器需要多长时间才能检测到新时区,所以我认为重启它是最有效的解决方案。 p>

【讨论】:

triggerDate 的类型是 DateComponents ??

以上是关于通知中心和更改时区的主要内容,如果未能解决你的问题,请参考以下文章

使用通知中心在 Realm Swift 3 中保存 UIButton 更改状态

Azure 通知中心 [关闭]

iOS SDK 中的通知中心与委派

Azure 通知中心的 Xamarin.Forms PushNotifications

通知中心和通知

关闭通知、通知中心和控制中心