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

React Native中OneSignal首次启动deviceState未显示已订阅问题

问题解答

原因分析

首次启动时无法获取pushToken和userId,确实是OneSignal初始化流程未完成导致的。首次安装启动应用时,OneSignal需要完成一系列异步操作:

  • 向设备厂商推送服务(iOS的APNS/Android的FCM)申请推送令牌
  • 将令牌同步到OneSignal服务器,生成对应的userId
    这个过程并非调用setAppId后立即完成,所以此时调用getDeviceState只能拿到未完成注册的设备状态。

解决方案:用订阅状态观察者监听就绪事件

在react-native-onesignal@4.0.6版本中,你可以通过OneSignal.addSubscriptionObserver监听订阅状态变化,当设备完成注册并成功订阅后,就能在回调中获取包含pushToken和userId的完整deviceState。

示例代码

OneSignal.setAppId("<AppID>");

// 添加订阅状态观察者
OneSignal.addSubscriptionObserver((event) => {
  const deviceState = event.to;
  if (deviceState.isSubscribed) {
    console.log("注册完成,完整设备状态:", deviceState);
    console.log("userId:", deviceState.userId);
    console.log("pushToken:", deviceState.pushToken);
    // 在此处理需要用到userId/pushToken的业务逻辑
  }
});

补充说明

  • 该观察者会在订阅状态变更时触发,首次启动完成注册时会触发一次,后续启动若状态无变化则不会重复触发
  • 也可使用OneSignal.addDeviceStateObserver监听设备状态的所有变化,但addSubscriptionObserver更精准对应userId和pushToken的就绪时机

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:35:21