订阅后获取 OneSignal UserID

Get OneSignal UserID after subscribe

我正在使用 OneSignal 获取通知,因此根据文档,我将我的 SDK 代码制作成这样:

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>
<script>
var OneSignal = window.OneSignal || [];
    OneSignal.push(["init", {
      appId: "myappID",
      safari_web_id: "myID",
      autoRegister: false,
      promptOptions: {
            /* My prompt options */
       },
       welcomeNotification: {
            //my options
       },
       notifyButton: {
        enable: true,
        showCredit: false,
        prenotify: true,
        position: 'bottom-left',
        text: {
            /*My text options */
        },
        colors: { // My custom colors
        }
      }
    }]);

    OneSignal.push(function(){
        OneSignal.showHttpPrompt();

        OneSignal.getUserId().then(function(userId){
            console.log("OneSignal User ID:", userId);
        });
    });
</script>

显示幻灯片提示消息效果很好,但订阅后我需要刷新网站才能在控制台中获取用户 ID。如何修改此代码功能以在订阅后立即在控制台中获取用户ID?

您需要为订阅更改事件添加侦听器。否则,getUserId 调用将在用户接受订阅之前触发。这对我有用:

var OneSignal = window.OneSignal || [];

OneSignal.push(function() {
  OneSignal.on('subscriptionChange', function (isSubscribed) {
    console.log("The user's subscription state is now:",isSubscribed);
      OneSignal.push(function() {
        OneSignal.getUserId(function(userId) {
          console.log("OneSignal User ID:", userId);
        });
      });
    });
  });

  OneSignal.push(["init", {
    appId: "myappID",
    safari_web_id: "myID",
    autoRegister: false,
    promptOptions: {
        /* My prompt options */
    },
    welcomeNotification: {
        //my options
    },
    notifyButton: {
      enable: true,
      showCredit: false,
      prenotify: true,
      position: 'bottom-left',
      text: {
        /*My text options */
     },
     colors: { // My custom colors
     }
   }
}]);