簡體   English   中英

使用django和GCM推送通知

[英]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支持)。 我建議你使用以下任何一種方法:

  1. Django的instapush
  2. Django的推通知

前者由我自己開發和維護。 可用於分別向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM