Проблема
Я пишу и Android SDK, который должен получать push-сообщения GCM со стороны сервера SDK. После нескольких часов успешной отправки push-сообщений сервер GCM возвращает ошибку NotRegistered
:
{
"multicast_id":6205350692941230304,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"NotRegistered"
}
]
}
registrationId
у клиента не изменился, а на стороне сервера обновлен этот токен.
Как я могу исправить проблему registrationId
? Имеет ли двух слушателей - один в SDK, один в приложении - проблема?
Архитектура
Мой Android SDK регистрирует GCM regId
при инициализации и отправляет этот идентификатор серверу, поддерживающему SDK.
Обширное приложение может (и обычно) регистрировать GCM regId
самостоятельно. Другой regId
, вероятно, отправляется на охватывающий сервер приложений.
senderId
для SDK и приложения разные.
Реализация
манифеста
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> ...
<receiver
android:name="com.xxxx.xxxxx.xxxxx"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</receiver>
Регистрационный код
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(mContext);
}
regid = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regid;
storeRegistrationId(mContext, regid);
listener.onGCMRegisterFinish(regid);
}
catch (IOException ex)
{
msg = "Error :" + ex.getMessage();
}
return msg;
}
Этот код получает regId
с сервера GCM и отправляет его на наш серверный сервер. Он выполняется при инициализации SDK, а regId
отправляется каждый раз, когда приложение возвращается из фона.
Примечания
-
unregister()
не вызывается, ни с сервера, ни с клиентской стороны - Я поднимаю тост с идентификатором регистрации каждый раз в то время, поэтому я могу проверить, что он одинаковый между клиентом и сервером:
2015-08-02 12:31:22,383 INFO - request_2145354041215926507
update push token for user: XXXXXXXX,
push_token: ...me1GttmSRipnWsCGVUueK7e0nk