android - 发送通知前检查当前接收者状态
问题描述
我的应用有两组用户(卖家和买家)。卖家可以从同一设备注销,也可以作为买家登录。通过收集特定的设备令牌,我在使用 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){
}
}
解决方案
推荐阅读
- asp.net-core - jenkin管道中如何将上游项目的DLL传递给下游项目
- javascript - 使用 setState 更新助手和事件目标拼接到对象数组仅适用于初始数组索引,而其他所有对象均失败
- mysql - 在 mysql 中按 utf8_vietnamese_ci 排序不起作用
- swift - 斯威夫特有片面的进步吗?
- c# - 是否可以在不启动表单应用程序的情况下从 c# 类库运行 Windows 表单代码?
- macos - 如何让 --watch 标志在 OSX 命令行上工作?
- ios - Xamarin Forms IOS 应用程序图标 - 文件不存在
- java - 在生产者/消费者模式中使用多个生产者和消费者对java中的字符串进行排序有什么好处?
- python - 从字符串中提取 Word 模板
- html - 如何水平居中文本(h2)?我有问题