寻找云代码(javascript)专家,处理安装和渠道
Posted
技术标签:
【中文标题】寻找云代码(javascript)专家,处理安装和渠道【英文标题】:Looking for a Cloud Code ( javascript ) expert, dealing with Installations and channels 【发布时间】:2015-04-23 15:48:54 【问题描述】:所以我最大的问题是我以前从未编写过任何 javascript 行,但随着我开发应用程序,我越来越清楚我必须在 Cloud Code 中使用它。 我有一个名为 Groups 的解析类,在这个类中我使用以下数据存储组:
Name, Description, Users, Requests.
如果用户从他们的设备创建一个组,它将在此处包含给定的名称、描述和用户指针,并且我使用带有 +“C”字符的新 objectId(有时 objectId 以编号,但它对频道无效)将该用户(安装)下标到频道,所以如果我查询组,我会得到 objectId,我可以向组的每个成员发送推送通知。
我的第一个问题在这里,如果我使用以下代码将频道存储到安装对象中:
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);
);
如果用户有多个设备,那么他不会仅在他创建组的设备上收到每个设备上的推送通知。我搜索了它,我确信我必须在订阅过程中使用 Parse Cloud 功能,并且特定用户的所有安装都将订阅相同的频道。
这是我的第一个问题。任何人都可以提供帮助或只是给我一些参考来解决这个问题(我阅读了所有云文档)
注意: 注册后,我将用户指针添加到安装,如下所示:
ParseInstallation.getCurrentInstallation().put("user", ParseUser.getCurrentUser());
我的第二个问题:
我发现其他人也有问题,并且有一些解决方案,但我的问题有点复杂。所以我注意到,如果我从设备发送客户端通知,它将被传递到选定的频道,它工作正常,但是如果我删除应用程序然后重新安装它,并且我正在发送客户端通知,它不会删除设备的多个安装对象,我会收到两次通知 (我知道如果我从解析仪表板发送通知,它正在执行删除工作)。 所以我需要一个云功能来检查是否存在具有相同用户和 androidId 的其他安装(在安装时添加,从 Android Security 获取),如果存在,则将其删除,检查是否有其他安装相同的用户但不同的andoidId,将该安装的频道复制到我的新频道,然后保存新安装。
同上,参考,示例代码,任何东西。
我认为它对其他人也有用,希望有人可以帮助我。
(P.S.:如果您需要更多信息,请发表评论,我将始终在 24 小时内回复)
【问题讨论】:
【参考方案1】:每当应用打开时,请确保设备订阅频道:
"user_" + ParseUser.getCurrentUser().getObjectId()
然后您将推送通知发送到用户登录的所有设备。
【讨论】:
Hy @Dehli,我试过了,但我的目标是让组中的每个用户都能在他们的每台设备上收到通知。例如,在我的智能手机上我做了一个群组,它的 id 将存储在我的手机安装频道列表中(我的平板电脑会错过它,但使用你的代码它会收到通知)。但是如果有另一个用户有另外 2 个设备,他从一个设备加入我的组(或者我邀请他),使用这个设备,他将获取组的 objectId 并作为通道存储在安装中,但是另一个设备他会错过频道。但现在我有了一个想法,编码时间! 那你为什么不查询组中的所有用户呢? 如您所见,我在创建组时将创建者 ParseUser 存储到组中,您认为这会起作用吗: ParseQuery installationQuery = ParseInstallation.getQuery(); installationQuery.whereEqualTo("user" , groups.getParseUser("members")); groups.getParseUser 方法会返回所选组中的所有用户吗? (无法测试)我的两个设备都收到了通知,但我担心其他用户不会收到。 嗨@Dehli!我做了一个测试,它可能是错误的,但是让我问一下,在groups表中我只存储了一个指向创建组的用户的指针类型,这种类型可以存储多个用户吗?因为在我的测试中似乎没有。 您需要跟踪组中的用户,然后您可以向这些用户拥有的所有设备发送查询。我在我的一个应用程序中使用了这种方法,它对我有用。【参考方案2】:第一个问题解决方案:
我在列表视图中显示组,当添加新组时,列表必须自行刷新,它使用以下方法:
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 创建的所有频道。
我知道这不是一个很好的解决方案,但现在对我来说没问题。 并且仍在寻找一个更好的和我的第二个问题。
【讨论】:
以上是关于寻找云代码(javascript)专家,处理安装和渠道的主要内容,如果未能解决你的问题,请参考以下文章
教程篇(5.0) 04. Fortint云服务和脚本 ❀ FortiEDR ❀ Fortinet 网络安全专家 NSE 5