一个小小的公交捷径,从需求到迭代,将产品从需求、到开发迭代的流程提现的淋漓尽致。

原始需求

经常乘坐公交车的人,有一个普遍的需求:有车吗?车到哪儿了?车到上车站还要多长时间?现在出门来得及吗?还是等一会再出门?

有各种 APP 可以满足需求,但是数据并不是很准确,比如百度地图、车来了。 大部分城市都有自己的公交 APP,能够提供更加精准的数据。比如济南的公交 APP 369 出行:

APP 使用流程很繁琐:打开 APP,等待广告,找到线路,等待加载……一脸懵 B 的看懂公交位置。。。有没有更快更便捷更精准的办法?iOS 12 新增的《捷径》功能,可以用可视化的方式,构建一个工作流。同时可以集成到手机负一屏,还能使用 Siri 进行调用,是实施公交快捷查询的最佳方案。

开发过程

具体的实施流程:

  1. 使用抓包工具比如 Charles、Thor、Stream,抓取 369 出行中的线路数据;
  2. 根据数据规律,使用 Python,将需要的数据存成 json 字典,这里需要的是线路名及线路 ID;
  3. 使用捷径,根据用户输入的线路名,从 json 中查询线路 ID。需要对输入进行容错处理;
  4. 根据 ID 请求线路数据(须加入请求头),得到公交的运营数据;
  5. 循环取出需要的数据,进行重点内容组合,并进行列表展示。

第一版产品就这么愉快的完成了。可以逐条结构化展示以下内容:

已过站数_下站_车号_车速,如:03 🔜 泉城广场 🚏 K8899 🐇 16.58km/h

版本迭代

第一版基本上算是可用的产品了。新的问题来了:每次都要输入线路信息查询,很麻烦。解决起来也很简单。

第二版

  1. 增加线路管理的功能,可以选择开行方向;
  2. 可以添加收藏或取消收藏该方向的线路;
  3. 可以一键清空所有线路数据;
  4. 可以将数据存储到 iCloud Drive;
  5. 默认直接请求 iCloud 上的数据。

还可以更好吗?经过上面的操作,已经知道公交车行驶的位置,所以在第三版中加入了点击车辆信息,进入高德地图查看位置的功能。同时对线路上的车辆进行先后排序。

基本上经过两次迭代,基础版就可以使用了。数据有时候会太过枯燥,用 emoji 可以提升一些体验。🐌 代表车速很慢很慢,🛸 则代表公交司机在放飞自我……

下载地址:济南实时公交下载

使用体验

  • 操作时长大大缩减,从 3 分钟到 8 秒钟;
  • 负一屏快捷操作,无需打开 APP;
  • 支持 Siri,对手机说话就可以查公交;
  • 重要信息震动提示,只关注重要的;
  • 提供更多选项,扫码、打车更方便;
  • 信息直观显示,无需更多思考;

个性定制

需求总是在使用中不断发现和迭代的:车辆还要多久才能到站?现在堵车吗?大概还有多远?对于这些需求,使用一个捷径实现就有点困难了,主要原因是数据量大,请求的接口多。但不妨碍定制一版属于自己的线路捷径:

  1. 使用地图工具,获取上车站GPS位置(要跳过地图之间相互转换的坑);
  2. 根据线路上的站点名,获取上车站在线路上的站数(人工数一数……);
  3. 接下来就要使用高德地图的接口,获得两个数据:车辆位置的路况以及到上车站的距离;
  4. 有些线路车辆过多,为减少不必要的干扰信息,只显示距离上车站10站以内的车辆;
  5. 上下班可能是同一个车的不同站点和位置,需要根据时间设置不同的变量;
  6. 经过以上流程,定制出的数据:距离上车站站数_下一站_路况_时间预估_车速_平均车速;
  7. 点击公交信息,根据距离(500m内)判断该调用乘车码还是地图;
  8. 没有公交时,自动提示其他解决方案,如共享单车、打车等等;

🔜 泉城广场 🚧 畅通 ⏱ 8分钟 📐 2.47km 🐇 16.58km/h

基本上做到点击一次即可获取到最新详细车辆信息的功能了,并且在 3~5 秒内即可获得数据,添加到负一屏,在手机上使用超级方便。手机上的问题解决了。

智能提醒

有些特殊线路,班次少,间隔长,如果电脑上在下班之后能按照规则提醒就更好了。这个实现起来也很简单。使用 Python 脚本,设定好提醒规则,比如:距离在 3~4 公里内,时间在下午 6 点后。在电脑端设定好自动执行时间和执行次数。每天固定时间,系统会自动启动脚本,当有发现合适车辆的时候进行弹窗提醒。如图所示:

只要一提醒,就可以下班喽~