我正在构建一个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。
答案 0 :(得分:0)
好的,所以我不得不重新做这件事。我会回答它,以防有人遇到同样的问题。
在安装中包含用户名的问题是您需要确保正确处理它。顾名思义,安装与设备而不是用户相关联。这意味着,如果您的应用程序支持多个用户,那么处理relog是一个额外的步骤,否则用户将无法推送它们。
我忘了做一些,我的代码变成了sphagetti。
在挖掘了一下之后,我改变了方法,而是订阅了一个以用户的ObjectId命名的通道,并简单地将推送发送到该通道。然后,我在退出时取消订阅并在每次应用程序打开时重新订阅。这样,如果你关闭应用程序,你仍然可以接受推送。它也可以正常工作,并且需要更少的代码。