我想弄清楚我是否可以通过本地通知完成我的目标,或者我是否需要切换到远程通知。
我通过构建播放的RSS更新的广播节目的最新一集在一天的设定时间报警程序练习的iOS 10 /斯威夫特3。 当应用程序在前台,这很容易通过UNUserNotificationCenterDelegate的willPresent函数来执行。 我只是用willPresent获取最新一集,并通过AVAudio播放器播放。
当然,如果应用程序仅在前台工作,这个功能是非常有限的。 我希望应用程序在后台或关闭时的工作方式相同。
我可以从文档看到,当应用程序是不是在前台willPresent不运行。 有另一种方式拥有本地通知执行代码之前推通知时,应用程序在后台? 或者将我必须切换到远程通知? 我看到这个回答一个相关的问题 ,但我不知道是否有一个更优雅的方式。
对于iOS 10 本地通知你的运气了。
对于iOS 10 远程通知 - 无论用户交互您可以收到使用回调application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
。 (这是一种令人困惑的是,他们不推荐最通知相关的方法,但没有这一项)
回调当应用程序在前台, 你是要展现的通知:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let content = notification.request.content
// Process notification content
completionHandler([.alert, .sound]) // Display notification as regular alert and play sound
}
回调用于当应用程序是无论是在背景或前景中和用户轻敲动作:
例如,为您提供了用户拍了拍保存回调。
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let actionIdentifier = response.actionIdentifier
switch actionIdentifier {
case UNNotificationDismissActionIdentifier: // Notification was dismissed by user
// Do something
completionHandler()
case UNNotificationDefaultActionIdentifier: // App was opened from notification
// Do something
completionHandler()
default:
completionHandler()
}
}
回调用于当应用程序是在任一背景,前景或(可能)悬浮状态和推送通知(远程或无声通知)到达:
当你在通知拍了拍此前iOS10 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
会被调用。
但由于iOS的10 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
没有呼吁攻 。 这只是称为远程通知到达时。 (这让我们双方在前台和后台调用)
对于预iOS的10,你可以使用旧的didReceiveLocalNotification
功能和捕捉任何通知的到来。
文章来源: Alternative to UserNotificationCenterDelegate's willPresent when app is in background