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

使用OneSignal向特定分组推送通知的技术实现咨询

搞定按用户分组推送通知的方案

核心思路

咱要实现精准的分组推送,关键就是把用户设备的推送令牌(Push Token)和用户所属的分组在服务器端做关联绑定——之前全量推送是因为服务器不知道哪些设备属于哪个分组,绑完之后就能精准定位目标设备了。


具体操作步骤

1. 用户登录时,绑定设备令牌和分组

用户登录成功后,前端得把当前设备的推送令牌(比如APNs的deviceToken、FCM的registrationToken)和用户信息一起传给服务器。服务器收到后,在数据库里存好关联关系:

  • 如果是新设备,就把用户ID、设备令牌、用户的分组编号(从登录返回的用户信息里拿)存入专门的设备关联表;
  • 如果是老设备,就更新对应的分组信息(防止用户换了分组还收到旧分组的通知)。

前端可以这么写(在登录成功的回调里加这段逻辑):

// 假设登录成功后拿到了用户信息userInfo,设备令牌存在localStorage里
function onLoginSuccess(userInfo) {
  const pushToken = localStorage.getItem('devicePushToken'); 
  if (pushToken) {
    // 发请求给服务器绑定
    fetch('/api/bind-device-group', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        userId: userInfo.id,
        pushToken: pushToken,
        groupId: userInfo.groupId // 从用户信息里取分组编号
      })
    });
  }
}

2. 服务器端建个设备-分组映射表

建议在数据库里新增一张表,比如叫device_group_mapping,字段至少要有:

  • id(主键)
  • user_id(关联你的用户表)
  • push_token(设备的推送令牌)
  • group_id(关联你的分组表)
  • created_at、updated_at(记录时间戳,方便排查问题)

这样以后要发分组通知时,直接根据group_id就能查出所有对应的设备令牌,不用再全量推送了。

3. 修改推送逻辑,按分组筛选令牌

把原来全量推送的代码改成按分组筛选令牌的逻辑,举个Node.js的例子:

// 服务器端推送逻辑示例
async function sendGroupNotification(groupId, notificationContent) {
  // 从映射表中捞该分组下所有的设备令牌
  const deviceTokens = await db.query(
    'SELECT push_token FROM device_group_mapping WHERE group_id = ?',
    [groupId]
  );
  
  // 调用推送服务商的接口发通知(这里以FCM为例)
  if (deviceTokens.length > 0) {
    await fcm.sendMulticast({
      tokens: deviceTokens.map(item => item.push_token),
      notification: notificationContent
    });
  }
}

4. 处理分组变更的情况

如果用户的分组变了,得及时更新服务器端的映射表:

  • 可以在后端修改用户分组的接口里,同步更新该用户所有绑定设备的group_id;
  • 或者前端每次启动应用、用户登录时,都重新发一次绑定请求,确保分组信息是最新的,这样更稳妥。

几个要注意的点

  • 设备令牌会变:像iOS的deviceToken,用户重装应用、系统更新后可能会变,所以应用启动时要重新获取令牌,然后同步给服务器更新;
  • 注销登录要解绑:用户注销后,服务器最好把该设备的关联记录标记为无效,避免给已注销的用户发通知;
  • 权限校验不能少:服务器推送前要确认用户确实属于目标分组,防止数据同步出问题导致推错人。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:37:45