在ParseInstallation对象中包含用户名是不好的形式?

时间:2015-07-10 12:25:16

标签: javascript java android parse-platform

我正在构建一个Android应用程序,它使用Parse的推送功能在单个用户之间发送消息,经过大量的不同解决方案(不启用客户端推送,因为这显然存在安全风险)后我决定:< / p>

// com.myapp.Application.java
public void onCreate(){
    ...
    ParseInstallation i = ParseInstallation.getCurrentInstallation();

    i.put("username", ParseUser.getCurrentUser().getUsername());
    i.saveInBackground();
    ...
}

现在,当我想向一个用户发送推送时,我会调用一个执行此操作的Cloud Code函数:

// cloud/main.js
Parse.Cloud.define("pushMessage", function(request,response) {

  var from = request.user.getUsername();
  var to = request.params["receiver"];

  var query = new Parse.Query(Parse.Installation);
  query.equalTo('username', to);

  Parse.Push.send({
    where: query,
    data: {
      alert: "message from " + from,
      // more data
    }
  }
}

这感觉有点像黑客,但它有效。这是不好的形式?我无法真正理解我到目前为止看到的解决方案,主要是因为它们几乎完全针对iOS而我无法阅读Objective-C。

1 个答案:

答案 0 :(得分:0)

好的,所以我不得不重新做这件事。我会回答它,以防有人遇到同样的问题。

在安装中包含用户名的问题是您需要确保正确处理它。顾名思义,安装与设备而不是用户相关联。这意味着,如果您的应用程序支持多个用户,那么处理relog是一个额外的步骤,否则用户将无法推送它们。

我忘了做一些,我的代码变成了sphagetti。

在挖掘了一下之后,我改变了方法,而是订阅了一个以用户的ObjectId命名的通道,并简单地将推送发送到该通道。然后,我在退出时取消订阅并在每次应用程序打开时重新订阅。这样,如果你关闭应用程序,你仍然可以接受推送。它也可以正常工作,并且需要更少的代码。