我在驗證GCM令牌時有點困惑。我在使用Sencha框架的跨平臺應用程序中工作,而我的服務器端使用的是Java。我有關於如何驗證註冊ID(GCM令牌)的查詢?是否有任何特定的API來驗證GCM令牌?你能指導我如何處理這個,無論是在客戶端還是服務器端?我已經在服務器端做過註冊部分,用戶可以在數據庫中註冊他們的GCM令牌。現在我需要驗證此註冊令牌。GCM令牌驗證
每2周取消註冊應用程序是一種好方法嗎?
我在驗證GCM令牌時有點困惑。我在使用Sencha框架的跨平臺應用程序中工作,而我的服務器端使用的是Java。我有關於如何驗證註冊ID(GCM令牌)的查詢?是否有任何特定的API來驗證GCM令牌?你能指導我如何處理這個,無論是在客戶端還是服務器端?我已經在服務器端做過註冊部分,用戶可以在數據庫中註冊他們的GCM令牌。現在我需要驗證此註冊令牌。GCM令牌驗證
每2周取消註冊應用程序是一種好方法嗎?
解決方案解決在使用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);
}
}
}
}});
}
您向GCM註冊並從客戶端的GCM取消註冊。這就是您從Google獲得註冊ID的地方。
一旦你有一個註冊ID,你應該考慮一下有效期至:
您發送與註冊ID到谷歌的服務器GCM的消息,並得到一個NotRegistered或InvalidRegistration錯誤。在這些情況下,您應該從數據庫中刪除註冊ID。
您向Google的GCM服務器發送帶有註冊ID的消息並獲得成功響應,但響應包含規範註冊ID。在這種情況下,您應該將註冊ID替換爲規範註冊ID。
該應用程序顯式地從GCM註冊並通知服務器,在這種情況下,您應該從您的數據庫中刪除註冊ID。
我沒有看到在每兩週註銷應用程序的任何意見。一旦安裝了新版本的應用,谷歌的代碼示例只會重新註冊應用,即便如此,它們在重新註冊之前也不會取消註冊。
是啊,這是確切的解決方案。取得規範的註冊編號並用舊的替換。 –
你可以解釋什麼時候我會得到規範ID,因爲當前註冊ID有效期爲7天。現在我正在跟蹤我的服務器中的規範ID –
當前註冊ID無效7天。 Google可能會不時更新註冊ID。這就是爲什麼他們發佈了一個演示應用,認爲7天后註冊ID無效,但上次我檢查他們從演示中刪除了這種情況。如果您註冊GCM並獲得新的註冊ID,則應將其發送到您的服務器以更新數據庫。如果您不這樣做,服務器可能會在Google的響應中獲得規範的註冊ID,然後再修改數據庫。 – Eran