2015-10-26 54 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,反之亦然...希望你明白 –