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

如何在本地通知(local notification)中实现deep link跳转应用指定页面

本地通知触发DeepLink跳转全状态兼容实现方案

核心思路

所有场景下的通知点击都会把携带的deeplink参数抛给统一的路由处理层,路由层判断应用当前状态后执行对应的跳转逻辑,不需要感知通知来源,实现逻辑收敛避免重复开发。

第一步:通用基础配置

  • 先在应用内注册deeplink的scheme和host规则,例如可定义为myapp://page/{pageName}?params={xxx},提前映射好所有内页和路径的对应关系,比如myapp://page/order_detail对应订单详情页,自定义参数通过query字段携带
  • 创建本地通知时,必须在通知的附加payload中固定带上你定义好的deeplink字段,不要用松散的独立参数传递跳转目标

第二步:各端通知点击事件拦截与参数传递

iOS端实现

在AppDelegate或SceneDelegate中适配所有状态的回调:

  1. 应用未运行(冷启动):点击通知会触发didFinishLaunchingWithOptions方法,可从launchOptions的UIApplicationLaunchOptionsLocalNotificationKey中拿到通知对象,取出其中的deeplink参数,等应用根控制器初始化完成、首页渲染完毕后,再把deeplink丢给路由层处理,不要在启动流程未走完时执行跳转,避免出现找不到导航栈的问题
  2. 应用前台活跃/Inactive状态:点击通知会触发UNUserNotificationCenterDelegate的didReceive response: UNNotificationResponse回调,直接从response.notification.request.content.userInfo中拿到deeplink,传给路由层跳转即可,此时路由层可以直接读取当前导航栈,按需执行push、替换页面等操作
  3. 应用suspended挂起状态:点击通知会先把应用唤醒到前台,紧接着触发上述didReceive response回调,逻辑和活跃状态完全一致,不需要额外适配
  4. 若你的应用使用了SceneDelegate,还要额外实现scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)方法,从connectionOptions.notificationResponses中拿到通知的deeplink,处理冷启动场景的跳转

Android端实现

  • 创建通知时,PendingIntent的intent要直接携带deeplink数据,同时设置intent的flag为FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP,避免重复启动首页
  • 所有通知点击的intent都统一指向应用的中转Activity(一般为启动页/主Activity):
  1. 应用未运行(冷启动):点击通知会启动主Activity,在onCreate方法中可从intent.data里拿到deeplink,等首页初始化完成后传给路由层执行跳转
  2. 应用前台活跃/Inactive状态:点击通知会触发主Activity的onNewIntent回调,从intent.data中拿到deeplink直接传给路由层跳转即可
  3. 应用suspended挂起状态:点击通知会把应用唤起到前台,触发主Activity的onNewIntent或onRestart回调,同样从intent中读取deeplink处理即可

第三步:路由层兼容处理

  • 路由层收到deeplink后,首先判断当前应用的导航栈是否存在:如果不存在(冷启动场景还未初始化完成),就先把deeplink存在内存或本地缓存中,等导航栈初始化完成的回调触发后,再取出执行跳转
  • 跳转前先判断当前栈顶页面是否已经是目标页面,避免重复push相同页面
  • 如果跳转需要登录权限,路由层先跳转到登录页,登录完成后再继续执行之前的deeplink跳转逻辑,不要直接丢弃跳转请求

常见坑点规避

  • 冷启动场景不要过早执行跳转,要等应用的初始化逻辑(权限申请、用户状态判断、根控制器渲染)全部完成后再处理,否则会出现跳转失败、崩溃的问题
  • 通知payload中的deeplink要做合法性校验,避免恶意构造的deeplink导致应用跳转异常
  • 不要在通知点击回调里直接写页面跳转逻辑,全部收敛到统一路由层处理,后续修改跳转规则不需要修改通知相关代码

内容的提问来源于stack exchange,提问作者Amogam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:45:04