繁体   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