【问题标题】:Android push notification with Google Cloud Messaging and Google App Engine as backend使用 Google Cloud Messaging 和 Google App Engine 作为后端的 Android 推送通知
【发布时间】:2015-08-27 21:56:41
【问题描述】:

我想将通知从 GAE 后端推送到 Android 应用程序。我已经成功地通过这个链接实现了通信:https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints

但是,我对这里的逻辑感到困惑。

  1. 在本例中,我们已通过 AsyncTask 向 GCM 执行客户端注册。我想在 GAE 后端完成某些代码执行时通知用户,但不需要从 Android 调用某些 AsyncTask。我只需要在此代码完成执行时从 GAE 接收消息。这可能吗?我只是不知道这里的工作流程应该如何。
  2. 另外,客户端需要做什么才能“监听”新消息?一些总是在后台运行的服务任务?或者这个例子中的public class GcmIntentService extends IntentService 已经完成了,我只需要识别消息类型?

如果有人可以向我解释这个工作流程,并且一些代码示例也很好。

【问题讨论】:

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


    【解决方案1】:

    你真的应该通过GCM guide,让GCM运行并不难,但它需要一系列不能跳过的步骤。

    在这个例子中,我们通过 AsyncTask 向 GCM 执行了客户端注册。当一些代码在 GAE 后端完成执行时,我想通知用户,但不需要从 Android 调用一些 AsyncTask

    一个完整的 GCM 实现需要客户端注册到 GCM 服务器以获得其唯一 ID,并且您的服务器存储该 ID 以便直接联系该客户端,这就是为什么您需要至少一个连接来发送此数据到你的服务器。您可以通过使用名为topics 的新功能来解决此问题,这样,一旦客户端注册,它就可以订阅一个主题,并且您的服务器不需要知道任何客户端的特定 GCM 密钥。我不推荐最后一种方法,因为它的可扩展性不高,并且会禁用与您的服务器的任何 1 对 1 通信。

    另外,客户端需要做什么才能“监听”新消息?一些总是在后台运行的服务任务?或者这是否已经通过 public class GcmIntentService extends IntentService 从这个例子中完成,我只需要识别消息类型?

    您需要设置一个广播接收器来处理传入应用程序的消息(所有详细信息在指南中),您可以从那里获得原始消息,并且您可以对它做任何您想做的事情,包括在您使用 Intent 服务时运行它直接在接收器上声明或处理(不推荐)。是的,您可以区分消息类型并相应地执行逻辑。

    【讨论】:

    • 您好,感谢您的回复。但是,当我尝试向客户端发送消息时,如下所示:Result result = sender.send(msg, record.getRegId(), 5); 它没有在扩展 WakefulBroadcastReceiver 的 GcmBroadcastReceiver 类中收到?
    • 嗯,没关系,它现在可以工作了。我尝试的时候似乎出现了一些问题(与 GCM 无关),现在它运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多