如何使用GCM和Google App Engine发出推送通知

时间:2015-07-13 03:02:23

标签: android google-app-engine google-cloud-messaging

我正在试图弄清楚如何使用Google Cloud Messaging向我的Android应用程序发出推送通知。

我在Google Cloud SQL上有一个MySQL数据库,其中包含一个Cloud Endpoints API,用于与该MySQL数据库进行交互(插入,更新等)。

现在,我想在我的MySQL数据库中创建一个名为“messages”的表,每当插入新消息时,我希望通过GCM通知我的Android应用程序。

我知道我需要有一个BroadcastReceiver来监听推送通知,但是我不确定我应该在哪里执行代码以使用GCM发送推送通知(在我的Cloud端点?)也不知道GCM如何知道我的消息表已用新行更新。

有人可以帮我理解这个中间步骤,还是指向一些教程的正确方向?

2 个答案:

答案 0 :(得分:0)

如果您正在寻找快速解决方案,那么它不会发生,因为这是一个非常重要的问题。根据所使用的框架,初始信令本身很容易。例如,在django中我使用信号,这样当模型保存到DB时,保存后信号可以发送GCM消息。

答案 1 :(得分:0)

最好的办法是在将消息记录写入数据库时​​将任务添加到推送队列中。该任务在运行时可以找到该消息的所有必需收件人,并将GCM消息发送给每个收件人。

这允许您对节流消息进行评级并从请求中卸载一些工作。

为清晰起见编辑:

  1. 云端点处理程序在事务中写入您的数据库
  2. 云端点处理程序将任务放在任务队列(推送队列)中 相同的交易
  3. 云端点返回
  4. 推送队列任务在另一个处理程序上异步执行
  5. 任务处理程序查找邮件收件人(数据库查询或类似文件)
  6. 任务处理程序使用来自数据库的有效负载
  7. 向每个收件人发送GCM消息

    这样做的好处是:

    • 消息保存和任务创建是事务性的,如果任何一个失败,您可以重试或将错误发送回客户端
    • 云端点调用不需要等待GCM RPC完成(即更快)
    • 如果GCM任务处理因任何原因失败,它将根据推送队列规则重试
    • 您可以使用队列配置独立控制GCM消息传送的速率
    • 您可以将GCM消息传递和相关处理卸载到不同的模块或后端,并为REST前端提供不同的消费配置文件。