安卓GCM投递监控

24
我正在开发移动客户端用于电子邮件服务。其中一个关键特性是通知邮箱中有新消息。按照GCM架构指南建议,我们使用一个推送程序(Pusher),一旦收到新消息就负责将消息发送到Google服务器。问题在于测试过程中报告了推送通知传递给设备的严重问题。
问题是:是否有方法来监控推送通知传递百分比、时间等平均统计信息?或者,有人有经验如何设置测试环境以有效监控应用程序工作期间有多少通知丢失?
欢迎提供所有与改善Android GCM体验相关的技巧和窍门。
5个回答

21

谷歌声称他们的GCM服务器处理时间少于一毫秒。以下是谷歌开发者关于GCM的优秀视频链接。这是可信的,因为我现在使用公司的服务器向设备发送推送通知几乎可以立即收到。

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

他们不保证投递,但会尝试在最多4周内投递消息,具体时间取决于您在发送给谷歌的GCM服务器的消息中设置的持续时间,以及是否希望让谷歌保留数据以便在设备离线时将消息传递给设备。

然而,在某些情况下,GCM消息将无法投递。

  1. 在帐户和同步设置下未勾选后台数据。
  2. 在4.0.4(ICS)之前,设备上必须有Google帐户才能使用GCM。也许用户没有登录他们的Google帐户。

非常感谢有关GCM的额外信息! - rus1f1kat0R
你知道交付时间是否取决于每天发送的消息数量吗?这很重要,因为我们有很多消息。 - rus1f1kat0R
你想向许多设备发送相同的消息吗?如果是,你可以将相同的消息同时组播到多达1000个设备。 - Nitin Sethi

6
唯一的方法是将接收到推送的时间戳报告回您的服务器。
您可以选择以下两种方式之一:
1.在接收到GCM服务中的通知后立即向服务器报告。要实现此功能,您必须为推送通知添加推送ID并将ID与推送数据一起发送。客户端将必须在收到消息后获取时间戳,并随通知ID一起发送回来。可以编写一个简单的php脚本(当您发送推送通知时,设置“send-notification”的时间,一旦设备的时间戳到达,则设置“receive-notification”)。这归结为数据库中的两个字段(用粗体标记)。在此方法中,您可能不太关心错误,因为当设备接收到通知并且请求您的服务器时,它非常有可能会有连接,因此请求将通过。
2.在应用中保留收到的通知及其时间戳列表。同步完成后,在同步操作中发送此数据。这最终是相同的方法,但是您的服务器数据不会像第一种方法那样实时。但是,不需要来自客户端的额外请求,但是需要保存收到的通知及其时间戳。
总之,您将不得不使用“notification-id”和它们的发送时间(“send-notification”)以及它们的接收时间(“receive-notification”)来跟踪已发送的通知。简单的查询将帮助您分析此数据。

5

Google已添加支持,以便您可以从云连接服务器(CCS)接收送达确认:

您可以使用上行消息获取送达确认(由CCS发送到您的第三方应用程序服务器),当设备确认接收到由CCS发送的消息时。

要启用此功能,您的第三方应用程序服务器发送到CCS的消息必须包括一个名为“delivery_receipt_requested”的字段。 当该字段设置为true时,CCS会在设备确认接收特定消息时发送送达确认。

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


1
有时CCS不发送delivery_receipt,我找不到可重现的路径。当设置delivery_receipt_requested为true时,GCM是否会保证发送delivery_receipt? - Ahmet Karakaya

2

谷歌不会向您提供这些统计数据。在 Android 开发者控制台上有一些可用的统计数据,这只显示消息和注册数量。

您需要自己实现数据收集,这可以相当轻松地完成。您可以记录每个发送的消息的时间和 ID,并让您的 Android 客户端报告消息接收的时间到您的服务器。然后,您可以将数据存储在服务器上并根据需要查询。


是的,你说得对。我正在寻找有效的方法来实现它。 - rus1f1kat0R
你使用的后端是什么? - Patrick Jackson
作为后端,我们使用一组复杂的服务器,包括专用的“推送”服务器,负责通过 Google(苹果、微软)服务向设备发送消息。 - rus1f1kat0R

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接