Android GCM 投放监控

Posted

技术标签:

【中文标题】Android GCM 投放监控【英文标题】:Android GCM delivery monitoring 【发布时间】:2012-12-20 08:21:05 【问题描述】:

我正在为电子邮件服务开发移动客户端。主要功能之一是有关邮箱中新消息的通知。根据 GCM 架构指南的建议,我们正在使用“推送器”,它负责在我们收到新消息后向 Google 服务器发送消息。问题是测试过程报告了向设备发送推送通知的严重问题。

所以问题是:有没有一种方法可以监控关于推送通知传递百分比、时间等的平均统计数据?或者也许有人在如何设置测试环境以有效监控应用程序工作期间丢失了多少通知方面有经验?

欢迎所有与改进 android GCM 体验相关的“提示和技巧”。

【问题讨论】:

【参考方案1】:

Google 声称其 GCM 服务器的处理时间不到一毫秒。以下链接可查看 Google 开发人员提供的有关 GCM 的精彩视频。令人难以置信的是,我现在可以使用我公司的服务器在我的设备上几乎立即收到推送通知。

http://www.youtube.com/watch?v=YoaP6hcDctM

他们不保证送达,但根据您在发送到 Google 的 GCM 服务器的消息中设置的持续时间以及您是否希望让 Google 保留数据以供最终使用,他们会尝试最多 4 周的时间来送达消息将消息传递到设备,以防在要传递消息时设备处于脱机状态。

但是,在某些情况下,GCM 消息不会被传递。

    在帐户和同步设置下未选中后台数据。 在 4.0.4.(ICS) 之前,设备上的 Google 帐户是 GCM 的先决条件。也许,用户没有登录到他们的 Google 帐户。

【讨论】:

非常感谢您提供有关 GCM 的更多信息! 您是否也知道发送时间是否取决于每天发送的消息数?这很重要,因为我们有很多? 您想向许多设备发送相同的消息吗?如果这样做,您可以一次将相同的消息多播到多达 1000 台设备。【参考方案2】:

这样做的唯一方法是向您的服务器报告收到的推送的时间戳

你可以

    在 GCM 服务中收到通知后,向服务器报告。要实施,您必须为您的推送通知添加一个推送 ID,并将该 ID 与推送数据一起发送。客户端在收到消息后必须获取时间戳并将其与通知 ID 一起发回。可以完成一个简单的 php 脚本(当您发送推送通知时,您设置 send-notification 的时间,一旦它收到设备的时间戳,它就会设置 receive-notification。这归结为数据库中的两个字段(以粗体标记)。在这种方法中,您可能不太关心错误,因为设备很可能在收到通知时会建立连接,因此它的对您的服务器的请求将通过。

    保留应用中收到的通知列表及其时间戳。同步完成后,在同步操作中发送此数据。这最终是相同的方法,但您的服务器数据不会像第一种方法那样实时。但是,客户端不需要额外的请求,而是保存收到的通知及其时间戳。

总而言之,您必须跟踪使用 notification-id 发送的通知及其发送时间 (send-notification) 和接收时间 ( 接收通知)。一个简单的查询将帮助您分析这些数据。

【讨论】:

【参考方案3】:

Google 增加了支持,以便您可以从云连接服务器 (CCS) 接收交货收据:

当设备确认收到 CCS 发送的消息时,您可以使用上游消息获取送达回执(从 CCS 发送到您的第 3 方应用服务器)。 要启用此功能,您的第 3 方应用服务器发送给 CCS 的消息必须包含一个名为“delivery_receipt_requested”的字段。当此字段设置为 true 时,CCS 会在设备确认收到特定消息时发送送达回执。

https://developer.android.com/google/gcm/ccs.html#receipts

【讨论】:

有时 CCS 不发送 delivery_receipt,我找不到可重现的路径。当delivery_receipt_requested 设置为true 时,GCM 是否提供隔离以发送delivery_receipt。【参考方案4】:

Google 不会向您提供这些统计信息。 android 开发者控制台上有一些可用的统计数据。这仅显示消息和注册的数量。

您必须实现自己的数据收集,这可以很容易地完成。您可以记录发送的每条消息的时间和 ID,并让您的 android 客户端将收到消息的时间报告回您的服务器。然后,您可以将数据存储在您的服务器上并根据需要进行查询。

【讨论】:

是的,你是对的。我正在寻找有效的方法来实现它。 你用的是什么后端? 作为后端,我们使用了一组复杂的服务器,包括负责通过 Google(Apple、Microsoft)服务向设备发送消息的专用“推送器”服务器。【参考方案5】:

从那时起,Google 就为开发者提供了高级监控工具。

Google Play 开发者控制台中提供了 Gcm 诊断工具。更多信息在这里https://support.google.com/googleplay/android-developer/answer/2663268

因此您可以通过注册令牌轻松跟踪特定消息状态。

【讨论】:

以上是关于Android GCM 投放监控的主要内容,如果未能解决你的问题,请参考以下文章

将 com.google.android.gcm.GCMBaseIntentService 升级到 com.google.android.gms.gcm.GoogleCloudMessaging

将com.google.android.gcm.GCMBaseIntentService升级到com.google.android.gms.gcm.GoogleCloudMessaging

GCM Android:不幸的是,GCM 演示已停止

Android:GCM 错误 - 字符串/gcm_defaultSendorid 错误:重复资源错误

com.google.android.gcm.GCMBaseIntentService 在哪里?

Pushwoosh / GCM - Android - 不接收消息