当我在活动中发送消息时,我想向多个用户(即组的用户)发送通知

Posted

技术标签:

【中文标题】当我在活动中发送消息时,我想向多个用户(即组的用户)发送通知【英文标题】:I want to send notification to multiple users (that is users of a group) when i send a message in an activity 【发布时间】:2019-07-03 13:34:53 【问题描述】:

我有用户列表,当我发送消息时,该组中的所有用户都会收到消息,但不会发送通知。我使用 for each 循环遍历用户列表并发送通知。我正在使用相同的代码从一个用户向另一个用户发送通知(只是稍作修改)。请问我做错了什么?下面是我的代码:

// sends notification to respective users as soon as message is sent
    private void sendNotification(final List<String> receivers, final String username , final String message)

        /* for loop to loop through the list of users id in
        the group and send the notification accordingly */
        for(final String id : receivers)

            DatabaseReference tokens  = FirebaseDatabase.getInstance().getReference(Constants.TOKENS_REF);
            Query query = tokens.orderByKey().equalTo(id);
            query.addValueEventListener(new ValueEventListener() 
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                    for(DataSnapshot snapshot : dataSnapshot.getChildren())
                        Token token = snapshot.getValue(Token.class);
                        Data data = new Data(admin_uid, R.mipmap.app_logo_round, username+": "+message,
                                getString(R.string.application_name), id);

                        assert token != null;
                        Sender sender = new Sender(data, token.getToken());

                        // apiService object to sendNotification to users
                        apiService.sendNotification(sender)
                                .enqueue(new Callback<MyResponse>() 
                                    @Override
                                    public void onResponse(Call<MyResponse> call, Response<MyResponse> response) 
                                        if(response.code() == 200)
                                            if(response.body().success != 1)
                                                Toast.makeText(GroupMessageActivity.this,"Failed!",Toast.LENGTH_LONG).show();
                                            
                                        
                                    

                                    @Override
                                    public void onFailure(Call<MyResponse> call, Throwable t) 
                                        // display error message
                                        Toast.makeText(GroupMessageActivity.this,t.getMessage(),Toast.LENGTH_LONG).show();
                                    
                                );
                    
                

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) 
                    // display error message
                    Toast.makeText(GroupMessageActivity.this,databaseError.getMessage(),Toast.LENGTH_LONG).show();
                
            );


        

    

【问题讨论】:

Stack Overflow 是一个非常低效的调试器,所以你必须自己做很多事情,然后告诉我们如果你仍然卡住会发生什么。例如:当您在调试器中运行代码并在onDataChange 的第一行放置断点时,它会到达那里吗?如果是这样,您可以进入for 循环(即是否有任何token 值)?如果是这样,onResponse 第一行的断点会被命中吗? 好的....让我试试,然后请回来。 @Frank Van Puffelen,断点到达 onDataChange 的第一行,我在下面收到这条消息,但我不明白:DataSnapshot key = Tokens, value = upbpNg2QWabSpWS9kU6YIuAJxct1=token=d3VQn_ASn-A :APA91bF6Pn9CcYa_zK8cPkt-RgKftzymm4m9b7Kxbtxwq8FQZnGDyS1KOxoGpwrmvGb9s4iv67dWn92R6ZwRcX56MAYiUIh1XI697ttRQA8csDSZBLOLgAXEd22eB40x0Am5YedrdifV 如果调试器命中第一行,这意味着您正在从数据库中获取数据。因此,在这种情况下,问题可能在于您如何解析/处理dataSnapshot。所以请继续按照我的第一条评论中的步骤操作:您可以进入for 循环(即是否有任何token 值)?如果是这样,onResponse 第一行的断点会被命中吗? 会这样做并回来..谢谢 【参考方案1】:

我找到了答案,那就是清理我的项目并重建它。

为此:

    在菜单栏找到Build,点击它,你会看到Clean ProjectRebuild Project。 点击Clean Project,耐心等待gradle完成。 现在单击重建项目,它对我有用。

我上面发布的代码运行良好,但我认为 android studio 行为不端。希望它有助于以防有人遇到类似的问题。

【讨论】:

以上是关于当我在活动中发送消息时,我想向多个用户(即组的用户)发送通知的主要内容,如果未能解决你的问题,请参考以下文章

向多个用户发送推送通知android

Android 通知 - 为多个用户推送通知

具有多个提要和组的 Mailchimp RSS 活动

使用相同项目凭据的 GCM 的最大连接数

带有用户数据的 Firebase 通知

从一个活动获取变量到另一个活动