Intereting Posts
Может ли сборщик мусора отменить выделение одного экземпляра? (И почему и как его избежать) Модернизируйте, как обрабатывать ответы на два типа? Как я могу отключить салфетки в ответном натурном навигаторе Запрос входа в GoogleIdToken возвращает значение null Есть ли способ включить JavaScript Error / Debug Console для Safari в Android? Передача данных с помощью ультразвука Почему один и тот же интерфейс визуализируется по-разному на эмуляторе и устройстве? Лучший способ работы с датами в Android SQLite Android: Хорошо ли хранить токен аутентификации в общих предпочтениях? Установка Xamarin Mono для Android Использование Build Flavors – структурирование исходных папок и build.gradle правильно Как показать всплывающее меню под панелью действий? Стоимость повышения намерения в андроиде DialogFragment – сохранение слушателя после поворота экрана NullPointerException в анимации исчезновения RecyclerView из поддержки v.23.2.0

Push-уведомления с помощью django и GCM

У меня есть приложение для Android android, и мой сервер находится в django.

Я хочу реализовать push-уведомления на сервере, чтобы уведомить конкретных пользователей, когда, например, происходят изменения в данных, связанных с ними.

Я нашел эти ссылки:

  • https://django-gcm.readthedocs.org/en/latest/quickstart.html
  • https://github.com/bogdal/django-gcm
  • https://github.com/jleclanche/django-push-notifications

Не совсем уверен, какую ссылку мне нужно и для чего.

Примером того, что я хочу, является:

Пользователь делает запрос на сервер и изменяет данные, а сервер отправляет push-уведомление другому пользователю.

Итак, какой пакет я должен установить? И, возможно, какие-то учебники, чтобы следовать? Я ищу любую информацию, чтобы помочь мне.

большое спасибо!

— РЕДАКТИРОВАТЬ —-

Поэтому я сделал это как e4c5, и у меня есть таблица, содержащая Device ID в сочетании с пользователем.

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

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

Когда пользователь выходит из системы – поле пользователя снова имеет значение null .

Проблема заключается в том, что если UserA в настоящее время вышла из системы (а не в моей базе данных), но должна получать уведомление – мой сервер будет смотреть таблицу базы данных -> Devices IDs и не будет находить userA в любом из полей пользователя (поскольку он В настоящее время вышла из системы).

В результате – уведомление будет потеряно (мой сервер не отправит его в GCM).

Лучше всего было бы, если, когда пользователь войдет в систему снова, он получит все уведомления, которые были отправлены ему, когда он вышел из системы.

Как я могу это сделать?

благодаря!

Solutions Collecting From Web of "Push-уведомления с помощью django и GCM"

Ответ заключается в том, что вам вообще не нужны пакеты. GCM действительно прост, все, что вам нужно сделать, – это сделать HTTP-сообщение на url, предоставленное google, и что вы можете сделать с вашей любимой клиентской библиотекой python http. Если у вас его еще нет, я рекомендую запросы python . Фактически большинство библиотек GCM добавляет тонкий слой поверх библиотеки http, такой как это.

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

 class Device(models.Model) : ANDROID = 1 IPHONE = 2 CHROME = 3 OTHER = 4 DEVICE_CHOICES = ( (ANDROID, 'Android'), (IPHONE, 'iPhone') , (CHROME,'Chrome'), (OTHER,'Others')) device_id = models.CharField(unique = True, max_length = 1024, default='') device_type = models.SmallIntegerField(choices = DEVICE_CHOICES) user = models.ForeignKey(User, null = True) 

Возможно, вы захотите нажать сигналы входа и выхода из системы django, чтобы обновить поле пользователя (или очистить его), когда кто-то регистрирует вход / выход

Хотя на это и был дан ответ. Я бы рекомендовал вам использовать пакет, который активно разрабатывается и поддерживается. Нет смысла повторно изобретать колесо. Кроме того, вы получите другие преимущества / функциональные возможности, которые могут понадобиться вам в будущем (например, поддержка APNS). Я бы рекомендовал вам использовать одно из следующих:

  1. Джанго-instapush
  2. Джанго-PUSH-уведомления

Первый разрабатывается и поддерживается мной. Может использоваться для отправки уведомлений GCM и APNS на устройства Android и IOS соответственно, а также поддерживает mongoengine, если это то, что вы используете для своих моделей django. Вот ссылка на документацию .

Новый ответ для отражения обновленной информации, требований в отредактированном вопросе.

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

Это можно легко достичь с помощью Redis, но также можно сделать, добавив новую модель django, которая сохраняет сообщения. то есть. Теперь вы строите магазин и систему переадресации.

Вскоре, когда сигнал входа в систему запущен, он должен посмотреть в эту вновь созданную таблицу и отключить сообщения (при условии, что они не устарели)

Тебе это не нужно. Вы можете отправить уведомление в свое приложение для Android, отправив запрос на получение google. Попробуйте под кодом.

  notification_params={} notification_params['event'] = event notification_params['message'] = msg notification_params['timstamp'] = datetime.datetime.now() values = { "to": [list of android gcm registration keys], "collapse_key": "collapse key" , "data": json.dumps(notification_params) } headers = { "UserAgent":"GCMServer", "ContentType":"application/json", "Authorization":"key="+GCM API key } requests.post(url="https://android.googleapis.com/gcm/send",data=values,headers=headers)