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
相关产品推荐
相关产品推荐

