我正在创建一个使用 Facebook 和 GCM 的应用程序。用户可以在多个设备上使用该应用程序,朋友可以使用他的 facebook id 向他发送 GCM 消息。
在我的服务器上,我有一个将 facebook id 映射到 gcm id 的表。该表不要求 facebook id 是唯一的,因此可以将消息发送到多个设备。
在文档中,它演示了在发送消息时处理错误的以下方法:
if (result.getMessageId() != null) {
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {
//CASE 1
// same device has more than on registration ID: update database
}
} else {
String error = result.getErrorCodeName();
if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
// CASE 2
// application has been removed from device - unregister database
}
}
在CASE 1
中,它说用规范注册 id 替换注册 id。但是我怎么知道要替换哪个注册 ID?假设接收器有 2 个设备,我有 2 个注册 ID 可供选择,但不知道应该选择哪一个。
在CASE 2
中,也会出现同样的问题。我如何知道要从数据库中删除哪个注册 ID?
编辑
为清楚起见,这是我目前使用的代码:
List<String> gcmIds = getGCMIds(c, fbId);
if (gcmIds != null && !gcmIds.isEmpty()) {
Sender sender = new Sender(Params.GOOGLE_API_KEY);
Message message = new Message.Builder().addData("message", apiMessage.buildJSONString()).build();
MulticastResult result = sender.send(message, gcmIds, 5);
List<Result> results = result.getResults();
/* Do something with the results */
success = result.getFailure() == 0;
} else {
success = false;
}