这似乎是一个已知的问题,但当我搜索每个人都在谈论重复创建GCM注册ID。但我没有重复的IDS仍然我有时会重复3次,有时候是3次,这不是常数。我无法理解为什么。
以下是我的代码。
服务器端:
我在DB中存储Registarion ID,并且每当特定用户的ID发生更改时,我都在更新表的列。所以我没有单个用户的多个Id。
if(conn!=null)
{
PreparedStatement stmt = conn.prepareStatement("SELECT DISTINCT regid from userlogin1");
ResultSet rs = stmt.executeQuery();
while(rs.next())
{
list.add(rs.getString(1));
}
}
从此我选择不同的Id
for(int i=0;i<list.size();i++)
{
String regId = list.get(i).toString();
System.out.println(regId);
String userMessage = request.getParameter("message");
Sender sender = new Sender(GOOGLE_SERVER_KEY);
Message message = new Message.Builder().collapseKey("Gcm").timeToLive(30)
.delayWhileIdle(false).addData(MESSAGE_KEY, userMessage).build();
result = sender.send(message, regId, 1);
request.setAttribute("pushStatus", result.toString());
}
通过这个我推动消息。
我的列表包含2个元素,因为我在DB中有2个用户。
当我检查BrodcastReceiver时,它总是多次调用。 由于这个原因我得到相同消息的重复通知。
我试过delayWhileIdle设置为true仍然相同。 请帮忙
答案 0 :(得分:0)
不幸的是,GSM有时表现异常所以我有一个解决方案,我知道它不是最好的解决方案,但我相信它会解决你的问题。一旦我有同样的问题,我通过创建一个标识符来避免这种情况。如果我收到消息A.我将标识符标记为A它表示标识符有消息A,当我收到另一条消息(重复)时,我只是简单地与我的标识符进行比较,如果它们相同我只是忽略该消息,否则我进一步处理......