Hi,小伙伴们还记得之前刷屏的“闲鱼为1700万人,打造了一条盲道”的文章吗?

在今年4月,闲鱼和深圳市信息无障碍研究会取得了联系。在沟通过程中,我们了解到在移动互联网时代,视障人士同样可以通过手机,享受到互联网带来的便利。闲鱼作为目前国内最大的闲置交易平台,为了更好地服务用户,在无障碍研究会的视障工程师团队的支持下,在现有基础上,先后进行了Android、iOS版本的无障碍支持。

闲鱼在Flutter&Native混合工程下,如何进行的无障碍优化?在日常版本迭代频繁情况下,是怎么有效地保持稳定支持无障碍功能?本文为您一一揭秘。

什么是无障碍?

什么是无障碍?一个人残疾或者能力缺失,生活中有种种障碍,比如,残疾人不能上楼梯,视障人士不能玩手机。残障人士,同样享有人权,拥有独立生活的诉求。合理地使用工具减少障碍,比如为残疾人设置电梯,为视障人士提供语音功能,都是减少或消除障碍的手段,也就是我们今天所说的无障碍(Accessibility)。

今天我们在处理端上的无障碍,一般是为视障群体服务。视障用户如何获取手机上的信息?不同手机系统提供了相应的读屏辅助软件,Android是Talkback,iOS称为VoiceOver(旁白),视障用户通过简单的操作进行交互,触摸、点击、双击、左右滑动屏幕,系统就会通过旁白语音的形式,将界面信息反馈给视障用户。

视障用户怎么使用无障碍功能呢?我们以Android手机为例,简单进行操作,通过“设置” > "更多设置" > “无障碍” > “Talkback”开启Talkback,iOS操作也十分相似,通过“设置” > “通用” > “辅助功能” > “旁白”开启旁白。

无障碍常态化机制:

很多开发可能会这么思考,我们是否需要针对视障群体,单独开发出一个符合这个群体使用习惯的App版本?但实际上,残障人士不是有意或无意地孤立的群体,不需要将将残障人士从大众中隔离,减少视障人士在端侧正常版本的使用障碍,让视障人士与普通人在相同环境下,能够平滑地沟通交流,他们同样有能力为社会创造价值。

因此,客户端无障碍的优化,在普通版本上进行无障碍优化即可,原有的交互方式、信息内容不需要变动,尽量不要提供特殊版本。

同时,端侧业务需求不断迭代,必须将无障碍优化纳入到正常的版本迭代流程中,建立无障碍优化的常态化机制,约定产品日常开发流程,才能持续保障主干链路的无障碍稳定支持。

  • 产品需求阶段:考虑特殊群体使用习惯,进行设计;
  • 技术开发阶段:根据优化规范进行开发,确保非装饰性可交互元素都可被聚焦,包含正确描述;
  • 产品测试阶段:验证开发优化效果,同时提供给无障碍专业测试团队进行测试;
  • 产品上线阶段:监控线上障碍用户使用情况,持续收集用户反馈;

客户端无障碍开发规范

端侧进行无障碍设计时,必须有一套规范,提供技术在开发过程中进行参考,通过日常的开发积累,闲鱼形成了一套无障碍开发规范。

  1. 装饰性元素不需要独立焦点;
  2. 非装饰性可交互元素都可被聚焦,滑动屏幕切换焦点时可正常获得焦点,聚焦后播放元素角色、描述、状态,以便获得正确信息;
  3. 图片、音频、视频应提供内容信息说明,以便用户理解;
  4. 最小聚焦区域至少为48x48dp,避免焦点过小难以选中;
  5. 复选框、标签需要提供正确的状态,选中或未选中等;
  6. 焦点排序具有逻辑,避免焦点跳跃;
  7. 焦点范围合理,避免过细焦点;
  8. 优化难度高的问题避免直接阉割功能;

以闲鱼首页为例,装饰性元素“闲鱼”不需要独立焦点;可交互元素“二手手机”均可以被聚焦;左右滑动屏幕顺序正确,可以正常获得焦点;聚焦后元素信息描述正确;聚焦范围合理;标签“新鲜”、“关注”具有正确选中状态,焦点排序正确。

端侧无障碍优化方法

在不同平台下,系统均提供了非常简单的无障碍优化方法,辅助开发者添加焦点描述、调整焦点顺序、屏蔽不必要的焦点,我们在优化过程中,根据开发规范,结合端侧原有框架,使用不同无障碍接口,大部分问题可以较轻松地解决,以下简单介绍不同平台常用的无障碍优化方法。

Android优化方法

  • 添加焦点描述

    android:contentDescription="desc"view.setContentDescription(desc)
    
  • 屏蔽焦点,避免对应视图被聚焦

    android:importantForAccessibility="no"view.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO)
    
  • 调整焦点顺序,使得对应视图在设置id的视图之后或之前被遍历到。

        android:accessibilityTraversalAfter="id"android:accessibilityTraversalBefore="id"view.setAccessibilityTraversalAfter(int)view.setAccessibilityTraversalBefore(int)

iOS优化方法

  • 添加焦点描述

        @property(nonatomic, copy) NSString *accessibilityLabel;
    
  • 屏蔽、合并焦点

    @property(nonatomic) BOOL isAccessibilityElement;
    
  • 添加控件角色

    @property(nonatomic) UIAccessibilityTraits accessibilityTraits;

Flutter优化方法

  • 添加焦点描述

        Semantics(value: "desc",child: Row(),);
    
  • 去除焦点

    ExcludeSemantics(child: Row(),),
    
  • 合并焦点

    MergeSemantics(child: Row());
    

Weex优化方法

  • 添加焦点描述

    <div aria-label='desc'> </div>
    
  • 添加焦点角色

    <div role='button' aria-label='desc'> </div>
    
  • 屏蔽焦点

        <div aria-hidden='true'> </div>
    

最后

在闲鱼无障碍专项整治中,我们和深圳市信息无障碍研究会的专业视障工程师团队合作,进行主干功能的测试,前后修复了129个无障碍问题,18位工程师,迭代了4个版本,问题修复率87.5%,为视障人士打通了闲鱼的主干链路,视障用户可以在闲鱼上,正常进行闲置的买卖交易。

目前,闲鱼的视障用户单端已经超过4万。而无障碍优化绝不仅仅是一次专项治理即可一劳永逸。我们未来在日常开发流程中更加注重无障碍优化,持续关注并推动业内无障碍标准落地。同时,闲鱼将于7月28日参加在上海举行的第十四届中国信息无障碍论坛,与腾讯、字节跳动等业内同行交流无障碍体验,唤起业内及社会大众对与视障人群的关注,为推动中国信息无障碍贡献力量。

今年,阿里巴巴技术公益委员向所有工程师发起倡议,提倡“用技术助力公益,让科技更有温度”,在这里也希望业内人士,一起推动互联网App的无障碍优化,有任何建议,随时向我们提出,让我们一起进一步消除特殊人群使用障碍,带来创新的使用体验。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

闲鱼无障碍是怎么在端侧实现的相关推荐

  1. 闲鱼基于 Flutter 的移动端跨平台应用实践

    闲鱼为什么使用 Flutter Flutter 作为 Google 新一代的跨平台框架,有较多的优点,但跟其他跨平台解决方案相比,最吸引我们的是它的高性能,可以轻松构建更流畅的 UI.虽然各跨平台方案 ...

  2. 闲鱼代码Java_面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码

    作者:闲鱼技术-青页 一直以来, 如何从'视觉稿'精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的 ...

  3. 揭秘闲鱼赚钱项目的高端玩法

    一个行业项目存在越久,它被挖掘出来的东西也就越多,自媒体.电商.网赚项目有许许多多,但真正赚到钱的却没几个人,究其原因还是项目操作门槛的问题. 项目的操作门槛越低,竞争也就越激烈,要是人人都可以轻松操 ...

  4. 闲鱼的统一跨端 API 方案 —— Uni API

    本文将介绍跨端 API 解决方案应该解决什么问题,提供什么能力. 背景 随着 C 端流量红利的逐渐消失,端外投放已成为业务寻求增长的重要抓手之一.而不同 App 上存在不同应用场景.不同时期诞生的前端 ...

  5. GMTC2019|闲鱼-基于Flutter的架构演进与创新

    2012年应届毕业加入阿里巴巴,主导了闲鱼基于Flutter的新混合架构,同时推进了Flutter在闲鱼各业务线的落地.未来将持续关注终端技术的演变及趋势 Flutter的优势与挑战 Flutter是 ...

  6. 闲鱼玩法平台系列文章——双11实操篇

    背景 营销玩法是电商行业进行商品促销和用户增长的重要手段,上一篇中介绍了闲鱼的玩法平台--多啦A梦,本篇将介绍在该系统上承接的玩法.闲鱼作为闲置循环工厂也参与了大促,为了让更多闲置在闲鱼游起来,在商品 ...

  7. 闲鱼架构如何一招提效 30% ?

    本文转载自"闲鱼技术"公众号. Serverless(无服务架构)被誉为下一代云计算,自概念推出以来,因为能带来研发交付速度提升与成本的降低在业内异常火爆.闲鱼客户端基于Flutt ...

  8. 闲鱼正在悄悄放弃Flutter吗?

    本文转载自 InfoQ 闲鱼在 2017 年引入 Flutter,当时的 Flutter 还远未成熟,行业内也没有把 Flutter 放入已有工程体系进行开发的先例. 之后这支不到 15 人的闲鱼团队 ...

  9. Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~

    前言 利用利用Python 自动化来获取某类商品中最好卖的商品以供参考.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pyecharts模块: 以及一些Py ...

最新文章

  1. c++实现平面上的形状编辑
  2. mysqli扩展是mysql扩展的增强版_PHP学习笔记【22】--PHP数据库编程 mysql扩展库 和mysqli扩展库...
  3. 最近30分钟合约市场爆仓1.03亿美元
  4. 负载均衡服务器可以说虚拟机吗,配置网络负载均衡只需十步即可完成
  5. 第三堂:Java程序流程控制
  6. Python学习笔记: 闭包
  7. 《Java基础入门第2版》--黑马程序员 课后答案及其详解 第1章 Java开发入门
  8. webtrends 分析报告
  9. dnastar拼接反向互补序列_DNAstar使用说明
  10. python统计分析pdf托马斯_Python统计分析
  11. Python个性化定制二维码之 qrcode
  12. 大数据:增量采集、处理、导出
  13. 利用企业微信免费发送各种信息,开发网页客服
  14. 聊天室小程序服务端源码(客户端接下一条)
  15. (SQL语句)查询条件模糊匹配若干字段
  16. Matlab之如何对cell进行排序?
  17. python hook(钩子)函数
  18. 《指数基金投资指南》读书笔记---指数基金的分类
  19. Win10删除右键菜单快捷键方法
  20. 中科软测试面试题2019_中科软笔试题和面试题

热门文章

  1. str计算机中代表什么,STR到底是待机还是休眠
  2. python的作者为什么要创造python_为什么要学习Python?老男孩Python开发
  3. import oracle utility_教你如何Oracle数据导入
  4. python count函数用法 comm_python3:MySQL 8.0学习笔记(第五部分:单表查询操作)
  5. python取列表前几个元素_Python下几种从一个序列中取出元素的方法
  6. redis关键字删除_微信公众号文章防删除
  7. 华为云 手机 电脑登录不了怎么办 账户_华为云手机能解决芯片困难,是否真的实在,来西瓜视频找答案...
  8. canvas简单五子棋
  9. 计算机控制lc72131,lc72131(1)
  10. 这七种回归分析技术,学了不后悔~