Подтвердить что ты не робот

Android GCM отправлен успешно, но не принят на некоторых устройствах

На стороне сервера я использую библиотеку GCM server 1.0.2, предоставляемую Google. На стороне клиента я настроил GCM, как указано в официальной документации .

Моя проблема в том, что все работает отлично на большинстве устройств, но на нескольких устройствах push не получают.

if (case1)
    message = new Message.Builder()
        .timeToLive(0)
        .collapseKey("0")
        .delayWhileIdle(false)
        .addData("msg", msg).build();
else if (case2)
    message = new Message.Builder()
        .collapseKey("2")
        .addData("msg", msg).build();
else
    message = new Message.Builder().addData("msg", msg).build();

Result result = sender.sendNoRetry(message, regId);
System.out.println("Message ID:"+result.getMessageId());
System.out.println("Failed:" + result.getErrorCodeName());

Из того, что я вижу из тестов с указанным выше кодом, ошибок нет. Идентификатор сообщения присутствует, но кодовое имя ошибки равно null (что является признаком успешного нажатия).

Я пробовал почти все настройки. Протестировано с TTL, клавишей свернуть, задержка при включении и выключении простоя.

Каковы некоторые случаи, которые могут вызвать блокировку (?) GCM push? И как я могу это решить?

ИЗМЕНИТЬ

Я понятия не имею, почему, но временное решение ниже решило мою проблему.

В GcmIntentService # onHandleIntent просто удалите

GcmBroadcastReceiver.completeWakefulIntent(intent);

Эта строка освобождает бодрствование. Мне любопытно, потому что на других устройствах push-сообщения отправляются непрерывно, даже если эта строка не была удалена.

Это не решение, потому что этот документ утверждает, что после каждой работы я должен называть completeWakeFulIntent. Кроме того, мой метод значительно разрядит батарею.

Любое предложение?

4b9b3361

Ответ 1

  • Убедитесь, что вы правильно установили SENDER ID, который вы получили от Google.
  • Убедитесь, что ваше устройство зарегистрировано в сервисе Google GCM правильно.
  • Убедитесь, что вы отправляете push к правильному регистровому идентификатору, который вы получили от Google. и что вы не получили сообщение об ошибке в сервисе Google GCM.
  • Установили ли вы delay_while_idle = 1? Это означает, что сообщение не дойдет до устройства, если он простаивает (выключен, отключен, заблокирован экран и т.д.). Измените его на delay_while_idle = 0, если вы хотите, чтобы ваше разрешение Wakelock имело какое-либо значение. Пожалуйста, прочитайте здесь.
  • Несколько раз требуется время для поступления (но не слишком много времени, тогда есть проблема). Проверьте, что "время жить" от нажатия, которое вы отправили.

Ответ 2

У вас есть правильная версия Playstore для получения уведомления? Вы зарегистрированы с помощью функциональной учетной записи Google на этих устройствах?

У меня также была проблема, когда я "принудительно останавливаю" приложение, вы не можете получать уведомления в любом приложении после "принудительной остановки" (начиная с android 3.1), поэтому будьте осторожны с этим.

Ответ 3

Если вы используете Wi-Fi, возможно, интернет-брандмауэр блокирует gcm. попробуйте использовать интернет со своей мобильной сим-картой.

Ответ 4

Контрольный список

  • Убедитесь, что в Google Play Store обновлена ​​последняя версия.
  • Удостоверьтесь, что нет системных настроек уведомлений, которые блокируют
  • Зайдите в приложение в Диспетчере приложений и снимите флажок "Уведомления"
  • Если на Wi-Fi, переключите Wifi-соединение на другую точку доступа (если возможно)
  • Перезагрузите устройство.
  • Установите 'Push Notification Fixer' (установите это в любом случае)

Первоначальная установка уведомлений может быть досадливо произвольной и требует, чтобы устройство было "ногами" одним или несколькими из этих способов.