当前位置: 首页 > 科技观察

Google发布Android版I-O2017源代码

时间:2023-03-12 19:14:52 科技观察

我们发布了Android版GoogleI/O2017官方应用程序的源代码:https://github.com/google/iosched。今年的应用程序对现有功能进行了大量修改,同时添加了几个新功能。它还扩展了技术堆栈,以便可以利用Firebase。在这篇文章中,我们将重点介绍应用程序的一些显着变化及其设计注意事项。2017年版的一项突出新功能是会议预订系统,旨在帮助现场与会者节省时间并提供简化的会议体验。注册与会者可以在会议之前或会议期间预订会议并加入等候名单;预订允许快速进入场地,而无需排长队等候。预订与与会者的会议徽章同步,因此会议工作人员可以使用支持NFC的手机验证预订。不仅预订功能很受欢迎,而且预订数据还可以帮助会议工作人员调整会议室的大小,以适应I/O之前或会议期间的实际座位需求。此预订功能是使用Firebase实时数据库(RTDB)和CloudFunctionsforFirebase实现的。RTDB可以很容易地在不同的用户设备之间同步,我们只需要在代码中实现一个监听器来接收数据库更新。RTDB还提供开箱即用的离线支持,即使在旅行期间网络连接断断续续的情况下也能访问会议数据。云功能在后台处理用户预订请求,使用事务来确保状态正确(防止调皮的用户预订太多座位!)并与会议徽章系统通信。在过去的会议中,我们使用ContentProvider作为所有应用程序数据之上的抽象层,这意味着我们必须弄清楚如何将RTDB数据集成到ContentProvider中。我们需要在两种本地数据缓存方案之间取得平衡:1)通过ContentProvider访问的现有本地SQLite数据库,以及2)RTDB创建的支持离线访问的本地缓存。我们决定将所有应用程序数据集成到ContentProvider中:每当RTDB中的用户订阅数据发生更改时,我们都会更新ContentProvider,以便它仍然是应用程序数据的唯一真实来源。这意味着我们只需要在会话详细信息活动屏幕中保持与RTDB的开放连接,用户可以在其中主动管理他们的预订。显示在应用程序其他部分的订阅数据由ContentProvider提供支持。在离线模式下,或者如果与RTDB的连接间歇性或滞后,我们只需从ContentProvider获取用户订阅数据的最后已知状态。我们还必须想出一种将RTDB集成到整体IOSched同步逻辑中的好方法,特别是因为RTDB提供了一种与我们之前在此应用程序中使用的ping-then-fetch方法截然不同的同步模型。我们决定继续使用CloudEndpoints跨设备以及与Web和iOS客户端同步用户数据(数据本身存储在数据存储中)。尽管RTDB提供了开箱即用的数据同步能力,但我们仍然希望确保用户的订阅数据在所有设备上都是一致的,即使应用程序没有在前台运行。我们使用云函数将RTDB预订数据集成到同步流中:一旦RTDB中的用户预订数据发生更改,该函数就会更新端点,这会触发向所有用户设备发送FirebaseCloudMessaging下游消息,然后是数据同步已安排。今年的应用程序还提供了一个提要功能,让用户每小时了解I/O上发生的事情(该应用程序的大多数用户都是远程的,提要是他们了解会议的窗口)。提要也由RTDB驱动,通过简单的CMS将数据推送到服务器。我们使用云函数来监控RTDB提要数据,当提要数据在服务器上更新时,该函数将向客户端发送云消息下行消息,以视觉方式通知用户有新的提要项。2015年和2016年,我们一直在使用MVP架构的IOSched,今年,我们继续使用这个架构。这种架构很好地分离了关注点,促进了测试,并且通常使我们的代码更清晰,更易于维护。对于提要功能,受Android架构蓝图(https://github.com/googlesamples/android-architecture)的启发,我们决定尝试使用更轻量级的MVP实现,它提供必要的模块化,同时非常容易概念化。它的目标既有教育意义又有实用性:我们想为开发人员展示另一种MVP模式;我们还想展示一个适合我们对此功能需求的架构。IOSched***大量使用Firebase远程配置。过去,我们发现自己无法通知用户非会议数据的更改:会议之前或会议期间的WiFi信息、巴士时刻表、拼车折扣代码等。强制更新应用程序是不可行的;我们只想更新应用内默认设置。使用RemoteConfig可以很轻松的为我们解决这个问题。最后,我们设计了一个通知用户上述变化的三层系统:通过云消息和数据同步(先ping,再fetch模型)传递会议数据和用户数据变化。Feed数据更改通过RTDB进行控制。应用内常量的更改通过远程配置进行控制。未来计划尽管我们公布了2017年的代码,但我们在未来几个月仍有工作要做。我们正在更新我们的代码以遵循后台处理的现代模式(并使我们的应用程序“O”兼容),并且未来我们将采用Android的架构组件来简化整体应用程序设计。开发人员可以在GitHub上跟踪此代码的更改:https://github.com/google/iosched)】点击此处阅读该作者的更多好文章