Skip to content

Latest commit

 

History

History
51 lines (29 loc) · 6.88 KB

2018.12.13.md

File metadata and controls

51 lines (29 loc) · 6.88 KB

Twitter的通知更容易使用电池

原标题:Notifications from the Twitter app are easier on your battery
链接:https://android-developers.googleblog.com/2018/12/notifications-from-twitter-app.html
作者: 翻译:arjinmc

这篇博文是Google和Twitter之间的合作。由Jingwei Hao撰写,得到了来自Twitter的CésarPuerta,Fred Lohner的支持,并与Google的Jingyu Shi共同发展。

推送通知是让Twitter用户了解正在发生的事情的重要方式。然而,它们可能是一个重要且经常被忽视的电池消耗源。例如:高优先级通知可以从Doze唤醒手机,并且在通过网络传送推送通知时获取数据导致快速耗尽电池。

作为Twitter的应用程序开发者,我们知道电池寿命是我们用户移动体验的一个重要方面。随着时间的推移,我们已经采取了几个步骤来优化我们的应用程序以使用省电功能,尤其是推送通知。在本文中,我们将分享我们为节省用户设备的电池寿命所做的工作,希望这也有助于其他开发者优化他们的应用程序。

Firebase云消息传递迁移

今年早些时候,我们将通知消息库升级为下一个发展阶段GCM:Firebase云消息(FCM)。这使我们能够使用最新的API并访问Firebase提供的其他功能。

由于多种原因,这对我们来说是非常独特的迁移:

  • 推送通知是Twitter移动互动策略的重要组成部分。通知可以帮助我们的用户随时了解情况并与世界保持联系,并帮助他们获得帮助。因此,我们无法承担在迁移期间和迁移后不可靠的通知传递,这将对平台产生负面影响。
  • 由于在应用程序中无法同时支持GCM和FCM,因此我们无法在迁移期间使用典型的A / B测试技术。

我们通过针对迁移和回滚路径对dogfood,alpha和beta用户进行全面测试,通过实时指标监控和分阶段应用推出来降低风险。在迁移过程中,我们很高兴地发现用FCM替换GCM在我们的所有用例中都能顺利运行。

在针对Android上的省电功能进行测试时,迁移到FCM对我们来说非常有价值。通过API,例如:getPriority()getOriginalPriority(),FCM让我们深入了解FCM消息的优先级是否降级。

设置正确的FCM消息优先级

在Twitter的后端,我们总是尝试确保为通知分配适当的优先级,确保高优先级FCM消息仅用于生成用户可见通知。实际上,我们发送的通知中只有一小部分被归类为高优先级。

App Standby Buckets是在Android 9 Pie中引入的,此功能对应用根据应用所属的存储桶接收的高优先级消息的数量施加了限制。因此,应为用户更有可能与之交互的通知保留高优先级消息。将高优先级FCM消息用于不涉及用户交互的操作可能会导致负面后果,例如:一旦应用程序耗尽其应用程序备用存储区配额,以下真正紧急的FCM消息将降级为正常优先级并在设备进入时延迟Doze。

为了了解我们的应用程序如何使用App Standby Buckets,我们收集了Twitter应用程序发送和交付时间的通知优先级统计信息:

  • 在我们的测试过程中,我们观察到没有一个高优先级的FCM消息被降级,特别是对于在通知发送时在频繁或较低桶中被剔除的2%的设备。这尤其值得注意,因为系统可能对低活动桶中的设备的高优先级FCM消息施加限制
  • 当传送高优先级FCM消息时,86%的设备在活动桶中被分配。这是另一个积极的信号,即我们对消息的优先级分配与用户的使用模式一致。

这非常令人鼓舞,因为这意味着所有用户都会毫不拖延地收到重要通知,无论Android系统认为该应用程序是否有效,都是如此。这也确认我们根据用户使用参与模式正确分类高优先级FCM消息。

避免通知的后续数据预取

预取数据是一种流行的做法,可以丰富用户围绕通知的体验。这需要在通知的有效载荷中包括一段元数据。当通知发送时,应用程序利用有效负载数据启动一个或多个网络调用,以在呈现通知之前下载更多数据。FCM有效负载具有4KB的最大限制,当需要更多数据来创建丰富的通知时,将使用此预取实践。但这样做需要权衡,并会增加设备功耗和通知延迟。在Twitter上,在我们向用户推送的所有类型的通知中,只有一种类型可以进行预取,这种类型只占不到1%的音量。此外,在通知的数据预取是不可避免的情况下,应该安排JobSchedulerWorkManager任务,以避免Oreo +中的后台执行限制问题

创建通知渠道

此外,Android 8 Oreo版本中引入了通知频道。我们设计了多个因素的渠道的重要性级别,用户体验是最重要的,节能是另一个。目前,Twitter for Android有九个通知渠道,其中只有直接消息传递,紧急情况和安全性被设计为高度重要,使大多数渠道的重要性级别较低,从而减少了干扰。

总结

我们着手通过迁移到FCM,谨慎地优先处理通知,限制预取以及仔细设计通知渠道来改善用户体验。我们很高兴地发现这些变化对电池性能产生了积极影响,并使我们的应用程序能够利用最新版Android中引入的省电功能。

在大型不断发展的应用程序中进行功耗优化设计是一个复杂且持续的过程,特别是随着Android平台的发展和提供更精细的控制。在Twitter,我们坚信不断改进以提高应用程序性能和资源消耗。我们希望此讨论对您自己的优化应用程序的性能和资源使用非常有用💙