Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
876 views
in Technique[技术] by (71.8m points)

android - GCM and id handling

I'm creating an app which uses Facebook and GCM. A user can use the app on multiple devices, a friend can send him GCM messages using his facebook id.

On my server, I have a table which maps the facebook id to a gcm id. The table does not require the facebook id to be unique, so messages can be sent to multiple devices.

In the docs, it demonstrates the following way to handle errors when sending a message:

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
 }
}

In CASE 1, it says to replace a registration id with the canonical registration id. But how do I know what registration id to replace? Say the receiver has 2 devices, I have 2 registration ids to choose from, but no idea which one I should pick.

In CASE 2, a same problem occurs. How do I know which registration id to remove from the database?

EDIT
For clarity, this is the code I'm using at the moment:

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;
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...