首页 > 解决方案 > 发送通知前检查当前接收者状态

问题描述

我的应用有两组用户(卖家和买家)。卖家可以从同一设备注销,也可以作为买家登录。通过收集特定的设备令牌,我在使用 FCM 的这些用户组之间发送通知方面非常成功。现在我遇到了一个问题。由于买方可以是同一设备中的卖方,因此即使他以 BUYER 身份登录,打算发送给卖方的通知也会在两个瞬间发送给他,因为设备令牌相同。我曾考虑过主题消息传递,但从文件中我了解到每个主题一次只能发送 1000 个通知,这对我的应用程序来说是不可行的解决方案是我喜欢检查 Receiver 状态是否(目前他是买家或发件人)在发送通知之前。目前他是买家或卖家,而不是以前的状态。我们如何能够在发送通知之前检查接收方当前状态?有办法吗?

下面的代码显示了我发送通知的方法,图像显示了我的数据库结构。在图像中可以看到用户(买方)和卖方具有相同的设备令牌

    void sendNotification(String name, String enquiry, String token){
    try {
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "https://fcm.googleapis.com/fcm/send";
        JSONObject data = new JSONObject();
        data.put("title","You have an Enquiry from: "+ name);
        data.put("body", enquiry);
        JSONObject notificationData =new JSONObject();
        notificationData.put("notification",data);
        notificationData.put("to",token);


        JsonObjectRequest request = new JsonObjectRequest(url, notificationData
                , new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {

                Toast.makeText(SendEnquiryActivity.this,"Success", Toast.LENGTH_SHORT).show();

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(SendEnquiryActivity.this,error.getLocalizedMessage(), Toast.LENGTH_SHORT).show();

            }
        }){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {

                HashMap<String,String> map =new HashMap<>();

                String key ="Key=//my key here";
                map.put("Authorization",key);
                map.put("Content-Type","application/json");
                return map;
            }
        };

        queue.add(request);


    }catch (Exception ex){

    }

}

在此处输入图像描述

标签: androidfirebaseandroid-studiofirebase-cloud-messaging

解决方案


推荐阅读