寻找云代码(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)专家,处理安装和渠道的主要内容,如果未能解决你的问题,请参考以下文章

华为上机真题 2023寻找相同子串

华为上机真题 2022寻找身高相近的小朋友

Pro1:图片的隐藏和显示

手把手教你安装鸿蒙和运行第一个Demo(js)版

教程篇(5.0) 04. Fortint云服务和脚本 ❀ FortiEDR ❀ Fortinet 网络安全专家 NSE 5

技术干货听阿里云CDN安防技术专家金九讲tengine+lua开发