2013-12-17 3 views
12

У меня есть серверное приложение, которое отправляет уведомления о отправке GCM. Каждая отправка 1000 получателей возвращает сообщение, которое сообщает мне статус каждого регистрационного идентификатора. У некоторых будут коды ошибок. Есть ли где-то документ от Google, который говорит мне, как я должен обрабатывать эти коды и какие все возможные коды ошибок? Мой Google foo ничего не поднимает.Коды ошибок GCM

ответ

36

Вы не выглядели достаточно тяжело. Все коды поясняются here под номером Interpreting an error response.

Я попытался скопировать и вставить его для того, чтобы не быть ссылка только ответ, но форматирование откусил:

Интерпретация ошибочный ответ

Вот рекомендации по обработке различных типов ошибок , которые могут возникнуть при попытке отправить сообщение на устройство:

Missing Регистрация ID Убедитесь, что запрос содержит идентификатор регистрации (либо в параметре registration_id в текстовом сообщении, либо в поле регистрации в JSON). Случается, когда код ошибки MissingRegistration.

Неверный идентификационный номер Проверьте форматирование идентификатора регистрации, который вы передаете на сервер. Убедитесь, что он соответствует идентификатору регистрации, который телефон получает в , в намерении com.google.android.c2dm.intent.REGISTRATION и что вы - , не обрезая его или добавляя дополнительные символы. Бывает, когда код ошибки InvalidRegistration.

Несоответствующий отправитель Идентификатор регистрации привязан к определенной группе отправителей. Когда приложение регистрируется для использования GCM, оно должно указать, какие отправители разрешено отправлять сообщения. Убедитесь, что вы используете один из них, когда пытается отправить сообщения на устройство. Если вы переключитесь на другого отправителя , существующие идентификаторы регистрации не будут работать. Случается, когда ошибка код MismatchSenderId.

незарегистрированный Устройство Существующая регистрация ID может перестать быть действительным в ряде сценариев, в том числе:

  • Если приложение вручную Разрегистрирует путем выдачи com.google.android.c2dm.intent. УРЕГУЛИРОВАНИЕ НЕЗАВИСИМОСТИ.
  • Если приложение автоматически незарегистрировано, что может случиться (но не гарантируется), если пользователь удаляет приложение.
  • Если идентификатор регистрации истекает. Google может решить обновить регистрационные идентификаторы.
  • Если приложение обновлено, но новая версия не имеет широковещательного приемника, настроенного для приема com.google.android.c2dm.intent.RECEIVE.

Для всех этих случаев вы должны удалить этот регистрационный идентификатор с стороннего сервера и прекратить его использовать для отправки сообщений. Случается, когда код ошибки равен NotRegistered.

Сообщение Слишком большое Общий размер данных полезной нагрузки, включенных в сообщение, не может превышать 4096 байт. Обратите внимание, что это включает как размер ключей , так и значения. Бывает, когда код ошибки MessageTooBig. Ключ

Неверные данные Данные полезной нагрузки содержит ключ (например, от или любого значения с приставкой Google.), Который используется внутри GCM в com.google.android.c2dm.intent.RECEIVE Намерения и не может использоваться. Примечание , что некоторые слова (такие как collapse_key) также используются GCM, но имеют значение , допустимое в полезной нагрузке, и в этом случае значение полезной нагрузки будет , переопределенное значением GCM. Случается, когда код ошибки InvalidDataKey.

Недопустимого Time To Live значения для Времени жить поле должно быть целое число, представляющее время в секундах от 0 до 2,419,200 (4 недели). Бывает, когда код ошибки InvalidTtl.

Ошибка аутентификации Учетная запись отправителя, которую вы пытаетесь использовать для отправки сообщения, не может быть аутентифицирована. Возможными причинами являются:

  • Недопустимый заголовок авторизации или с недопустимым синтаксисом.
  • Недопустимый номер проекта, отправленный как ключ.
  • Ключ действительный, но с отключенным сервисом GCM.
  • Запрос выполнен с сервера, не включенного в белый список на IP-адресах сервера.

Убедитесь, что маркер, который вы отправляете внутри заголовка авторизации, является правильным ключом API, связанным с вашим проектом. Вы можете проверить правильность ключа API, выполнив следующую команду:

api_key = YOUR_API_KEY

локон --header "Разрешение: ключ = $ api_key" --header Content-Type: "приложение/JSon "https://android.googleapis.com/gcm/send -d" {\ "registration_ids \": [\ "ABC \"]} "

Если вы получили код состояния 401 HTTP, ваш ключ API недействителен. В противном случае вы должны увидеть что-то вроде этого:

{"multicast_id": 6782339717028231855, "success": 0, "failure": 1, "canonical_ids": 0, "results": [{"error": "InvalidRegistration" }]}

Если вы хотите подтвердить действительность регистрационного удостоверения, вы можете сделать это, заменив «ABC» на идентификатор регистрации. Случается, когда код состояния HTTP равен 401.

Тайм-аут Сервер не смог обработать запрос вовремя. Вы должны повторить один и тот же запрос, но ВЫ ДОЛЖНЫ соблюдать следующие требования:

Почитайте заголовок Retry-After, если он включен в ответ с сервера GCM. Внесите экспоненциальный откат в механизм повтора. Это означает экспоненциально возрастающую задержку после каждого неудачного повтора (например, , если вы ждали одну секунду перед первой попыткой, подождите не менее двух секунд до следующего, затем 4 секунды и т. Д.). Если вы отправили , отправляя несколько сообщений, задерживайте каждую из них отдельно с помощью дополнительной случайной суммы , чтобы избежать выдачи нового запроса на все сообщения в одно и то же время. Отправители, которые вызывают проблемы, могут попасть в черный список. Случается, когда код состояния HTTP находится между 501 и 599 или когда поле ошибки объекта JSON в массиве результатов равно . Недоступно.

Внутренняя ошибка сервера Сервер обнаружил ошибку при попытке обработать запрос. Вы можете повторить один и тот же запрос (соблюдая требования , перечисленные в разделе «Тайм-аут»), но если ошибка повторяется, сообщите о проблеме в группе android-gcm. Случается, когда код состояния HTTP равен 500, или когда поле ошибки объекта JSON в массиве результатов равно InternalServerError.

Недопустимое имя пакета Сообщение было адресовано идентификатору регистрации, имя пакета которого не соответствует значению, переданному в запросе. Случается, когда код ошибки InvalidPackageName.

EDIT (06/06/2015):

Новая таблица кодов ответа ошибка была размещена here.

Новые ответы об ошибке:

Device Rate Сообщение Превышен Скорость сообщений конкретного устройства слишком высока. Уменьшите количество сообщений, отправленных на это устройство, и не сразу повторите отправку на это устройство.

Темы Количество сообщений: Скорость сообщения для подписчиков определенной темы слишком велика. Уменьшите количество сообщений, отправленных для этой темы, и не сразу отправляйте повторную отправку.

+0

Спасибо, Эран! Мне стыдно говорить, что я несколько раз смотрел на эту часть страницы. Я думаю, что формат меня отбросил. –

+2

@Eran Ссылка в ответе больше не содержит контента: http://developer.android.com/google/gcm/http.html#error_codes На прошлой неделе я смог увидеть это содержимое. Я не уверен, что случилось за выходные. –

+0

@TamilVendhanKanagaraju Ну, в этом случае, это хорошо, что содержание здесь. – Eran

Смежные вопросы