push-уведомления с django и GCM
у меня есть клиентское приложение для 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, и у меня есть таблица, которая содержит идентификатор устройства в сочетании с пользователем.
я регистрирую устройство в GCM при установке приложения.
Я также добавляю Device_id в таблицу в моей базе данных (с полем пользователя null
пока) и сохраните Device_id в моем клиентском приложении.
теперь, когда пользователь входит в систему, я отправляю запрос на мой сервер, который соединяет пользователя с ID устройства.
когда пользователь выходит из системы - в поле "пользователь"null
снова.
проблема - если UserA в настоящее время вышел из системы (не в моей базе данных), но должен получить уведомление-мой сервер будет смотреть на базу данных - > Таблица идентификаторов устройств и не найдет userA ни в одном из полей пользователя (потому что он в настоящее время вышел из системы).
в результате-уведомление будет потеряно (мой сервер не отправит его в GCM).
лучше всего будет, если, когда пользователь снова войдет в систему, он получит все уведомления, которые были отправлены ему, пока он вышел из системы.
Как я могу это сделать?
спасибо!
4 ответов
ответ заключается в том, что вам не нужны никакие пакеты вообще. GCM действительно прост, все, что вам нужно сделать, это сделать HTTP post к 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). Я бы рекомендовал вам использовать любой из следующих вариантов:
бывший разрабатывал и поддерживал сам. Может использоваться для отправки уведомлений GCM и APNS на устройства android и IOS соответственно, а также для поддержки mongoengine, если это то, что вы используете для своих моделей django. Вот ссылка на документация.
новый ответ, чтобы отразить обновленную информацию, требования в отредактированном вопросе.
очереди сообщений, которые будут отправлены пользователю, когда он не вошел в систему, удаляются от области GCM. Это просто вопрос поддержания копии сообщений на сервере.
Это может быть легко достигнуто с помощью Redis, но также может быть сделано путем добавления новой модели django, которая сохраняет сообщения. то есть. вы строите магазин и передовую систему.
только сигнал входа срабатывает, он должен выглядеть в этой вновь созданной таблице и запускать сообщения (при условии, что они не являются устаревшими)
вам не нужно все это. Вы можете отправить уведомление в приложение android, отправив запрос get в 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)