如何将AI能力与大数据技术结合,助力数据分析治理等工作的效率大幅提升,优化大数据引擎的性能及成本? 了解详情
写点什么

闲鱼无障碍是怎么在端侧实现的

  • 2019-07-23
  • 本文字数:2187 字

    阅读完需:约 7 分钟

闲鱼无障碍是怎么在端侧实现的

前几天,“闲鱼为 1700 万人,打造了一条盲道”的文章刷屏了~


视障人群在生活中更加需要高性价比的闲置商品交易,作为目前国内最大的闲置交易平台,今年 4 月,闲鱼在深圳无障碍研究会视障工程师团队的支持下,先后实现了 Android、iOS 版本的无障碍支持。


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


功能演示

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


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


00:00 / 00:00
    1.0x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00


    无障碍常态化机制

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


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


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



    • 产品需求阶段:考虑特殊群体使用习惯,进行设计;

    • 技术开发阶段:根据优化规范进行开发,确保非装饰性可交互元素都可被聚焦,包含正确描述;

    • 产品测试阶段:验证开发优化效果,同时提供给无障碍专业测试团队进行测试;

    • 产品上线阶段:监控线上障碍用户使用情况,持续收集用户反馈;


    端侧无障碍开发规范

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


    • 装饰性元素不需要独立焦点;

    • 非装饰性可交互元素都可被聚焦,滑动屏幕切换焦点时可正常获得焦点,聚焦后播放元素角色、描述、状态,以便获得正确信息;

    • 图片、音频、视频应提供内容信息说明,以便用户理解;

    • 最小聚焦区域至少为 48x48dp,避免焦点过小难以选中;

    • 复选框、标签需要提供正确的状态,选中或未选中等;

    • 焦点排序具有逻辑,避免焦点跳跃;

    • 焦点范围合理,避免过细焦点;

    • 优化难度高的问题避免直接阉割功能;



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


    端侧优化方案

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


    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 万。而无障碍优化绝不仅仅是一次专项治理即可一劳永逸。在这里也希望业内人士,一起推动互联网 App 的无障碍优化,有任何建议,随时向我们提出,让我们一起进一步消除特殊人群使用障碍,带来创新的使用体验。


    本文转载自公众号闲鱼技术(ID:XYtech_Alibaba)


    原文链接


    https://mp.weixin.qq.com/s/-6KYoiweFXATRBQ0SuxX6A


    2019-07-23 08:008118

    评论

    发布
    暂无评论
    发现更多内容

    如何进行APP版本升级管理?

    InfoQ IT百科

    Excel表格中怎么防止重复录入数据?

    InfoQ IT百科

    如何认证成为亚马逊云科技 DevOps 专家?

    亚马逊云科技 (Amazon Web Services)

    DevOps 亚马逊云科技 tutorial caree

    下载软件哪个好?

    InfoQ IT百科

    如何对APP进行数据分析?

    InfoQ IT百科

    APP、小程序、H5,如何选择不同的开发载体?

    InfoQ IT百科

    开源规则引擎——ice:致力于解决灵活繁复的硬编码问题

    声网

    开源 规则引擎 Dev for Dev

    如何清除WinRAR压缩文件历史记录?

    InfoQ IT百科

    md文件要用什么软件打开?

    InfoQ IT百科

    浅识鸿蒙的Java技术栈

    Bob

    电脑上切换输入法的快捷键是什么?

    InfoQ IT百科

    怎么清理钉钉缓存的图片和文件?

    InfoQ IT百科

    APP访问用户的通讯录后,会得到通讯录上的信息吗?

    InfoQ IT百科

    亚马逊云科技平台上的无服务器 WebSocket

    亚马逊云科技 (Amazon Web Services)

    Serverless websocket 亚马逊云科技 appsync

    如何共享电脑上的文件?

    InfoQ IT百科

    如何批量导出PPT里的图片?

    InfoQ IT百科

    Chrome如何安装插件?

    InfoQ IT百科

    React Hooks 的实现必须依赖 Fiber 么?

    云智慧AIOps社区

    前端 大前端 React Hooks preact

    银行App为什么都不怎么好用?

    InfoQ IT百科

    如何制定移动APP的加载与刷新策略?

    InfoQ IT百科

    如何给电脑文件夹设置密码?

    InfoQ IT百科

    深度学习—人工智能的第三次热潮

    云智慧AIOps社区

    人工智能 机器学习 深度学习

    TASKCTL 应用工程与作业类型的定义

    TASKCTL

    DevOps 敏捷开发 批量任务 ETL系统 自动化运维

    低代码让人人都是开发者,高校人才有了努力的新方向

    钉钉宜搭低代码

    阿里 低代码 数字化 钉钉宜搭 浙江工商大学

    常见的中文电脑输入法软件有哪些?

    InfoQ IT百科

    如何用WinRAR将大文件分割成多个小文件?

    InfoQ IT百科

    有哪些好用的杀毒软件?

    InfoQ IT百科

    如何在APP原型上写需求?

    InfoQ IT百科

    抖音获客源码,蓝V思域运营,大热的X-Gorgon 0408和8408算法,今年的SaaS源码,编程语言需要变革吗?

    yunluohd168

    抖音短视频获客系统 抖音获客源码

    Chrome如何启用隐身模式?

    InfoQ IT百科

    闲鱼无障碍是怎么在端侧实现的_移动_君爱_InfoQ精选文章