【问题标题】:Multiple Push Notifications Received收到多个推送通知
【发布时间】:2015-01-24 09:04:20
【问题描述】:

我使用 Delphi XE7 创建了一个移动应用程序。该程序通过 Kinvey 和 GCM 发送推送通知。首次安装 APK 时,它会发送一个推送通知,该通知工作正常。秒数(同一设备上的同一个APP)发送两次,第三次,三次,以此类推。我发现问题是由在 Kinvey/users 下添加更多 ID 引起的。因此,如果我手动删除所有 ID 并再次安装 APK,它将正常工作。

因此,我很想知道在同一设备上新安装APK时是否可以自行清除ID。

提前致谢!

【问题讨论】:

标签: android delphi google-cloud-messaging delphi-xe7 kinvey


【解决方案1】:

我遇到了同样的问题。 AFAIK 答案是否定的,安装新的 APK 或卸载应用程序不会从后端提供商(Kinvey、Parse、Azure 通知中心)注销您的 ID。

我的解决方案是在 gcm 有效负载中添加 collapse_key

Ps:在我的情况下,通知中心的注册过期(我不知道 Kinvey 是否也有)所以推送是在注册崩溃的同时收到的,所以你只需“接收”一个,直到旧的注册过期

【讨论】:

  • 所以这些提供者为同一设备存储了多个注册条目,并且每条消息发送 n 次而不是一次(其中 n 是客户端应用程序向提供者注册自身的次数)?
  • 是的,提供商会为每个注册发送一个通知(或取决于您的逻辑,但以广播为例),因此您的设备将收到 n 个通知,其中 n = 注册计数(关联相同的设备 ID )。添加一个collapse_key,通知会折叠成一个
  • Google GCM 示例后端服务器没有显示这种奇怪(低效)的行为。它在将 id 添加到已知设备列表之前首先检查现有注册 id,因此只会向 GCM 和设备发送一条消息,这意味着不需要使用 collapse_key 并且带宽使用量要少得多。 (如果 Kinvey 多次存储设备 ID,我会认为这是一个错误)
  • 是的,但是那些提供商(在我的例子中是 Azure 通知中心)不检查这个并发送所有通知
【解决方案2】:

您使用的TBackendPush 组件似乎不是它的设计用途。

组件名称中的“Backend”强烈表明该组件必须在服务器端应用程序中使用,这可以触发向所有注册设备发送广播消息。

将它放在客户端可能会导致意外结果。此外,通过将其包含在移动应用程序中,您可以在 APK 文件中包含 Kinvey 帐户凭据。其他人可以提取凭据,然后用于从您的 Kinvey 帐户发送消息。

如果您需要一种发送推送通知的方式,有两种方式 - 但我不知道 Kinvey 是否支持这两种方式:

  • 从设备向您自己的后端服务器发送单个 HTTP(S) 请求,这会触发对 Kinvey/GCM 的广播请求
  • https://developer.android.com/google/gcm/ccs.html 中所述,从设备向您的后端服务器发送上游(“设备到云”)消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 2017-10-24
    • 1970-01-01
    • 2022-06-19
    • 2014-08-06
    • 2011-12-29
    相关资源
    最近更新 更多