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

时间:2017-01-25 11:16:24

标签: push-notification onesignal

在我的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);
                });
            }
        });

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

以下内容过去一直很好,但是最近,绑定到“ subscriptionChange”事件时根本无法获得玩家ID。

实际上,在事件侦听器中,“ OneSignal.push”执行后什么也没有。

尝试将其删除,然后直接转到“ OneSignal.getUserId”,但是诺言似乎什么也没有返回。

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);              
              });

似乎很奇怪,为什么在我们使用该确切代码超过一年的时间里,代码才刚刚停止工作。

有什么建议吗?

答案 2 :(得分:-1)

你好,这就是我用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***' )                
});