Самое простое, понятное и наглядное применение — объединение в группу всех устройств одного пользователя. Когда нам нужно отправить сообщение, нам надо его отправить прежде всего пользователю. И дабы не вспоминать идентификаторы всех устройств пользователя (registration_id), мы используем только идентификатор пользователя (notification_key), к которому уже привязаны на стороне GCM сервера идентификаторы всех его устройств.
Задумка с notification_key была интересная: сервер приложения добавляет или удаляет идентификаторы устройств (registration_id) в группу, после чего можно отправлять сообщение сразу всей группе устройств. Тем самым мы экономим наши ресурсы за счёт ресурсов GCM. На практике возникли проблемы — по HTTP вообще не получалось отправить сообщение, хотя это было заявлено в документации. В каких-то случаях GCM сервер отвечал 500 при регистрации устройств в группе. Всё выглядело сыро, но, несмотря на это, у нас получилось реализовать работу по протоколу XMPP.
Сегодня посмотрел в документацию и увидел, что гугл пометил эту технологию Deprecated.
Вы уверены, что пуш сервер не обязан знать registration_id каждого девайса в группе, разве не пуш-сервер должен добавлять/удалять registration_id в/из группы?
Сервер приложения (не обязательно пуш сервер) регистрирует идентификаторы устройств в группах, после чего непосредственно пуш сервер оперирует только идентификаторами групп для отправки сообщений. Чисто теоретически, даже само устройство может себя зарегистрировать в группе, но это небезопасно ввиду того, что приложению окажется доступен приватный ключ GCM.
Буду признателен, если расскажите как отслеживать изменение registration_id при использовании notification_key.
Пока не могу ответить на этот вопрос. Есть предположения, что заменой registration_id в группе должен заниматься GCM сервер, но, смотря опять же на сырость данной технологии, нельзя быть в этом уверенным. Ну и после объявления Deprecated было бы правильным вообще отказаться от неё.
А как быть в ситуации, когда GCM меняет устройству registration_id, а push сервер работает с notification_key? В таком случае push сервер вообще не знает (не обязан знать) registration_id устройств, и canonical_ids ничего полезного ему не скажут.
Сегодня посмотрел в документацию и увидел, что гугл пометил эту технологию Deprecated.
Сервер приложения (не обязательно пуш сервер) регистрирует идентификаторы устройств в группах, после чего непосредственно пуш сервер оперирует только идентификаторами групп для отправки сообщений. Чисто теоретически, даже само устройство может себя зарегистрировать в группе, но это небезопасно ввиду того, что приложению окажется доступен приватный ключ GCM.
Пока не могу ответить на этот вопрос. Есть предположения, что заменой registration_id в группе должен заниматься GCM сервер, но, смотря опять же на сырость данной технологии, нельзя быть в этом уверенным. Ну и после объявления Deprecated было бы правильным вообще отказаться от неё.