2015-10-26 46 views
0

这似乎是一个已知问题,但是当我搜索每个人都在谈论重复创建GCM注册ID时。但是我没有重复的IDS,但我仍然有一些重复的次数,它会是一次10,它不是恒定的。我无法理解为什么。GCM从服务器创建多循环多个通知

以下是我的代码。

服务器端:

我在DB存储Registarion IDS,每当ID为perticular用户改变我更新表的列。所以我没有一个用户的多个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个元素,因为我在数据库中有2个用户。

当我检查BrodcastReceiver时,它总是获得多次调用。 由此我得到相同消息的重复通知。

我试过delayWhileIdle设置true仍然是一样的。 请帮忙

+0

您是否在两台设备上收到多个通知?你也可以尝试发送到一个单一的设备,看看你是否得到同样的问题? –

回答

0

不幸的GSM有时行为异常,所以我有一个解决方案,我知道它不是最好的解决方案,但M确定它会解决你的问题。一旦我有同样的问题,我通过创建一个标识符来避免这种情况。如果我收到消息A.我将标识符标记为A它意味着标识符有一个消息A并且当我收到另一个消息时(它是重复的)我简单地与我的标识符进行比较,如果它们相同我只是忽略消息,否则我会进一步处理...

+0

感谢您的建议,但我怎么能做到这一点,我有机会,我可能会得到一个重复的消息内容,如房间号码,如果它在不同的时间,那么我怎么能达到你建议 –

+0

好..一个房间只能一次被分配给一个人..当另一个房间被分配时,标识符也应该像第一次改变一样,那么它将是2 ..然后它可以是1,反之亦然...希望你明白 –