GCM: отправлять уведомления только для текущего пользователя, зарегистрированного в приложении

Для приложения, которое я работаю, мне необходимо интегрировать Google Cloud Messaging. Поиграв немного с разными примерами, я смог отправить и получить уведомление по моему поводу.
Однако я столкнулся с интересной ситуацией. Как я знаю (пожалуйста, поправьте меня, если я ошибаюсь), registration_id выдается на устройство и на приложение.

Приложение, в котором я работаю, поддерживает функцию входа в систему. Когда приложение установлено и пользователь входит в систему в первый раз (пусть это будет «UserA»), я запрашиваю register_id из GCM, который затем отправляю его на свой сервер.

Теперь представьте, что UserA выходит из системы и дает своему устройству доступ к некоторому UserB. Другими словами, UserB регистрируется с использованием устройства UserA.

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

Поэтому я спрашиваю, есть ли способ заставить register_id быть зависимым от некоторого идентификатора пользователя (помимо устройства и приложения)? Или как я могу сделать так, чтобы зарегистрированный пользователь получал только свои собственные уведомления?

Да, это правда, что у вас есть один идентификатор регистрации google для приложения на устройство.

Но вы всегда можете регистрировать и отменить регистрацию пользователей на своем собственном сервере, которые будут отправлять сообщения в GCM, и GCM отправит их зарегистрированным устройствам.

Определите некоторые интерфейсы для своего сервера, такие как registerOnServer и unRegisteronServer, отправьте уникальное значение для каждого пользователя на этом интерфейсе.

Таким образом, в вашем случае, когда A использует Log ins, регистрация сначала выполняется на GCM и регистрирует пользователя на вашем сервере с помощью интерфейса registerOnServer, и пока пользователь регистрирует отправленные уведомления, относящиеся к нему, к GCM для отправки на устройство.

Когда A выйдет из системы, отмените регистрацию с помощью unRegisterServer и не отправляйте сообщения с вашего сервера на GCM, поскольку A не зарегистрирован.

Итак, теперь, если B регистрируется даже с тем же устройством, зарегистрируйте его на своем сервере и отправьте его сообщения.

Это решит вашу проблему!

Intereting Posts
Как преобразовать файл .obj в Android openGL? Добавление массива в качестве свойства в объекте greenDAO Android – пустое пространство остается после просмотра переведено Android – Ускорение вниз (разбить) Какое ключевое слово используется в этом примере кода? Подключение PhoneGap с localhost webservice React native интегрируется с существующим сбоем приложения: «Невозможно найти переменную: __fbBatchedBridge» Только текст галереи Android Как использовать компонент DrawerLayoutAndroid для создания ящика в приложениях с реакцией? Получение драйвера adb для htc wildfire, поэтому я могу установить приложения для Android Венгерская нотация в соглашениях об именах Android После удаления события перекрытия OverlayItem все еще срабатывают Активность Android в диалоге, но без заголовка Разница между CONNECTION_STATE_CHANGED и STATE_CHANGED Как запустить локальное сетевое подключение программно через точку доступа Wi-Fi на Android?