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

Push notification OneSignal-用户订阅后如何获取PlayerId?,push-notification,onesignal,Push Notification,Onesignal,在我的javascript代码中,我要求用户使用OnceSignal服务订阅网站通知,所以我会: OneSignal.registerForPushNotifications(); 然后,我尝试通过以下内容捕获订阅用户的PlayerId: OneSignal.push(function() { OneSignal.on('notificationPermissionChange', function(permissionChange) {

在我的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服务器上的PlayerId不同,而格式相同。UserId和PlayerId是不同的东西吗?如果是这样,在用户订阅推送后如何获取PlayerId?

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


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”,但该承诺似乎没有任何回报

OneSignal.on('subscriptionChange',函数(已订阅){
console.log('is subscribed',isSubscribed);
OneSignal.push(函数(){
console.log('trust to get id');//还没到这一步
getUserId(函数(userId){
console.log('user id',userId);//没有到这一步
});
});

});谢谢。他们似乎仍然不同。如果我将OneSignal.getUserId(function(userId){…放在OneSignal.push([“getNotificationPermission”,function(permission){或OneSignal.push(function(){OneSignal.on('subscriptionChange',function(isSubscribed))内{…我在控制台中得到了相同的值,例如:3c4d2ae9-de39-4780-92fb-76667f7681ec,但在服务器上它仍然不同:f2736015-ffca-4cef-bf03-b5708bdb1504Ok,我现在已经了解了发生了什么。它从缓存中给我一个旧的用户ID。如果我完全清除缓存,我会从服务器获得与之匹配的正确用户ID。你呢是的没有notificationPermissionChange发生得太早,当我清除浏览器缓存时,我在该事件中得到UserId=null,并且在subscriptionChange事件中得到了我所需要的,非常感谢。现在我不能告诉用户清除缓存以使用该应用程序。这里有什么更好的解决方案?好的,它工作了,但不确定确切的问题,但是,我怀疑t这已经有一段时间不起作用了,但是没有人注意到。最终创建了一个新站点,并启用了“我的站点不完全是HTTPS”。然后上载了服务工作者文件,配置了服务工作者(托管在子目录中,并为/设置服务工作者标题)-显然,我们没有在根目录中托管第三方LIB!现在她又开始工作了。我猜当它工作时,它是通过http的。