Google发布Google I/O 2017 安卓源代码

原文来自:Google releases source for Google I/O 2017 for Android

今天我们发布官方Google I/O 2017 Android应用程序源代码

今年这个应用基本上修改了现有的功能,并且添加了一些新的功能。它也利用了Firebase去拓展技术堆栈。在这篇文章中,我们将高亮在这个应用程序的几个显著变化,以及它们设计的注意实事项。

对于2017版本最多突出的新功能是事件约束系统,这样被设计有助于节省参会者的时间,并提供精简的会议体验。注册参会能够在之前预约会话并添加到等待列表中。在会议期间,一个预约提供了加快进入会议,而不用长时间去等待。预约的数据将会和参会者会议徽章同步,允许事件工作人员使用NFC手机验证预约,不仅仅是预约功能非常受欢迎,但是预约数据帮助了事件工作人员在I/O大会之前和之间改变会话室的大小,以次来适应实际的座位需求。

预约的功能是使用Firebase实时数据库(RTDB)和Firebase云功能实现的。RTDB提供了通过用户的设备简单的同步——我们仅仅是在我们的代码中实现了一个监听来接收更新数据库。RTDB也提供了开箱即用离线支持,允许会议数据当在旅行是面对间歇性网络连接也可以使用。云端功能在后台处理用户预约的请求过程,使用交易去确保状态的正确性(防止恶作剧用户抓住太多的座位!)并和事件系统徽章通信。

对去年而言,我们使用了内容提供者(ContentProvider)作为一个抽象层覆盖所有应用数据,也就意味着我们必须指出如何使用内容提供者去整合RTDB数据。我们需要在有两个本地缓存数据之间进行协商:1)来源于内容提供者访问现存本地SQLite数据库,2)通过RTDB被创建的本地缓存去促进离线访问。我们决定在内容提供者之下整合所有的应用数据:无论何时在RTDB里用户预约的数据改变,我们将更新内容提供者,使它成为在任何时间应用程序数据的唯一真实来源。这就意味着我们需要去在一个唯一的屏幕对RTDB保持打开连接,会话详细信息界面,用户可能正在积极地管理他们的预约。预约数据通过内容提供着支持显示在应用程序的其他部分。在离线模式下,或者是在与RTDB的片断或延迟连接的情况下,我们能够从内容提供着获取用户的最后一个预约的已知状态。

我们还必须指出将RTDB整合到整个IOSched同步逻辑中的良好模式,尤其是自从RTDB伴随着非常不同的同步模式,而不是我们在应用程序中使用的ping-fetch方法。我们决定去继续使用云端点通过设备去同步用户的数据,网络和iOS客户端(数据本身存储在数据存储区中)。当RTDB提供了开箱即用数据同步,我们想确保所有设备上的用户预约数据都是最新的,甚至当应用程序不是在前台时,我们利用云功能去整合RTDB预约数据到同步流:一旦用户改变了在RTDB中预约数据,该功能更新了端点,触发了Firebase云消息下游消息到所有用户的设备上,然后调度数据同步。

今年的应用程序还推出了一个Feed功能去通知用户关于I/O的逐个小时的发展(大多数应用的用户是远程的,Feed只是他们进入会议的一个窗口),Feed也是通过RTDB提供动力,数据使用了一个简单的CMS推送到服务器。我们使用了一个云功能去监控RTDB feed数据;当feed数据在服务器被更新,云功能就会发送一条云消息下游消息到客户端,视觉上为用户呈现新的Feed项。

在2015和2016年里,我们为IOSched已经通过了一个MVP架构,我们在今年继续使用。这个架构提供我们很好的分离关注,方便测试,并且大致来说使我们的代码更清洁和更容易去维护。对于Feed功能,我们决定利用一个更轻量级的MVP去实验实现,灵感来源于Android Architecture Blueprints,它提供了必要的模块化,同时非常容易概念化。这里的目标是教学和实践:我们想为开发者展示替代MVP模式,我们也想去展示一个适合我们对此功能的需求的架构。

首次,IOSched大量使用了Firebase远程配置。以往,我们发现了自己当非会话数据——无线信息不能够去通知用户,穿梭时间表,折扣代码等等。- 在会议之前或会议期间改变。强制一个应用升级更新是不可行的,我们只想让应用内默认值可以更新。使用远程配置很容易的就为我们解决了这个问题。

在最后,我们最终得到一个三层系统,通知用户有关变更:

  • 会议数据和用户数据的改变是来源于云消息和数据同步(ping和fetch模型)去进行通信。
  • Feed数据的变化是来源于RTDB的控制
  • 更改应用内的产量来源于远程配置的控制

未来计划

即使我们正在发布2017的代码,我们在未来几个月仍然有工作领先于我们,我们将在后台进程(并使我们的应用程序“O”符合)中去更新代码去遵循现代模式。并且在未来,我们将采用Android的架构组件去简化应用程序的整体设计,开发者可以按照GitHub上的代码进行更改。

以上是对Anroid 官网博客文章的翻译,如果不足,欢迎指正,谢谢

if (本文对您有用) { Pay (请随意¥打赏) } else { Commit feedback (底部评论区提交建议、反馈) } 感谢支持!