Не принимайте сообщение GCM, пока устройство Android не подключено к WIFI

Задний план

Я работаю над Android-приложением, которое использует Google Cloud Messaging (новый GCM-API, а не устаревший C2DM) для отправки сообщений отправки на синхронизацию всем зарегистрированным устройствам.

Поскольку я использовал официальную документацию, моя реализация клиента работает почти точно так же, как пример Google. В качестве сервера я использую простой PHP-скрипт, работающий на localhost, единственной задачей которого является отправка сообщений отправки на синхронизацию в GCM.

Проблема

Все работает нормально, пока мои устройства подключены к Интернету через сотовые сети, такие как UMTS (сервер отправляет уведомление GCM> GCM толкает уведомление на устройство, как только он находится в сети> уведомление отображается на устройстве).

Но когда устройство подключено к WIFI, никакие сообщения GCM больше не будут получены (хотя Google отправляет «успех» на мой PHP-сервер). Из-за следующего ответа я уже проверил, блокирует ли мой маршрутизатор некоторые порты, но это не так.

У меня была такая же проблема с получением push-сообщений, хотя сервер GCM ответил «Успех» из-за конфиденциальности Wi-Fi. Когда я использовал свою фирму wifi, я не мог получать сообщения на мобильных устройствах, поскольку они были заблокированы портом сервера GCM.

Интересно, что моя реализация уже работает с WIFI …
Пожалуйста, дайте мне знать, если у вас есть идеи, как я могу решить эту проблему. Спасибо за помощь!

Ответ Google при отправке сообщения GCM с PHP:

{ "multicast_id":4677038582377051331, "success":1, "failure":0, "canonical_ids":0, "results":[{"message_id":"0:1406364179145476%6ce83c64d7d6c7e2"}] } 

Очень сумасшедший поиск:

Проблема решена сама собой, когда я назвал PHP-скрипт, который отправляет мои сообщения GCM со смартфона, и с тех пор все работает нормально. В любом случае спасибо за помощь. 🙂

ПОДСКАЗКА

Тем временем этот «новый» GCM-API тоже не рекомендуется! Сейчас я использую последний GCM-API (опубликованный летом 2015 года). С момента обновления я еще никогда не сталкивался с этой проблемой. Новый API, в том числе InstanceId-API , очень рекомендуется с моей точки зрения, насколько я вижу, он более стабилен, чем старый GCM.

    Вам необходимо открыть порты 5228 – 5230, чтобы GCM работал правильно.

    Проверьте следующее:

    Note: If your organization has a firewall that restricts the traffic to or from the Internet, you'll need to configure it to allow connectivity with GCM. The ports to open are: 5228, 5229, and 5230. GCM typically only uses 5228, but it sometimes uses 5229 and 5230. GCM doesn't provide specific IPs. It changes IPs frequently. We recommend against using ACLs but if you must use them, take a broad approach such as the method suggested in this support link.

    Если ваша компания Wifi не разрешает эти порты, вы не сможете получить GCM.

    Надеюсь, поможет

    Если служба сработала для вас, ваше устройство «идентификатор регистрации» может быть изменено или просто неверно.

    Если вы никогда не работали для вас и после проверки того, что идентификатор регистрации вашего устройства совпадает с тем, который вы отправляете в полезную нагрузку для запроса в Google, проверьте свой широковещательный приемник и службу намерения GCM, которые пробуждают ваше устройство, потому что если эта реализация не работает Ваше приложение вы не получите никакого сообщения, даже если ваш запрос будет одобрен Google, поскольку вы указываете.

    Устаревшая GCM-версия

    Тем временем этот «новый» GCM-API тоже не рекомендуется! Сейчас я использую последний GCM-API (опубликованный летом 2015 года). С момента обновления я еще никогда не сталкивался с этой проблемой. Новый API, включая InstanceId-API , очень рекомендуется с моей точки зрения, насколько я вижу, он более стабилен, чем предыдущий GCM-API.

    Intereting Posts
    Как выпустить AAR с другой зависимостью проекта библиотеки Android? ListView не прокручивается до конца, когда клавиатура использует Кордова: все еще получаю сообщение об ошибке «пожалуйста, установите цель 23 Android» с установленным Android-23 sdk Форматировать сообщение об исключении, чтобы содержать весь стек в Google Analytics для Android? Получить индекс перечисления из строки? Как обрезать и поворачивать изображение программно в Android? Зарегистрировать новый тип файла в Android Создайте новый Android-проект на базе Gradle в IntelliJ IDEA Android-фонарик Мне нужно установить путь для сохранения изображений с помощью приложения для Android и IOS с UNITY Ошибка: операция по умолчанию не найдена Способ анализа XML (org.w3c.Document) на Android Как автоматически отображать активность через 5 секунд Android: привязка данных из базы данных к CheckBox в ListView? Ошибка Android Studio: неподдерживаемая версия плагина Android Gradle (0.9.2)