4

我在驗證GCM令牌時有點困惑。我在使用Sencha框架的跨平臺應用程序中工作,而我的服務器端使用的是Java。我有關於如何驗證註冊ID(GCM令牌)的查詢?是否有任何特定的API來驗證GCM令牌?你能指導我如何處理這個,無論是在客戶端還是服務器端?我已經在服務器端做過註冊部分,用戶可以在數據庫中註冊他們的GCM令牌。現在我需要驗證此註冊令牌。GCM令牌驗證

每2周取消註冊應用程序是一種好方法嗎?

回答

1

解決方案解決在使用canonicalID link的GCM驗證

private void asyncSend(List<String> partialDevices) { 
    // make a copy 
    final List<String> devices = new ArrayList<String>(partialDevices); 
    threadPool.execute(new Runnable() { 

     public void run() { 
     Message message = new Message.Builder().build(); 
     MulticastResult multicastResult; 
     try { 
      multicastResult = sender.send(message, devices, 5); 
     } catch (IOException e) { 
      logger.log(Level.SEVERE, "Error posting messages", e); 
      return; 
     } 
     List<Result> results = multicastResult.getResults(); 
     // analyze the results 
     for (int i = 0; i < devices.size(); i++) { 
      String regId = devices.get(i); 
      Result result = results.get(i); 
      String messageId = result.getMessageId(); 
      if (messageId != null) { 
      logger.fine("Succesfully sent message to device: " + regId + 
       "; messageId = " + messageId); 
      String canonicalRegId = result.getCanonicalRegistrationId(); 
      if (canonicalRegId != null) { 
       // same device has more than on registration id: update it 
       logger.info("canonicalRegId " + canonicalRegId); 
       Datastore.updateRegistration(regId, canonicalRegId); 
      } 
      } else { 
      String error = result.getErrorCodeName(); 
      if (error.equals(Constants.ERROR_NOT_REGISTERED)) { 
       // application has been removed from device - unregister it 
       logger.info("Unregistered device: " + regId); 
       Datastore.unregister(regId); 
      } else { 
       logger.severe("Error sending message to " + regId + ": " + error); 
      } 
      } 
     } 
     }}); 
    } 
7

您向GCM註冊並從客戶端的GCM取消註冊。這就是您從Google獲得註冊ID的地方。

一旦你有一個註冊ID,你應該考慮一下有效期至:

  1. 您發送與註冊ID到谷歌的服務器GCM的消息,並得到一個NotRegistered或InvalidRegistration錯誤。在這些情況下,您應該從數據庫中刪除註冊ID。

  2. 您向Google的GCM服務器發送帶有註冊ID的消息並獲得成功響應,但響應包含規範註冊ID。在這種情況下,您應該將註冊ID替換爲規範註冊ID。

  3. 該應用程序顯式地從GCM註冊並通知服務器,在這種情況下,您應該從您的數據庫中刪除註冊ID。

我沒有看到在每兩週註銷應用程序的任何意見。一旦安裝了新版本的應用,谷歌的代碼示例只會重新註冊應用,即便如此,它們在重新註冊之前也不會取消註冊。

+0

是啊,這是確切的解決方案。取得規範的註冊編號並用舊的替換。 –

+0

你可以解釋什麼時候我會得到規範ID,因爲當前註冊ID有效期爲7天。現在我正在跟蹤我的服務器中的規範ID –

+0

當前註冊ID無效7天。 Google可能會不時更新註冊ID。這就是爲什麼他們發佈了一個演示應用,認爲7天后註冊ID無效,但上次我檢查他們從演示中刪除了這種情況。如果您註冊GCM並獲得新的註冊ID,則應將其發送到您的服務器以更新數據庫。如果您不這樣做,服務器可能會在Google的響應中獲得規範的註冊ID,然後再修改數據庫。 – Eran