使用 oneSignal 将 PlayerId 添加到 Meteor.user

Add PlayerId to Meteor.user using oneSignal

我正在尝试使用 one Signal 在我的用户下订单以及订单更改时向他们发送推送通知。如何将一个 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 用户,因为它还没有登录。

终于找到答案了,很简单。 首先像 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.methods({
  addPlayerId: function(playerId) {
    return Meteor.users.update({
      _id: Meteor.userId()
    }, {
      $set: {
        playerId: playerId
      }
    });
  }
});

最后这一部分。

  Accounts.onLogin(function() {
    Meteor.call('addPlayerId', userVar.get())
  });