OneSignal - 如何在用户订阅后获取 PlayerId?

OneSignal - How to get PlayerId after user subscribes?

在我的 javascript 代码中,我要求用户使用 OnceSignal 服务订阅网站通知,所以我这样做:

    OneSignal.registerForPushNotifications();

然后我尝试使用以下方法捕获订阅用户的 PlayerId:

    OneSignal.push(function() {
        OneSignal.on('notificationPermissionChange', function(permissionChange) {
            var currentPermission = permissionChange.to;

            if (currentPermission == "granted") {
                OneSignal.getUserId(function(userId) { 
                    console.log(userId);
                });
            }
        });

然后我获取该用户 ID 并将其存储在我的 mysql 数据库中,以便稍后发送通知。但由于某种原因,userId 与存储在 OneSignal Server 上的 PlayerId 不同,但格式相同。 UserId 和 PlayerId 是不同的东西吗?如果是这样,用户订阅推送后如何获取PlayerId?

很可能您看到的是旧用户 ID。 notificationPermissionChange 事件发生得太早,无法获取用户 ID。该事件仅用于分析,如果您想在订阅后查找用户的 ID,请使用 subscriptionChange 事件。

SDK 文档 Link:https://documentation.onesignal.com/docs/web-push-sdk

你好,这是我用 js 完成的方法 问候,我希望它对你有用。

window.plugins.OneSignal
            .addSubscriptionObserver(function(state){
            var datos = JSON.stringify(state);
            var valor = JSON.parse(datos); 
            var playerId = valor.to.userId
            console.log( playerId + ' *_IF_**PLAYER ID***' )                
});

下面的代码曾经很好地工作,但是最近,在绑定到 "subscriptionChange" 事件时根本无法获取玩家 ID。

事实上,在事件侦听器中,"OneSignal.push" 执行后没有任何内容。

尝试删除它并直接转到“OneSignal.getUserId”,但似乎承诺 returns 什么都没有。

OneSignal.on('subscriptionChange', function (isSubscribed) {
            console.log('is subscribed', isSubscribed);
            OneSignal.push(function() { 
              console.log('attempt to get id'); // doesn't get this far
              OneSignal.getUserId(function(userId) {
                console.log('user id', userId); // doesn't get this far                
              });
            });
          });

奇怪的是,如果将其粘贴到控制台中,可以正常获取播放器 ID,只是在回调期间没有任何返回。

 OneSignal.getUserId(function(userId) {
                console.log('user id', userId);              
              });

似乎真的很奇怪为什么代码刚刚停止工作,因为我们使用这个确切的代码一年多了。

有什么建议吗?