• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 当应用程序在后台时替代 UserNotificationCenterDelegate 的 willPresent

[复制链接]
菜鸟教程小白 发表于 2022-12-13 01:38:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想弄清楚我是否可以通过本地通知来实现我的目标,或者我是否需要切换到远程通知。

我正在通过构建一个闹钟程序来练习 iOS 10/Swift 3,该程序在一天中的设定时间播放 RSS 更新的广播节目的最新一集。当应用在前台时,这很容易通过UNUserNotificationCenterDelegate的willPresent函数来执行。我只是使用 willPresent 来获取最新剧集,并通过 AVAudio Player 播放。

当然,如果应用只在前台运行,这个功能是非常有限的。我希望应用程序在后台或关闭时以相同的方式工作。

我可以从文档中看到,当应用程序不在前台时,willPresent 不会运行。当应用程序在后台时,是否有另一种方法可以让本地通知在推送通知之前执行代码?还是我必须切换到远程通知?我看到了this answer to a related question但我想知道是否有更优雅的方法。



Best Answer-推荐答案


对于 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
}

当应用程序处于后台或前台并且用户点击操作时的回调:

enter image description here

例如为您提供用户点击保存的回调。

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 不会在 tapping 时被调用。它仅在远程通知到达时调用。 (它在前台和后台都被调用)


对于 pre iOS 10,您可以只使用旧的 didReceiveLocalNotification 函数并捕获任何通知的到达。

关于ios - 当应用程序在后台时替代 UserNotificationCenterDelegate 的 willPresent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425744/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap