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)