Android无需点击FCM通知即可打开Activity的实现方案咨询
FCM无需点击通知直接唤起Activity实现方案
核心实现逻辑
- 首先确保服务端发送的是FCM数据消息(Data Message),不要携带
notification字段,仅在data字段中传入自定义跳转参数。如果携带notification字段,应用被杀状态下消息会由系统托盘接管,只有用户点击才会触发回调,无法自动跳转。 - 自定义继承
FirebaseMessagingService的服务类,重写onMessageReceived方法,收到消息回调后解析data中的跳转参数,构造目标Activity的启动Intent,添加Intent.FLAG_ACTIVITY_NEW_TASK标记后直接调用startActivity即可。
必要适配项
- Android 10(API 29)及以上系统默认禁止后台应用启动Activity,需要提前向用户申请
SYSTEM_ALERT_WINDOW悬浮窗权限,权限申请代码示例:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !Settings.canDrawOverlays(context)) { Intent permitIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.getPackageName())); permitIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(permitIntent); }
- 国内定制ROM适配:小米、华为、OPPO、vivo等国产厂商系统默认会限制应用自启动、后台活动权限,需要引导用户手动将应用加入系统自启动白名单、省电优化白名单,同时开启允许应用后台弹出界面的权限,才能保证消息接收和跳转逻辑正常执行。
- 无谷歌服务设备适配:国内大部分零售设备默认未内置谷歌服务,FCM无法正常工作,需要对应接入各厂商的系统推送通道,通过透传消息接收回调实现相同的自动唤起逻辑。
风险提示
该实现会未经用户交互直接唤起应用界面,极易引起用户反感,同时可能违反应用商店的上架审核规则,仅建议在企业内部应用、应急通知类强需求场景下使用,普通消费级应用不推荐采用该方案。
内容的提问来源于stack exchange,提问作者demo infograins
相关产品推荐
相关产品推荐

