【问题标题】:How are Android GCM push notifications processed?Android GCM 推送通知是如何处理的?
【发布时间】:2014-01-08 19:03:37
【问题描述】:

我正在开发一个使用 PushPlugin 处理推送通知的 Cordova Android 应用程序。应用程序打开时,应用程序将正确接收推送通知。但是,如果应用未打开,则不会收到(或至少不会处理)推送通知。

考虑到插件具有专门处理接收推送通知的代码,这是有道理的。对我来说没有多大意义的是为什么这段代码甚至存在。在构建这个应用程序之前,我假设操作系统有某种排队系统,可以接收任何/所有通知。

  • Android 中是否存在一个通知队列来处理所有应用程序的推送通知,或者每个应用程序是否需要自己处理通知。
  • Android 应用程序能否在关闭时处理推送通知?
  • Cordova Android 应用程序能否在关闭时处理推送通知?

【问题讨论】:

    标签: android cordova push-notification google-cloud-messaging


    【解决方案1】:
    1. 在 Google Cloud Messaging(这是 PushPlugin 使用的推送通知机制)中,每个应用程序决定如何处理通知。当推送通知到达设备时,GCM 会在接收应用程序中触发 BroadcastReceiver,由应用程序负责处理通知数据。

    2. Android 应用程序可以在关闭时处理推送通知,除非用户明确停止它们(在这种情况下,在用户再次重新启动应用程序之前,不会有任何通知到达应用程序)。如果他们通过用户切换到另一个应用程序或进入主屏幕离开前台,仍然可以接收和处理通知。

    3. 是的。根据您发布链接的 PushPlugin ,它们似乎可以。当应用不在前台时,通知的处理方式不同 - 通知栏会添加一个通知,当点击它时,它应该会打开应用。

    【讨论】:

    • 谢谢。我想你在#2 中回答了我所有的问题。我不关心处理通知的后台应用程序。我想知道用户明确强制退出的应用程序是否可以处理通知,但听起来他们不能。 iOS 设备即使在关闭时也可以处理通知。太糟糕了。无论如何,我会支持你,但我还没有足够的声誉,但我仍然可以接受这个答案。
    • @PurpleMonkeyDishwasher 这个行为是从 Android 3.1 开始的。但是,强制停止应用程序并不是您在 Android 中通常会做的事情,因此在大多数情况下应该不是问题。
    【解决方案2】:

    使用 PushPlugin,当向 GCM 发送推送通知(以便 GCM 将它们发送到设备)时,必须在 message 键值之后包含一个 msgcnt 键值对在 JSON 消息中的有效负载值中配对,如下所示:

    {
     "GCM":"{\"data\":{\"message\":\"hello\",\"msgcnt\":\"1\"}}"
    }
    

    否则当应用程序在后台时,PushPlugin 将不会处理通知。这与插件中 GCMIntentService.java 文件的编写方式有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2016-07-24
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多