Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can two different devices have same GCM Registration ID?

I have been working on GCM for my Android app for a bit. I have noticed that almost every time I have a different GCM Registration ID for my device. Is it safe for me to keep a UNIQUE_KEY constrain on GCM Registration ID? And delete all the IDs with the error NotRegistered and update all the IDs which are canonical_ids?

like image 455
Aaswad Satpute Avatar asked Sep 08 '13 16:09

Aaswad Satpute


People also ask

What is GCM registration ID?

A Registration ID is an identifier assigned by GCM to a single instance of a single application installed on an Android device. The device is assigned this identifier when it registers to Google Cloud Messaging. The GCM documentation doesn't specify what information is encoded in this identifier.


1 Answers

a registration ID is tied to a particular Android application running on a particular device.

(from GCM Overview)

Two different devices would always have a different registration id. Even different apps on the same device have different registration ids.

Functionally it is safe to keep a UNIQUE_KEY constraint on the Registration ID, but since the Registration ID can be long (up to 4096 bytes, though in practice it's usually much shorter), some databases may prevent you from defining an index or constraint on such a large column. You might want to use a one way hash function that would map the Registration ID to a smaller value, store that value in a smaller column and have the constraint/index on that column.

When you get NotRegistered error, you should indeed delete that registration ID from your DB (or at least mark it with a status that says it is inactive, and stop sending messages to it). But if the app will be re-installed on a device from which it was earlier uninstalled, the app may get the same registration ID when it registers again to GCM, so your server should allow registration IDs that at one point gave NotRegistered to become active again.

You should update the old registration ID when you get canonical registration ID in the response from Google.

like image 152
Eran Avatar answered Oct 24 '22 09:10

Eran