如何通过Firebase Functions向Firebase Analytics受众推送通知?
很高兴看到你已经搞定了基础的FCM推送!要给Firebase Analytics受众发通知,核心是结合Firebase的受众管理和云函数,下面我一步步给你讲清楚怎么做:
给Firebase Analytics受众推送FCM通知的实现步骤
1. 先在Firebase控制台配置Analytics受众
- 打开Firebase控制台,进入Analytics > 受众页面
- 创建新受众:根据你的需求设置筛选规则(比如过去7天打开过APP的用户、完成特定事件的用户等)
- 受众创建完成后,点击受众卡片的三个点 > 关联到FCM主题,给这个主题起个好记的名字(比如
active-users-7d)—— 之后符合受众条件的用户会自动订阅这个主题,不用手动处理订阅逻辑
2. 修改云函数代码,向关联的主题推送通知
既然已经把Analytics受众和FCM主题绑定,只需要调整你原来的函数,把推送目标改成主题即可。下面是修复并优化后的完整代码:
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); // 保留你原来的随机数生成逻辑 function getRandomInt(max) { return Math.floor(Math.random() * max); } exports.sendAnalyticsAudienceNotif = functions.https.onRequest(async (request, response) => { try { const mySecretNumber = getRandomInt(147); const payload = { notification: { title: `You got a new Message`, body: `My highest break ${mySecretNumber}`, badge: mySecretNumber.toString(), // 修复了你原来的拼写错误:toStri -> toString() sound: 'default' // 可选:添加通知音效,提升用户感知 }, // 可选:添加自定义数据字段,供APP后续处理 data: { breakNumber: mySecretNumber.toString(), notificationType: 'high-break' } }; // 替换成你关联受众的FCM主题名称 const targetTopic = 'active-users-7d'; // 向主题发送通知 const sendResult = await admin.messaging().sendToTopic(targetTopic, payload); console.log(`通知发送成功:${sendResult}`); response.status(200).send(`已向受众推送通知!返回结果:${JSON.stringify(sendResult)}`); } catch (error) { console.error('通知发送失败:', error); response.status(500).send(`推送失败:${error.message}`); } });
3. 进阶方案:直接用受众条件推送(无需主题)
如果你不想依赖主题关联,也可以直接使用Analytics受众的条件表达式推送:
- 在Firebase控制台的Analytics受众页面,点击查看条件,复制对应的FCM条件表达式(比如
analytics:user_properties.active_days > 7) - 把代码里的
sendToTopic替换成sendToCondition,示例:
const audienceCondition = "analytics:user_properties.active_days > 7"; const sendResult = await admin.messaging().sendToCondition(audienceCondition, payload);
不过这种方式需要注意条件表达式的语法正确性,且受众规则修改后要同步更新代码,所以关联主题的方式更灵活易维护。
几个关键注意事项
- 确保你的Firebase Admin SDK是最新版本,避免兼容性问题:可以运行
npm update firebase-admin更新 - 通知的
badge字段必须是字符串类型,你原来的代码里toStri是拼写错误,一定要修正 - 测试时建议先创建一个小范围的测试受众(比如仅包含你的测试账号),避免误推给大量用户
内容的提问来源于stack exchange,提问作者HixField
相关产品推荐
相关产品推荐

