Google公布I/O 2017 for Android源代码

2017-09-08 10:05搜狐科技 - 谷歌开发者
感谢IT之家网友 内含子 的线索投递!

近日,谷歌公布了官方 Google I/O 2017 for Android 应用的源代码。

谷歌官方表示,今年的应用对现有功能做出了实质性的修改,同时增加了几项新功能。它还扩展了技术栈,以便可以利用Firebase。谷歌重点介绍了该应用的几个显著改变以及它们的设计考虑。

2017版最突出的一项新功能是会议预订系统,该系统旨在帮助节省现场参会者的时间并提供简洁顺畅的会议体验。注册的参会者可在会前或大会期间预订会议并加入等待列表;预订可以快速进入会场,而不必排上漫长的队伍。预订数据与参会者的大会胸卡同步,这样,会议工作人员可以使用启用NFC的手机核实预订数据。预订功能不仅大受欢迎,预订数据也帮助会议工作人员在I/O会前或大会期间改变会议室大小,以适应实际的座位需求。

此预订功能是使用Firebase Realtime Database (RTDB)和Cloud Functions for Firebase来实现的。RTDB可在不同用户设备之间轻松同步,我们只需要在代码中实现一个侦听器来接收数据库更新。RTDB还提供开箱即用的离线支持,即使是在旅行期间网络连接断断续续时,也能获取会议数据。一个云函数在后台处理用户的预订请求,使用事务来确保状态的正确性(防止顽皮的用户预订太多座位!)并与会议胸卡系统通信。

在往届大会中,我们使用ContentProvider作为所有应用数据之上的抽象层,这意味着,我们必须确定如何将RTDB数据集成到ContentProvider。我们需要在两个本地数据缓存方案之间权衡考虑:

1) 通过ContentProvider访问的现存本地SQLite数据库,

2) RTDB创建的本地缓存,用于支持离线访问。我们决定将所有应用数据集成到ContentProvider中:一旦RTDB中更改了用户的预订数据,我们即会更新ContentProvider,使之始终成为应用数据的单一可信来源。这意味着,我们需要只在Session Detail Activity这个屏幕中保持对RTDB的开放连接,在这里,用户可以主动管理他们的预订。在应用的其他部分显示的预订数据由ContentProvider提供支持。在离线模式下,或者如果到RTDB的连接断断续续或者延时严重,我们只需从ContentProvider获取用户预订数据的最近已知状态。

我们还必须设计出好的方案,将RTDB集成到整个IOSched同步逻辑中,尤其是由于RTDB提供的同步模型与我们之前在该应用中使用的先ping再fetch的方法大不相同。我们决定继续使用Cloud Endpoints在各个设备之间同步用户数据并与网络和iOS客户端同步(数据本身存储在数据存储区中)。

尽管RTDB提供开箱即用的数据同步功能,我们还是希望确保用户的预订数据在所有设备上都是最新的,即使应用未在前台运行。我们使用一个云函数将RTDB预订数据集成到同步流中:一旦RTDB中更改了用户的预订数据,该函数即会更新端点,而这会触发向所有用户设备发送一个Firebase云消息传递下行消息,随后即会计划数据同步。

今年的应用还提供了一个资讯流的功能,向用户每小时通报I/O上的进展动态(该应用的大多数用户都在远程,资讯流是他们了解大会的窗口)。资讯流也由RTDB驱动,通过简单的CMS将数据推送到服务器。我们使用一个云函数来监控RTDB资讯流数据,当在服务器上更新资讯流数据时,该函数将向客户端发送一个云消息传递下行消息,后者会以视觉形式通知用户存在新的资讯流项目。

在2015年和2016年,我们一直采用MVP架构的IOSched,今年,我们继续使用该架构。这种架构很好地分离了关注问题,方便测试,并且总体上使我们的代码更整齐,更易于维护。对于资讯流功能,受到Android架构蓝图的启发(https://github.com/googlesamples/android-architecture),我们决定试验一种更轻量级的MVP实现方法,该方法提供必要的模块化,同时又非常容易概念化。其目标兼具教育性和实践性:我们希望为开发者示范一种备用的MVP模式;我们还希望展示一种适合我们对此功能的需求的架构。

IOSched首次大量使用了Firebase Remote Config。在过去,我们发现自己无法在大会之前或大会期间通知用户非会议数据的更改:WiFi信息、巴士时刻表、拼车折扣代码等。强制应用更新并不可行;我们只希望更新应用内的默认值。使用远程配置可以轻松解决我们的这个问题。

最后,我们设计出一套三层系统,用于通知用户上述更改:

通过云消息传递和数据同步(先ping再fetch模型)传达大会数据和用户数据更改。

资讯流数据更改通过RTDB进行控制。

对应用内常量的更改通过远程配置进行控制。

未来计划

尽管我们公布了2017年代码,未来几个月我们仍有工作要做。我们将要更新代码,以遵循后台处理的现代模式(并使我们的应用兼容“O”),未来,我们将采用Android的架构组件来简化应用的总体设计。开发者可以在GitHub上跟踪此代码的更改情况:点此查阅

广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。

【广告】
文章价值:
人打分
有价值还可以无价值
置顶评论
    热门评论
      文章发布时间太久,仅显示热门评论
      全部评论
      一大波评论正在路上
        取消发送
        软媒旗下人气应用

        如点击保存海报无效,请长按图片进行保存分享