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

时间:2014-04-10 16:59:56

标签: android json django rest google-cloud-messaging

我有一个Android应用程序,我使用REST API(django rest framework)连接到我的服务器

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

  • 数据以json
  • 来回发送
  • 我有一个用户模型和一个任务模型,其中用户是某个任务的所有者。
  • 用户通常会向另一个用户发送任务(json类似于此:{"所有者":" exampleuser","来自":"其他用户","内容":"示例" ...}使用POST方法) - 任务有一个布尔字段"已完成"并在任务完成后删除(使用PUT或PATCH方法:completed = true,)
  • 一旦使用POST方法创建新任务,用户可以看到任何与其任务相关的活动的唯一方法是通过Android活动,该活动使用GET方法获取用户拥有的所有任务的列表,通过查找所有用户拥有的对象

所以我的问题是:

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

2 个答案:

答案 0 :(得分:31)

Android与Google的服务器之间保持一个有效连接,但它没有使用太多电量或数据,因为在向手机上的应用发送GCM消息之前,没有任何流量被发送。所有应用都只使用手机上的一个连接:安装使用GCM的新应用并不会增加任何额外负载。

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

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

答案 1 :(得分:7)

根据GCM实施,它要求实施远程服务器,该服务器将管理所有请求,包括传入和传出。您只需使用充当Web服务的Web服务器即可完成此操作,该服务器将获取(例如)来自具有HTTP POST请求的客户端的请求,并因此处理行为。

  

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

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

  

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

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

  

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

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

您可能需要阅读此内容:How to send location of the device on server when needed

这也引用了: