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

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

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

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

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

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

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

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

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

--- EDIT ----

Итак, я сделал так, как предположил e4c5, и у меня есть таблица, которая содержит идентификатор устройства в сочетании с пользователем.

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

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

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

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

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

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

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

спасибо!

Ответ 1

Ответ заключается в том, что вам вообще не нужны пакеты. 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 логин и сигналы выхода, чтобы обновить поле пользователя (или очистить его), когда кто-то регистрирует вход/выход

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

Вам не нужно все это. Вы можете отправить уведомление в свое приложение для 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)