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

Flutter中如何通过OneSignal的external_id给同一用户多设备发通知

实现通过External ID向用户所有设备推送OneSignal通知

问题场景

  • 用户A使用第一台设备打开App时,在OneSignal中注册Subscription ID并绑定自定义external_id
  • 使用第二台设备打开App时,注册新的Subscription ID并绑定同一个external_id
  • 当前推送代码仅支持指定单个playerId,无法覆盖用户的所有关联设备

当前代码

获取Subscription ID的代码:

var status = await OneSignal.shared.getDeviceState();
playerId = status?.userId!;

当前推送代码(仅支持单设备):

Future<void> sendNotification() async {
  try {
    await OneSignal.shared.postNotification(OSCreateNotification(
      playerIds: [playerId],
      content: "${widget.Name}",
      heading: "appname",
    ));

    print("true");
  } catch (e) {
    print("error: $e");
  }
}

解决方案

OneSignal原生支持通过external_id直接向该ID关联的所有设备推送通知,无需手动收集所有关联的playerId。只需修改推送代码的参数,将playerIds替换为externalId即可:

Future<void> sendNotification() async {
  try {
    await OneSignal.shared.postNotification(OSCreateNotification(
      externalId: "目标用户的external_id", // 替换为实际要推送的用户external_id
      content: "${widget.Name}",
      heading: "appname",
    ));

    print("通知推送成功");
  } catch (e) {
    print("推送失败: $e");
  }
}

补充说明

  • 确保你的OneSignal Flutter SDK版本支持externalId参数,若版本过旧建议升级至最新稳定版
  • 确认设备绑定external_id的逻辑正确,两台设备均已成功关联到同一个external_id
  • 若需通过标签推送,可将externalId替换为tags参数,示例:tags: {"user_tag": "目标标签值"},前提是设备已设置对应标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:42:47