我正在尝试使用one Signal在我们的用户下订单和订单更改时向其发送推送通知。如何将播放器ID从一个信号关联到Meteor用户?
所以我可以使用以下Meteor方法吗?
Meteor.methods({
finishOrder: function(id) {
var data;
var PlayerId = Meteor.users.findOne({_id:id}).playerId
data = {
contents: {
en: 'We are reviewing the order'
}
};
return OneSignal.Notifications.create([PlayerId], data);
}
});

我认为它与
有关
window.plugins.OneSignal.getIds(function(ids) {
console.log('getIds: ' + JSON.stringify(ids));
alert("userId = " + ids.userId + ", pushToken = " + ids.pushToken);
});

var userVar = new ReactiveVar(null);
if (Meteor.isCordova) {
document.addEventListener('deviceready', function () {
window.plugins.OneSignal.setLogLevel({logLevel: 6, visualLevel: 4});
window.plugins.OneSignal
.startInit('------')
.getIds(function(ids) {
userVar.set(ids.userId)
.endInit();
}, false);
});
Accounts.onLogin(function() {
return window.plugins.OneSignal.getIds(function(ids) {
return Meteor.users.update({
_id: Meteor.userId()
}, {
$set: {
playerId: userVar.get()
}
});
});
});
}

但我无法让它发挥作用。因为它会运行并且不会获得Meteor用户,因为它还没有登录。
答案 0 :(得分:1)
终于得到了答案,这很简单。 首先是作为cordova的流星并使用反应变量你将玩家ID分配给userVar(无效变量)
var userVar = new ReactiveVar(null);
if (Meteor.isCordova) {
document.addEventListener('deviceready', function () {
window.plugins.OneSignal.setLogLevel({logLevel: 5, visualLevel: 4});
window.plugins.OneSignal.startInit('-------')
window.plugins.OneSignal.getIds(function(ids) {
userVar.set(ids.userId);
});
window.plugins.OneSignal.endInit();
}, false);
Accounts.onLogin(function() {
Meteor.call('addPlayerId', userVar.get())
});
}
然后使用服务器中建立的Meteor方法
Meteor.methods({
addPlayerId: function(playerId) {
return Meteor.users.update({
_id: Meteor.userId()
}, {
$set: {
playerId: playerId
}
});
}
});
最后这一部分。
Accounts.onLogin(function() {
Meteor.call('addPlayerId', userVar.get())
});