This is somewhat similar to the previously reported issue:
http://groups.google.com/group/android-c2dm/browse_thread/thread/8203...
But it's not exactly the same, so I'm creating a new post.
The first 6 (of 10) steps in that post were as follows:
1. On a device signup as X...@gmail.com as the only signed up account.
2. App registers and sends back the device registration id.
3. Push a notification to the device,
4. Notification successfully reaches the device.
5. Now, from the browser, change the password of X...@gmail.com
6. On the device, X...@gmail.com reports authentication problems (as
expected).
Indeed if I do this, C2DM originally works, and after changing the
password on the web, if you try to for example refresh your gmail, you
do get reasonable feedback, prompting you to re-enter your password.
(The report from a manual sync in "Settings -> Accounts & sync
settings" isn't as good -- it just says "Sync is currently
experiencing problems. It will be back shortly." Which isn't exactly
true, but that's kind of besides the point here.)
Anyway, my question is what ought to happen when we're in this state.
I would expect that on the server side:
A1) If I try to push a notification to the device, I would get some
error code, likely InvalidRegistration or NotRegistered.
And on the client side:
A2) If I try to re-register (send
com.google.android.c2dm.intent.REGISTER) that I would receive a
registration Intent (com.google.android.c2dm.intent.REGISTRATION) with
the error code AUTHENTICATION_FAILED, or at least some error code.
A3) Perhaps even if the client does nothing, eventually it might
receive a com.google.android.c2dm.intent.REGISTER Intent with some
error code.
None of this happens. Here's what does happen. On the server side:
B1) Pushing a notification to the device appears to work. A 200
response is received, with no error code. However, the notification
is never received by the device (it never receives a
com.google.android.c2dm.intent.RECEIVE Intent).
And on the client side:
B2) Re-registration works fine. If I send
com.google.android.c2dm.intent.REGISTER, I get
com.google.android.c2dm.intent.REGISTRATION with no error code and
with a new registration_id. However, if the server tries to use this
new id, the behavior is the same as (B1) above.
B3) If the client instead does nothing, it doesn't eventually (even
after waiting a few days) receive
com.google.android.c2dm.intent.REGISTER with any error code.
I'm trying to figure out how to properly detect this state from either
the server or the client, so simply saying "assume the user will
eventually enter their new password on the device" isn't really an
adequate solution for me.
I can eventually get out of this situation via the following:
C1) Reboot the device. Attempt to re-register. The first sending of
com.google.android.c2dm.intent.REGISTER does nothing. There is no
error code returned, and no registration_id returned. There is no
com.google.android.c2dm.intent.REGISTRATION received at all.
C2) If I now attempt to re-register *again* (following the reboot),
now I receive a com.google.android.c2dm.intent.REGISTRATION Intent
with an AUTHENTICATION_FAILED error message. Which is basically what
I think I ought to be getting all along. But requiring a reboot is
pretty lame.
It appears to me that there are two distinct but related C2DM bugs.
That both the server should get an error when trying to send in this
case, and the client should get an error (or certainly not a new, but
useless, registration_id) when trying to re-register in this case.
Any thoughts? And if these really are bugs, does anyone from google
read these forums, and/or is there any other mechanism for reporting
them?
Thanks in advance for any help.
- Rich