我在验证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