You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Android Notifee的MessagingStyle通知中同时展示头像与应用图标叠加效果?

如何在Android Notifee的MessagingStyle通知中同时展示头像与应用图标叠加效果?

我太懂你想要的效果了——就是像Slack、微信那种,通知一进来就显示对方头像小图标,右上角还叠着自己的应用图标,不用展开就能一眼认出是谁的消息。之前我做类似功能的时候也卡在这里,核心问题其实不是Notifee的Style没设对,而是Android系统需要明确识别这是一个「对话通知(Conversation Notification)」,才会触发这种叠加图标样式。咱们一步步来改:

核心问题:你缺失了对话通知的关键标识

之前的代码里,虽然用了MESSAGING样式和msg分类,但没有给系统足够的信息来判定这是一个需要特殊样式的对话。Android 10+开始,对话通知需要三个核心参数才能触发叠加图标:

  1. 每个对话参与方的唯一IDperson.id
  2. 对话的唯一IDconversationId
  3. 明确标记这是对话通知(isConversation: true

一步步修改你的代码

1. 补全Client端(Notifee)的关键参数

修改你的通知配置,把缺失的标识加上:

import { AndroidStyle } from '@notifee/react-native';

const noti: Notification = {
  title: title,
  body: body,
  android: {
    channelId,
    smallIcon: 'ic_notification_small',
    largeIcon: icon,
    // 新增:标记为对话通知 + 绑定对话ID(用你的threadId保持会话连续性)
    conversationId: threadId,
    isConversation: true,
    style: {
      type: AndroidStyle.MESSAGING,
      // 给当前用户的Person设置唯一ID(比如当前用户的ID,不能空)
      person: { 
        name: 'Me',
        id: 'current_user_unique_id' // 替换成你的当前用户ID,比如从登录态取
      },
      messages: [
        {
          text: body,
          timestamp: Date.now(),
          // 给消息发送方的Person设置唯一ID(必须有!否则系统无法关联对话)
          person: { 
            name: userName ?? '', 
            icon: icon,
            id: userId || userName || 'default_chat_user' // 对方的唯一标识,不能空
          },
        },
      ],
      group: false,
    },
    category: 'msg',
  },
};

await notifee.displayNotification(noti);

2. 确保Server端(FCM)的参数配合

你的服务器代码已经传递了threadId,只需要确保Client端用这个threadId作为conversationId就行,保持对话的唯一性。另外可以把avatarUrl的key和Client端的icon对应上,避免混淆(你现在的对应关系是对的)。

额外验证要点

  1. Android版本要求:只有Android 10(API 29)及以上才支持对话通知的叠加图标样式,测试设备要符合版本要求。
  2. 通知渠道配置:确保你的channelId对应的通知渠道,在系统设置里开启了「对话通知」权限(默认是开启的,但可以去设置→应用→你的应用→通知→对应渠道里检查)。
  3. 图标的可访问性:如果icon是网络URL,确保设备有网络,Notifee会自动下载并加载;如果是本地资源,要放在res/drawable目录下,并且名字正确。
  4. Notifee版本:确保你用的是最新版的@notifee/react-native,旧版本可能没有conversationIdisConversation这两个参数(可以用npm update @notifee/react-native升级)。

为什么之前的设置不行?

你之前的代码只设置了MessagingStyle和category,但没有给系统提供对话的唯一标识,Android只会把它当成普通的消息通知,而不是「对话通知」。只有当系统识别为对话时,才会触发头像+应用图标的叠加样式,这是Android系统的原生规则,不是Notifee的限制。

按这个修改后,你应该就能看到和Slack、Messenger一样的叠加图标样式了,不用展开通知就能看到对方头像+应用图标组合~

火山引擎 最新活动