在我的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?
答案 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***' )
});