Я использую этот метод для отправки восходящих сообщений gcm в своем приложении для Android.
public void sendXMPPMessage(final int action, final DtoAble payload, final String messageId, final int retries) {
ThreadPool.run(new Runnable() {
@Override
public void run() {
boolean success;
int retry = 0;
do {
try {
XMPPClientMessage message = new XMPPClientMessage(action, getXMPPAuthentication(),
payload.toDto());
Bundle bundle = new Bundle();
bundle.putString(GCM.XMPP_FIELD_DATA, Json.toJson(message));
mGcm.send(GCM.USER_AT_SERVER, messageId, bundle);
mGcm.close();
success = true;
} catch (IOException e) {
Log.e(TAG, e.getMessage());
success = false;
}
} while (!success && ++retry <= retries);
if (!success) {
broadcastNack(messageId);
}
}
});
}
У меня есть два устройства, одно работает на Lollipop, а другое на ICS. Он отлично работает на устройствах с леденцами, а иногда и на ICS. Проблема в том, что когда он выходит из строя на ICS, у меня нет шансов узнать, что он вышел из строя и почему. Никаких исключений не возникает, и сервер ничего не получает. Что я делаю не так?
Каждый раз, когда я что-то отправляю, я получаю этот вывод журнала:
GcmService start Intent { act=com.google.android.gcm.intent.SEND flg=0x10 pkg=com.google.android.gms cmp=com.google.android.gms/.gcm.GcmService (есть дополнительные функции) } com. google.android.gcm.intent.ОТПРАВИТЬ
и я продолжаю получать выходные данные журнала, например:
08-14 16:57:52.596 517-30365/? I/GCM﹕ Сообщение GCM com.myapp.android 0:1439560671790038%23407868f9fd7ecd
08-14 16:58:02.756 517-30365/? I/GCM﹕ Сообщение GCM com.myapp.android 0:1439560681812929%23407868f9fd7ecd
08-14 16:58:12.556 517-30365/? I/GCM﹕ Сообщение GCM com.myapp.android 0:1439560691789966%23407868f9fd7ecd
08-14 16:58:22.996 517-30365/? I/GCM﹕ Сообщение GCM com.myapp.android 0:1439560701783336%23407868f9fd7ecd