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

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的无障碍优化,有任何建议,随时向我们提出,让我们一起进一步消除特殊人群使用障碍,带来创新的使用体验。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试造飞机系列:看架构师如何设计微服务接口

来源 | 后端技术学堂责编 | Carol封图| CSDN下载于视觉中国 在微服务设计中&#xff0c;服务间接口通信设计常见的有两种方式&#xff1a;RPC 和 REST&#xff0c;关于微服务和 RPC 的更多细节&#xff0c;可以参考我上一篇文章 面试都在问的微服务&#xff0c;一文带你彻底搞…

日均处理万亿数据!Flink在快手的应用实践与技术演进之路

董亭亭&#xff0c;快手大数据架构实时计算引擎团队负责人。目前负责 Flink 引擎在快手内的研发、应用以及周边子系统建设。2013 年毕业于大连理工大学&#xff0c;曾就职于奇虎 360、58 集团。主要研究领域包括&#xff1a;分布式计算、调度系统、分布式存储等系统。 本次的分…

css-字体样式

字体样式 <!--font-family: 字体font-size: 字体大小font-weight: 字体粗细color: 字体颜色--><style>body{font-family: "Arial Black", 楷体,serif;color: #cdbb21;}h1{font-size: 50px;}.p1{font-weight: bolder;}</style><!--字体风格 ob…

小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!

作者 | 王洪鹏责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国 上篇文章&#xff1a;小网站的容器化(上) 中我们大致描述了下个人网站在日常维护中的痛点&#xff0c;文章的后半部分我们添加了一个纯静态网站容器化的简…

阿里云应用高可用 AHAS 正式商用,可一键提升云上应用可用性

在分布式架构环境下&#xff0c;服务间的依赖日益复杂&#xff0c;可能没有人能说清单个故障对整个系统的影响&#xff0c;构建一个高可用的分布式系统面临着很大挑战。 7月17日&#xff0c;阿里云应用高可用服务AHAS 正式商用&#xff0c;包含架构感知、流控降级和故障演练三…

机器学习在高德起点抓路中的应用实践

导读&#xff1a;高德地图作为中国领先的出行领域解决方案提供商&#xff0c;导航是其核心用户场景。路线规划作为导航的前提&#xff0c;是根据起点、终点以及路径策略设置&#xff0c;为用户量身定制出行方案。 起点抓路&#xff0c;作为路线规划的初始必备环节&#xff0c;…

css-阴影和超链接伪类

阴影和超链接伪类 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 默认的颜色 */a{text-decoration: none; /* 去掉下划线 */color: #000000; /* 修改颜色 */}…

时尚电商新赛道:揭秘 FashionAI 技术

雷音是阿里巴巴研究员、淘系技术部 FashionAI 负责人&#xff0c;在淘系技术嘉年华硅谷站&#xff0c;他分享了《时尚电商新赛道— FashionAI 中的技术》 &#xff0c;旨在揭秘&#xff1a;从面向机器学习的知识重建切入&#xff0c;提出了在 AI 能力的推动下&#xff0c;让人值…

MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划

作者 | kimmking来源 | CSDN博客&#xff0c;责编 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;随着分布式技术的发展&#xff0c;MQ技术产品也出现井喷。目前除了各类常用的MQ&#xff0c;比如Apache的ActiveMQ&#xff0c;Kafka&#xff0c;Pulsar&#xff0c;Rock…

MongoDB compact 命令详解

为什么需要 compact 一图胜千言 remove 与 drop 的区别 MongoDB 里删除一个集合里所有文档&#xff0c;有两种方式 db.collection.remove({}, {multi: true})&#xff0c;逐个文档从 btree 里删除&#xff0c;最后所有文档被删除&#xff0c;但文件物理空间不会被回收db.col…

css-背景图片和渐变

背景图片 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 边框 border 1px粗细 solid样式 red颜色*/div{width: 1000px;height: 700px;border: 1px solid red;/*…

GitOps 初探

前言 GitOps 的概念最初来源于 Weaveworks 的联合创始人 Alexis 在 2017 年 8 月发表的一篇博客 GitOps - Operations by Pull Request。文章介绍了 Weaveworks 的工程师如何以 Git 作为事实的唯一真实来源&#xff0c;部署、管理和监控基于 Kubernetes 的 SaaS 应用。 随后&…

老码农吐血建议:2020年,低于1w的程序员要注意了...

最近在知乎上&#xff0c;关于AI的这个话题又被顶起来&#xff0c;其中&#xff0c;这条回答让人印象深刻&#xff1a;在这短短的一条信息里&#xff0c;无疑显示出&#xff1a;AI行业缺人&#xff0c;高端岗位80万年薪恐怕也招不来&#xff01;小编上周在一个AI群里&#xff0…

重磅!容器集群监控利器 阿里云Prometheus 正式免费公测

Prometheus 作为容器生态下集群监控的首选方案&#xff0c;是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统&#xff0c;并于 2015 年正式发布。2016 年&#xff0c;Prometheus 正式加入 Cloud Native Computing Foundation&#xff0c;成为受欢迎度仅次于…

Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构

作者&#xff1a;闲鱼技术&#xff0d;国有   讲师介绍 国有&#xff0c;闲鱼架构团队负责人。在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在Flutter&FaaS一体化项目上的探索和实践进行了分享。 传统NativeWeb服务端混合开发的挑战 随着无线&#xff0c;Io…

Spring Cloud 云架构下的微服务架构:部门微服务(Dept)

作者 | springML来源 | CSDN 博客 责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国 对于 Rest 基础架构实现处理是 SpringCloud 核心所在&#xff0c;其基本操作形式在 SpringBoot 之中已经有了明确的讲解&#xff0c;…

并发模式与 RPS 模式之争,性能压测领域的星球大战

本文是《如何做好性能压测》系列专题分享的第四期&#xff0c;该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解&#xff0c;以帮助大家构建完整的性能压测的理论体系&#xff0c;并提供有例可依的实战。 该系列专…

Akka in Schedulerx2.0

1. 前言 Schedulerx2.0是阿里中间件自研的基于akka架构的新一代分布式任务调度平台&#xff0c;提供定时、任务编排、分布式跑批等功能&#xff0c;具有高可靠、海量任务、秒级调度等能力。 本篇文章以Schedulerx2.0为例子&#xff0c;介绍akka的应用场景&#xff0c;希望能给…

java.sql.SQLException: The server time zone value ‘???ú±ê×??±??‘ is unrecognized or represents more

【报错信息】 【百度翻译】 服务器时区值???????无法识别或表示多个时区。如果要利用时区支持&#xff0c;必须配置服务器或JDBC驱动程序&#xff08;通过ServerTimeZone配置属性&#xff09;&#xff0c;以使用更具体的时区值 【解决方法】 数据库连接配置conf.xml(…

【从入门到放弃-Java】并发编程-锁-synchronized

简介 上篇【从入门到放弃-Java】并发编程-线程安全中&#xff0c;我们了解到&#xff0c;可以通过加锁机制来保护共享对象&#xff0c;来实现线程安全。 synchronized是java提供的一种内置的锁机制。通过synchronized关键字同步代码块。线程在进入同步代码块之前会自动获得锁…