Поскольку GCM постоянно обновляется, большинство ресурсов, которые я искал, выглядят устаревшими или неясными. В принципе, я смущен, когда токены и идентификаторы истекают. (Для справки, я работаю с Android.)
Из того, что я понимаю (и, пожалуйста, поправьте меня, если я ошибаюсь), мой сервер имеет ключ API и идентификатор отправителя. Используя идентификатор отправителя, я могу запросить у моего клиента токен через InstanceID, хранящийся локально на моем клиенте. Я уже немного смущен. Идентификатор экземпляра присваивается момент, когда мое приложение выходит в интернет? Это когда-нибудь меняется? Как насчет того, когда приложение обновляется или удаляется и переустанавливается (или устройство восстанавливается)? Вызывая InstanceID.getInstance, я всегда получаю тот же InstanceID, или он в конечном итоге истечет и даст мне новый? Есть ли значение для хранения строки, которую вы извлекаете, вызывая getID()? Документы, похоже, указывают на то, что вы действительно получаете новый экземпляр InstanceID при вызове getID(), что усложняет ситуацию еще больше. (Для справки, я имею в виду: https://developers.google.com/instance-id/)
Используя InstanceID, мой клиент может запросить токен с серверов GCM, который затем отправляет на сервер приложений. Мой сервер приложений хранит этот токен и может использовать его для отправки сообщений на серверы GCM, которые затем отправят сообщение на устройство. Я полагаю, устройство использует хранимый экземпляр InstanceID для фактического получения этих сообщений. Итак, если класс, который расширяет GcmListenerService, позволит мне получать эти сообщения с помощью onMessageReceived? Мне не нужно делать ничего особенного (кроме определения его в AndroidManifest)? Мне не нужно на самом деле говорить об этом с помощью InstanceID? Он просто волшебным образом знает?
Когда истекают эти идентификаторы и токены? Они истекают? Я храню токен как строку на сервере, но если в какой-то момент один из них истекает, как я знаю, что они истекли? Я всегда могу создать новый InstanceID и Token, что очень легко, но тогда старые остаются активными? Как стереть старые маркеры с сервера? Кажется, есть простой способ сделать это с APNS на стороне iOS вещей, где вы можете получить список всех истекших токенов и просто стереть их из своей базы данных.