我正在创建一个使用Facebook和GCM的应用程序。用户可以在多个设备上使用该应用,朋友可以使用他的脸书ID向他发送GCM消息。GCM和id处理
在我的服务器上,我有一张桌子,它将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;
}
对于案例1:所以我仍然只有一个regid,不知道旧的regid在我的表中替换。 对于案例2,这似乎是一个体面的解决方案,谢谢! – nhaarman
啊,道歉,更新我的回答澄清。基本上与案例2相同,您希望使用消息ID的本地记录以及将它们发送到哪个注册ID,并使用该记录执行查找:) –
啊,当然。但现在的消息ID,我怎么才能得到它发送之前? Message类没有id getter。也许我应该不是一次发送消息,而是使用'send(Message,String,int)'而不是'send(Message,List,int)'。然后我会知道我发送给它的regid,因为那是当时唯一的一个。看起来还是有点不好意思。 –
nhaarman