Hello,
I have used Aerogear Android SDK (2.2.0) in a native Android App to communicate with an
Aerogear Unified Push server and to use Google Cloud Messaging.
After several tests we have identified an issue with token management :
- register() successfully generates a token A against GCM and registration is OK
on Aerogear server side
- unregister() successfully invalidates the token A against GCM
("NotRegistered" is generated on GCM side when re-using the token) and
unregistration is OK on Aerogear server side
- when calling register() back, registration happens against Aerogear server but
with token A which has been invalidated by GCM
After analyzing the SDK source code, we realized that the token is saved in Android Shared
Preferences but this token is never removed from shared preferences when calling
unregister()!
As a consequence, when a user unregisters/registers to a variant, the "old"
token is not renewed and notification sending fails since Google has invalidated this
token!
We quickfixed the AeroGearGCMPushRegistrar class by adding a following line in the
unregister() method :
AeroGearGCMPushRegistrar.this.setRegistrationId(context, "");
However, I am very surprised that this issue was never seen before.
Am I using the registration/unregistration methods incorrectly? How can I force the token
re-generation against GCM?
Thanks,
Matthias