正在寻找云代码(javascript)专家,处理安装和通道
所以我最大的问题是,我以前从未编写过一行javascript,但随着我开发应用程序,我越来越清楚地知道我必须在云代码中使用它。 我有一个名为Groups的解析类,在这个类中,我使用以下数据存储组:正在寻找云代码(javascript)专家,处理安装和通道,javascript,android,parse-platform,parse-cloud-code,Javascript,Android,Parse Platform,Parse Cloud Code,所以我最大的问题是,我以前从未编写过一行javascript,但随着我开发应用程序,我越来越清楚地知道我必须在云代码中使用它。 我有一个名为Groups的解析类,在这个类中,我使用以下数据存储组: Name, Description, Users, Requests. 如果用户从他们的设备创建了一个组,它将在这里包含给定的名称、描述和用户指针,我正在使用带有+C字符的新objectId,有时objectId以数字开头,但它对频道订阅该用户安装无效,因此如果我查询这些组,我得到objectI
Name, Description, Users, Requests.
如果用户从他们的设备创建了一个组,它将在这里包含给定的名称、描述和用户指针,我正在使用带有+C字符的新objectId,有时objectId以数字开头,但它对频道订阅该用户安装无效,因此如果我查询这些组,我得到objectId,可以向组中的每个成员发送推送通知
我的第一个问题是,如果我使用以下代码将通道存储到parse中的安装对象:
groups = new Groups();
groups.setName(groupName.getText().toString());
groups.put("members", ParseUser.getCurrentUser());
groups.setDesc(description.getText().toString());
groups.saveEventually(new SaveCallback() {
@Override
public void done(ParseException e) {
//Subscribe to push
ParsePush.subscribeInBackground("C" + groups.getObjectId(), new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.d("com.parse.push",
"successfully subscribed to the broadcast channel.");
} else {
Log.e("com.parse.push", "failed to subscribe for push", e);
}
}
});
如果用户有多台设备,那么他不会仅在创建组的每个设备上获得推送通知。我搜索了它,我确信我必须使用一个解析云函数来完成订阅过程,使用它,特定用户的所有安装都将订阅相同的频道
这是我的第一个问题。有人能帮我解决这个问题吗?我读了所有的云文档
注意:
注册后,我添加指向安装的用户指针,如下所示:
ParseInstallation.getCurrentInstallation().put("user", ParseUser.getCurrentUser());
我的第二个问题:
我发现其他人也有问题,也有一些解决方案,但我的问题有点复杂。因此,正如我所注意到的,如果我从设备发送客户端通知,它将被发送到选定的频道,工作正常,但如果我删除应用程序,然后重新安装,并且我发送客户端通知,它将不会删除设备的多个安装对象,我将收到两次通知
我知道如果我从parse dashboard发送通知,它将执行删除作业。
所以我需要一个云功能来检查是否有其他安装具有相同的用户,并且在安装时添加了androidId,从Android Security获取它,如果有,然后删除它,检查是否有其他安装具有相同的用户,但不具有相同的androidId,将该安装的频道复制到我的新频道,然后保存新安装
同上,参考,示例代码,任何内容
我想这对其他人也有帮助,希望有人能帮助我
注意:如果您需要更多信息,请发表意见,我将在24小时内回答您的问题。每当应用程序打开时,请确保设备订阅了频道:
"user_" + ParseUser.getCurrentUser().getObjectId()
然后,您将向用户登录的所有设备发送推送通知。第一个问题解决方案: 我在列表视图中显示组,当添加新组时,列表必须自行刷新,它使用以下方法执行此操作:
public static void updateData() {
ParseQuery<Groups> query = ParseQuery.getQuery("Groups");
query.whereEqualTo("members", ParseUser.getCurrentUser());
query.setCachePolicy(ParseQuery.CachePolicy.CACHE_THEN_NETWORK);
query.findInBackground(new FindCallback<Groups>() {
@Override
public void done(List<Groups> parseObjects, ParseException e) {
if(e != null) {
return;
}
for( int i = 0; i < parseObjects.size(); i++){
Groups iter = parseObjects.get(i);
ParsePush.subscribeInBackground("C" + iter.getObjectId());
}
groupsAdapter.clear();
groupsAdapter.addAll(parseObjects);
}
});
}
每次我恢复到应用程序时,都会将此方法添加到onResume中,它会刷新列表和订阅所有频道的设备,这些频道是从他所属组的objectId创建的
我知道这不是一个很好的解决方案,但现在对我来说还不错。
仍然在寻找更好的答案和我的第二个问题 Hy@Dehli,我尝试过这个方法,但我的目标是让组中的每个用户在他们的每个设备上都得到通知。例如,在我的智能手机上,我创建了一个群组,它的id将存储在我的手机安装频道列表中,我的平板电脑将错过它,但通过您的代码,它将收到通知。但是,如果有其他用户使用另外两台设备,从一台设备加入我的组或我邀请他,使用此设备,他将获得组的objectId并作为通道存储在安装中,但他的另一台设备将错过该通道。但现在我有了一个想法,编码时间!那么为什么不查询组中的所有用户呢?正如您所看到的,我在创建组时存储创建者将用户解析为组,您认为这是否可行:ParseQuery installationQuery=ParseInstallation.getQuery;installationQuery.whereEqualTouser,groups.getParseUsermembers;groups.getParseUser方法是否会返回所选组中的所有用户?无法测试我的两台设备都会收到通知,但我担心其他用户不会收到通知。Hy@Dehli!我做了一个测试,它可能是错误的,但让我问一下,在groups表中,我只存储指向创建组的用户的指针类型,这种类型可以存储多个用户吗?因为在我的测试中似乎不是这样。你需要跟踪哪些用户在组中,然后你可以向这些用户拥有的所有设备发送查询。我在我的一个应用程序中使用了这种方法,它对我很有效。