You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何区分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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:22:07