Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在寻找云代码(javascript)专家,处理安装和通道_Javascript_Android_Parse Platform_Parse Cloud Code - Fatal编程技术网

正在寻找云代码(javascript)专家,处理安装和通道

正在寻找云代码(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

所以我最大的问题是,我以前从未编写过一行javascript,但随着我开发应用程序,我越来越清楚地知道我必须在云代码中使用它。 我有一个名为Groups的解析类,在这个类中,我使用以下数据存储组:

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表中,我只存储指向创建组的用户的指针类型,这种类型可以存储多个用户吗?因为在我的测试中似乎不是这样。你需要跟踪哪些用户在组中,然后你可以向这些用户拥有的所有设备发送查询。我在我的一个应用程序中使用了这种方法,它对我很有效。