我正在創建一個使用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