我们有一个 Android 应用程序,用于向使用 GCM 的用户发送内容(技术文章、演练指南等)。我们使用对某些服务的 REST 调用在两个点监视发送:
- 在我们的服务器发送通知后立即。
- 一旦我们的应用程序收到它,立即。
我们感兴趣的是到达应用程序的通知数量与已发送通知的比率。最近我们注意到,从 2017 年 3 月开始,报告收到的通知似乎减少了,而且这个比率下降了。显然,我们主要担心的是通知根本无法到达 Android 设备。
几点注意事项:
- 我们平均每 7 天发送一次通知。
- 除了打开通知和阅读内容之外,我们的大多数用户很可能不会定期使用或启动该应用程序。
- 看起来这种下降是从 Android N 的推出开始的,并且在应用程序首次安装后的前两周后变得更加重要。
这意味着将 Android M 与 N 进行比较,在前两周,两个操作系统版本的接收通知比率相同,但之后 Android N 的比率下降得更快。
起初我们认为用户正在为我们的应用程序“阻止所有通知”(在 Android N 上更容易做到),但使用NotificationManagerCompat.areNotificationsEnabled()
我们发现情况并非如此。
然后,我们在打盹和待机模式下测试了我们的应用程序行为,但我们找不到证据表明它们是导致我们问题的原因。
一些技术信息:
- 我们使用 GCM(不是 FCM)。我们使用具有正常优先级的数据类型通知,并且我们在通知托盘中手动显示通知。
- 我们使用PushSharp从我们的服务器发送通知。如果我们收到“设备订阅已过期”,我们将不再向该设备发送通知。
- 在我们的 Android 应用程序中,我们根据 Google 的指南实施了 GCM 令牌刷新。
- 我们
GcmBroadcastReceiver
是一个WakefulBroadcastReceiver
用于在接收到通知意图时startWakefulService
启动的。GcmIntentService
GcmIntentService
处理通知意图(以及其他东西使我上面提到的监控 REST 调用)和一旦完成调用GcmBroadcastReceiver.completeWakefulIntent
。
不共享代码,因为它非常直接,如果相关,将很乐意分享。
我会很感激有人可以分享的任何见解或想法。