如何区分iOS APP前后台点击推送通知的不同逻辑处理?
区分iOS点击推送通知时的App前台/后台状态
要实现点击推送通知时根据App前台/后台状态执行不同逻辑,核心是通过UIApplication.shared.applicationState获取当前应用状态,直接在通知响应回调里做判断即可。
先修正你代码里的一个小错误:原代码中使用notification.request是不对的,应该通过response.notification.request来获取通知内容。
修改后的完整示例代码如下:
import UIKit import UserNotifications func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo save(userInfo) // 获取当前应用状态 let appState = UIApplication.shared.applicationState switch appState { case .active: // App处于前台(用户正在交互)时的操作 // 示例:直接更新当前页面数据、弹出详情弹窗等 print("点击推送时App在前台,执行前台专属逻辑") case .background, .inactive: // App处于后台(隐藏)或唤醒过渡状态时的操作 // 示例:跳转至指定页面、初始化页面所需数据等 print("点击推送时App在后台,执行后台专属逻辑") @unknown default: // 兼容未来iOS版本新增的应用状态 break } completionHandler() }
状态说明
.active:App完全处于前台,用户正在操作的状态,此时点击推送会触发该分支.background:App在后台运行(未被系统杀死)的状态.inactive:App处于后台唤醒至前台的过渡阶段,或处于锁屏界面,这类场景通常可以和后台逻辑统一处理
如果你的App是从完全杀死的状态(进程已结束)被推送唤醒,此时applicationState会是.inactive,这种场景下如果需要额外处理,可以在application(_:didFinishLaunchingWithOptions:)方法中读取launchOptions里的推送参数补充逻辑。
内容的提问来源于stack exchange,提问作者Bawenang Rukmoko Pardian Putra
相关产品推荐
相关产品推荐

