[英]push notifications with django and GCM
我有一個Android客戶端應用程序,我的服務器在django。
例如,我想在服務器中實現推送通知,以便在發生與其相關的數據發生變化時通知特定用戶。
我找到了這些鏈接:
不確定我需要哪個鏈接以及什么鏈接。
我想要的一個例子是:
用戶向服務器發出請求並更改數據,服務器向另一個用戶發送推送通知。
那么我應該安裝什么包? 也許任何教程要遵循? 我正在尋找任何幫助我的信息。
非常感謝!
---編輯----
所以我按照e4c5的建議做了,我有一個包含設備ID和用戶的表。
我在安裝應用程序時將設備注冊到GCM。 我還將Device_id添加到我的數據庫中的表中(用戶字段現在為null
)並將Device_id保存在我的客戶端應用程序中。
現在,當用戶登錄時,我向我的服務器發送請求,該請求將登錄用戶與設備ID耦合。
當用戶注銷時 - 用戶字段再次為null
。
問題是 - 如果UserA當前已注銷(不在我的數據庫中)但應該收到通知 - 我的服務器將查看數據庫 - >設備ID表,並且在任何用戶字段中都找不到userA(因為他是目前已退出)。
結果 - 通知將丟失(我的服務器不會將其發送到GCM)。
最好的情況是,當用戶再次登錄時,他將獲得在他退出時發送給他的所有通知。
我怎樣才能做到這一點?
謝謝!
答案是你根本不需要任何包裹。 GCM非常簡單,您只需要在google提供的URL上發布HTTP帖子 ,並且可以使用您最喜歡的python http客戶端庫。 如果你還沒有,我推薦python請求 。 大多數GCM庫實際上做的是在諸如此類的http庫之上添加一個薄層。
您需要有一個表來存儲GCM注冊ID。 如果要求使用您的應用的用戶注冊一個帳戶,您的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登錄和注銷信號來更新用戶字段(或清除它)
一個新的答案,以反映編輯問題中的更新信息和要求。
在未登錄時將要發送給用戶的消息排隊正在遠離GCM領域。 這只是在服務器上維護消息副本的問題。
這可以使用Redis輕松實現,但也可以通過添加保存消息的新django模型來完成。 即。 你正在建立一個商店和轉發系統。
一旦登錄信號被觸發,它應該查看這個新創建的表並觸發消息(假設它們不是陳舊的)
即使這已得到回答。 我建議你使用積極開發和支持的軟件包。 重新發明輪子是沒有意義的。 此外,您將獲得將來可能需要的其他優勢/功能(例如APNS支持)。 我建議你使用以下任何一種方法:
前者由我自己開發和維護。 可用於分別向Android和IOS設備發送GCM和APNS通知,如果您使用的django型號也支持mongoengine。 這是文檔的鏈接。
你不需要這一切。 您可以通過向谷歌發送獲取請求來向您的Android應用發送通知。 試試下面的代碼。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.