GCM如何运作?(适用于Android的谷歌云消息)

use*_*525 5 django rest android json google-cloud-messaging

我有一个Android应用程序,我使用REST API(django休息框架)连接到我的服务器

这是一个场景(也许是我的计划):

  • 数据作为json来回发送
  • 我有一个用户模型和一个任务模型,用户是某个任务的所有者.
  • 用户通常将任务发送给另一个用户(json类似于此:{"owner":"exampleuser","from":"otheruser","content":"example"...}使用POST方法) - 任务有一个布尔字段"completed",一旦任务完成就被删除(使用PUT或PATCH方法:completed = true)
  • 一旦使用POST方法创建了一个新任务,用户可以看到任何与其任务相关的活动的唯一方法是通过一个android活动,该活动使用GET方法获取用户拥有的所有任务的列表,通过查找所有拥有的对象用户

所以我的问题是:

  1. 而不是让用户每次都检查应用程序.如何使用GCM推送通知用户?
  2. 它将如何告知哪个用户或设备发送推送通知?
  3. GCM如何知道任务发生变更或用户何时发布任务?

Sac*_*agi 31

Android会保留与Google服务器的一个活动连接,但它不会占用太多电量或数据,因为在向手机上的某个应用发送GCM消息之前,系统不会发送任何流量.所有应用程序都使用手机上只有一个连接:安装使用GCM的新应用程序不会增加任何额外负载.

GCM的第一步是第三方服务器(如电子邮件服务器)向Google的GCM服务器发送请求.然后,此服务器通过该打开的连接将消息发送到您的设备.Android系统会查看消息以确定它的应用程序,并启动该应用程序.该应用必须已在Android注册才能使用GCM,并且必须具有相关权限.当应用程序启动时,它可能会立即使用消息中的数据创建通知.GCM消息的大小非常有限,因此应用程序可能会打开与第三方服务器的正常连接以获取更多信息(例如,下载新电子邮件的标头).

使用推送通知的优势在于,应用程序不必定期运行以检查新数据,从而节省电力和数据.拥有像GCM这样的集中式机制的优势在于,设备只需要一个开放的网络连接,并且Android GCM系统是唯一需要继续运行的系统,而不是每个应用程序必须在后台保持运行才能保持自己的网络连接到自己的服务器.


nKn*_*nKn 7

根据GCM实现,它要求实现一个远程服务器,它将管理所有请求,包括传入和传出.您可以使用充当Web服务的Web服务器来执行此操作,该服务器将(例如)通过请求从客户端获取HTTP POST请求,并因此处理操作.

而不是让用户每次都检查应用程序.如何使用GCM推送通知用户?

这将由我刚才描述的服务器管理.它将知道谁订阅以及谁应该收到通知.

它将如何告知哪个用户或设备发送推送通知?

同样在这里.订阅后,服务器应将用户存储在某种存储(例如SQL数据库)中,这样它就会知道发送通知的人.这意味着您必须实现一些超时机制.就我而言,我让客户dummy每隔30秒发送一次HTTP POST.如果我没有在合理的时间内收到此请求,我认为客户端超时,因此我将其从数据库中删除.

GCM如何知道任务发生变更或用户何时发布任务?

同样的故事,它全部由服务器处理.您可以实现任何请求应该发生的逻辑.

您可能希望阅读此内容:如何在需要时在服务器上发送设备的位置

而这也引用了:

  • 当应用程序可能没有运行时,GCM如何将消息从服​​务器转换为Intent?什么在Android上运行,无法杀死(即,只要有消息可能会一直运行)执行此关键步骤,因此我的应用程序由Intent启动? (3认同)