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

Android onMessageReceived检查通知payload及关后台日志不显示问题求解

调试应用关闭时RemoteMessage内容的方法

  • 持久化日志到本地存储:在onMessageReceived方法最开头,把RemoteMessage的data、notification全部序列化为JSON字符串,写入应用内部存储的日志文件中,应用重新打开后可以读取该文件查看历史收到的推送内容。示例逻辑:
val payload = Gson().toJson(mapOf(
    "data" to message.data,
    "notification" to mapOf(
        "title" to message.notification?.title,
        "body" to message.notification?.body,
        "clickAction" to message.notification?.clickAction
    )
))
// 写入内部存储不需要额外权限
openFileOutput("fcm_payloads.log", MODE_APPEND).bufferedWriter().use { 
    it.appendLine("${System.currentTimeMillis()}: $payload") 
}
  • 用adb持久化logcat输出:连接测试设备后执行命令adb logcat -s YourLogTag -f /sdcard/fcm_logs.txt,日志会持续写入手机存储,即使应用进程被杀也会继续记录,测试完成后执行adb pull /sdcard/fcm_logs.txt即可导出到电脑查看。
  • 自定义事件上报:把收到的payload作为参数上报到埋点平台,平台会在应用下一次启动时把缓存的事件上报,你可以在后台直接查看payload内容。

实现该功能的注意事项

  • 现有代码逻辑bug修复:你当前onMessageReceived中url不为空的分支只创建了Intent,没有把它封装为PendingIntent绑定到通知,也没有执行跳转逻辑,该分支功能完全无法生效,需要补充对应通知构建逻辑。
  • 区分FCM消息类型:
    • 仅携带data字段的数据消息,无论应用在前台/后台/被杀,都会触发onMessageReceived回调
    • 携带notification字段的通知消息,应用在后台/被杀时不会触发onMessageReceived,直接由系统弹出通知,点击后payload会传递到启动Activity的intent中,你需要在首页的onCreate、onNewIntent中补充从intent.extras取参数的逻辑,否则这类通知点击后无法跳转对应Fragment。
  • PendingIntent兼容性适配:Android 12及以上系统要求PendingIntent必须明确指定可变性,你当前只使用了FLAG_UPDATE_CURRENT,在Android 12+上会触发崩溃,需要修改为:
    // 如果不需要修改Intent内容用FLAG_IMMUTABLE,需要修改的话用FLAG_MUTABLE
    val flag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE else PendingIntent.FLAG_UPDATE_CURRENT
    PendingIntent.getActivity(this, requestCode, intent, flag)
    
  • 避免通知被覆盖:当前你调用notificationManager.notify(0, ...)固定用id 0,所有通知都会互相覆盖,同时PendingIntent的requestCode也固定为0,会导致多条通知的点击参数被覆盖为最后一条的内容。建议用campaignId的哈希值作为通知id和PendingIntent的requestCode。
  • 空Intent兜底逻辑:你的getNotificationIntent方法中,如果cloud8Type和notificationType都没有匹配到分支,会返回空的Intent,点击这类通知会触发崩溃,需要补充默认跳转到应用首页的逻辑。
  • 国内厂商适配:小米、华为、OPPO、vivo等国产ROM默认禁止应用被杀后自启动,FCM推送无法到达,需要引导用户开启应用的自启动权限、将应用加入后台耗电白名单,也可以接入对应厂商推送通道提高送达率。
  • 通知图标适配:Android 5.0及以上要求通知小图标必须为带透明通道的矢量素材,否则在系统通知栏会显示为白色方块,需要确认R.drawable.ic_notification符合适配要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:21:01