包容性移动应用开发教程-三-

210 阅读1小时+

包容性移动应用开发教程(三)

原文:Developing Inclusive Mobile Apps

协议:CC BY-NC-SA 4.0

九、iOS 辅助功能——物理和运动

身体和运动方面的考虑帮助那些与多点触摸手势斗争的人;例如,如果有人有三个手指,他们可能需要帮助才能做出四个手指的手势。对于那些几乎没有运动控制的人来说,开关控制或语音控制可以帮助他们充分利用用户的运动。

辅助触摸

辅助触摸在屏幕上呈现一个小的可移动的 home 按钮状的轻击目标(图 9-1 ,该目标扩展到轻击上的更多选项(图 9-2 和图 9-3 )。例如,这个功能对于有运动障碍的人来说非常好,他们可能很难滑动控制中心,或者缺少手指的人可能很难做捏手势。这个按钮的存在不会影响你的应用的功能,但是你也许应该意识到,有了这个按钮,你的屏幕上会有一小块区域被辅助触摸按钮遮挡。

img/486920_1_En_9_Fig1_HTML.jpg

图 9-1

辅助触摸部分遮挡内容

更值得考虑的是你使用可能需要精细运动技能的手势,如多指轻拍、轻扫、捏和其他触摸手势。如果你的应用利用了这些,考虑监控isAssistiveTouchRunning,并提供一个替代方案。您可以通过监听assistiveTouchStatusDidChangeNotification(列表 9-1 )来检测该设置的变化。

img/486920_1_En_9_Fig3_HTML.jpg

图 9-3

辅助触摸,提供对多手指手势的单击访问

img/486920_1_En_9_Fig2_HTML.jpg

图 9-2

辅助触摸提供对功能的单次点击访问

import UIKit

class MyViewController: UIViewController {

    var assistiveTouchStatus: Bool {
        get{
            return UIAccessibility.isAssistiveTouchRunning
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(assistiveTouchChanged), name: UIAccessibility.assistiveTouchStatusDidChangeNotification, object: nil)
    }

    @objc
    func assistiveTouchChanged() {
      // check assistiveTouchStatus for current status.
      // increase the prominence of gesture alternatives
    }
}

Listing 9-1Detecting changes in Assistive Touch status

摇动以撤销

摇动撤销是一个系统范围的撤销命令(图 9-4 ),相当于 Mac 上的⌘ + Z 或编辑➤撤销。对于那些在运动技能方面有困难的人来说,这个功能可能是困难的,因为他们的手可能缺少运动来完成这个手势。此外,许多人发现他们无意中触发了“摇动以撤销”,例如患有帕金森氏症的人。

img/486920_1_En_9_Fig4_HTML.jpg

图 9-4

iOS 的标准摇动撤销确认对话框。如果意外触发,这种模式对话框可能会令人沮丧

您的客户可以禁用此功能,以防止意外触发对话框而造成的挫折。如果撤销功能对你的应用来说是一个重要的特性,比如说如果你提供了文本编辑功能,你可能会希望添加一个替代的撤销机制,或者最好是增加它的重要性。你可以查询isShakeToUndoEnabled来确定是否可以摇动撤销,你可以监听shakeToUndoDidChangeNotification来改变(列表 9-2 )。

import UIKit

class MyViewController: UIViewController {

    var shakeToUndoStatus: Bool {
        get{
            return UIAccessibility.isShakeToUndoEnabled
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(shakeToUndoChanged), name: UIAccessibility.shakeToUndoDidChangeNotification, object: nil)
    }

    @objc
    func shakeToUndoChanged() {
      // check shakeToUndoStatus for current status.
      // increase the prominence of undo features.
    }
}

Listing 9-2Detecting changes in Shake to Undo status

开关控制

开关控制是为那些有更严重运动障碍的人设计的。虽然辅助触摸可以使某些手势更容易,但开关控制是为那些很难触摸或点击的人设计的。

Caution

在您阅读“使用开关控制导航”之前,请不要启用开关控制

使用 iOS 为您的应用生成的辅助功能用户界面,Switch Control 将自动扫描屏幕,用边框突出显示辅助功能元素,类似于 VoiceOver 的外观。与 VoiceOver 的不同之处在于,它不是依次高亮显示每个可访问的元素,而是将元素自动分组到有意义的区域,以减少访问任何给定元素所需的按压次数。仅包含内容的元素也被排除在外,因为该开关控件旨在作为允许控制的工具;只有可以交互的元素才会突出显示。选择一个元素后,该元素的可用动作会在下拉列表中显示(图 9-5 )。如果您使用 iOS 的内置控件,如UIButton,这些操作将为您填充。但是如果你想添加一个手势的替代,一个很好的选择是在这里添加一个可访问性自定义动作。这些细节可在第六章中找到。

img/486920_1_En_9_Fig5_HTML.jpg

图 9-5

开关控制

这种导航方法的目的是让行动受到严重限制的用户能够只使用一个手势来导航他们的设备。但是,根据用户的能力,可以添加更多的手势。有问题的开关可以是很多东西。您设备的屏幕可以制作一个单独的开关,或者可以使用为 iPhone 制作的开关或开关控制器来连接外部物理开关。这些可以通过蓝牙或 MIDI 通过 USB 连接到 lightning 适配器。对于缺乏按下或点击这些物理开关之一的运动能力的用户,可以使用设备的摄像头来检测头部运动,允许向左或向右的头部运动来控制设备的不同方面。

以这种方式导航界面可能非常耗时。因此,启用了交换机控制的用户最有可能受到超时的影响。

您可以通过监听switchControlStatusDidChangeNotification或查询isSwitchControlRunning(列表 9-3 )来检测开关控制的状态。

import UIKit

class MyViewController: UIViewController {

    var switchControlStatus: Bool {
        get{
            return UIAccessibility.isSwitchControlRunning
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(switchControlChanged), name: UIAccessibility.switchControlStatusDidChangeNotification, object: nil)
    }

    @objc
    func switchControlChanged() {
      // check switchControlStatus for current status.
      // increase the prominence of gesture alternatives.
    }
}

Listing 9-3Detecting changes in Switch Control status

导航风格

当开关控制突出显示元素时,它们通常是单独完成的。取决于布局,开关控制可以确定将元素分组在一起是合乎逻辑的,比如在分组的表格视图中。我们可以调整我们的可访问性接口来告诉 Switch Control,它应该总是将元素作为一个组或者单独处理(图 9-6 )。对元素进行分组可以更快地导航到 UI 的其他区域。当控制很重要时,单独处理它们是合适的。在这种情况下取得平衡可能很困难,理想的情况是通过对每天使用开关控制的参与者进行一些用户测试来判断。

img/486920_1_En_9_Fig6_HTML.jpg

图 9-6

使用开关控制导航。元素分别导航(左)和组合导航(右)

每个视图都有一个属性accessibilityNavigationStyle;我们可以将它设置为.separate.combined(列表 9-4 ),这取决于我们想要的结果。

buttonStackView.accessibilityNavigationStyle = .combined

Listing 9-4Setting the Switch Control navigation style to group elements presented in a Stack View

Navigating With Switch Control

在启用交换机控制之前,您需要将交换机添加到您的设备中。你的屏幕可能是在测试环境中使用的最简单的选择,尽管我也建议使用头部运动和前置摄像头来尝试一下。在辅助功能设置的开关控制菜单下,点击开关➤添加新开关… ➤屏幕➤全屏➤选择项目。

现在通过辅助功能设置启用开关控制,或者在将来通过激活我们在本节开始时设置的辅助功能快捷方式来启用开关控制。你会看到一个蓝色的边界框出现在屏幕的顶部;一秒钟后,这个框将在屏幕上向下移动到下一组可选元素;再过一秒钟,盒子就会再跳一次,以此类推。要激活突出显示的区域,请点击设备屏幕上的任意位置。如果该突出显示包含一组项目,扫描仪将开始在元素间循环。开关控制以秒为间隔完成此操作。

使用开关控制激活单个元素后,会出现一个可能操作的下拉菜单。这些操作以与屏幕本身相同的方式循环,这意味着您可以点击屏幕上的任何位置来执行高亮显示的操作,或者聚焦于高亮显示的组来导航到不同的操作。突出显示的第一个操作是“始终点击”,这意味着在没有启用开关控制的情况下使用设备时,双击元素实际上等同于直接点击元素。

禁用开关控制,方法是轻按设备上的主屏幕按钮或睡眠按钮三次以激活辅助功能快捷方式,然后在突出显示开关控制后轻按屏幕两次。

口声控制

语音控制是 iOS 13 的一项新功能,允许只使用语音来完全控制你的应用,这使它成为行动最受限的人的理想选择。语音控制使用与 VoiceOver 相同的辅助功能用户界面、开关控制和不同的辅助技术,这意味着您的应用默认支持它。和其他辅助技术一样。由 UIKit 确定的可访问用户界面可能并不总是理想的,或者确实是准确的,因此可能需要一些定制。

可以使用辅助功能快捷方式启用语音控制。但激活它最直接的方式可能是说“嘿 Siri,打开语音控制”,要禁用它,你可以简单地说“关闭语音控制”,然后点击“执行”来确认。导航通常并不复杂,因为您将使用的最常见的命令是“点击”,然后是按钮的标签。如果你不确定按钮的标签,说“显示名称”(图 9-7 )来显示每个控件的辅助功能标签。

img/486920_1_En_9_Fig7_HTML.jpg

图 9-7

语音控制显示姓名

请确保您的控件的可访问性标签准确而简短,因为这将是您的语音控制客户用来激活有问题的控件的短语。使用“显示名称”命令可以清楚地显示标签是否太长,是否遗漏了标签,或者标签是否不容易从图像中识别出来。

如果你的元素包含大量的内容或者用户不容易理解的内容,那么,一般来说,这应该作为accessibilityValue而不是accessibilityLabel提供。您还可以提供一组更短的或者用户可能会说的替代标签,通过向您的元素accessibilityUserInputLabels属性(清单 9-5 )提供一个字符串数组,确保首先给出默认标签。

playButton?.accessibilityUserInputLabels = ["Play", "Play song", "Play \(song.title)"]

Listing 9-5Providing friendly labels for Voice Control to listen for to activate a “play” control

摘要

  • 确保您的可访问用户界面是准确的,将确保开关控制和语音控制如您的客户所期望的那样工作。

  • 如果你的应用使用触摸手势,确保你提供一个不需要手势的替代方案。此外,将这些作为辅助功能操作添加到您的辅助功能用户界面中。

  • 语音控制是一个很好的工具,可以快速直观地判断你的用户界面是否合理。而且用起来很好玩。

下一章是我们对 iOS 辅助功能的总结。我们将介绍 iOS 为有听力障碍的人提供的注意事项。

十、iOS 辅助功能——听觉

如果我要给有听力障碍的人提供一条关于改进应用的建议,那就是在任何视频内容上嵌入字幕,要么通过硬编码,要么最好通过添加字幕轨道并使用AVPlayer控件来播放视频。如果你的应用大量使用音频,考虑一种替代方式来提供引人入胜的体验,也许通过利用动画。

听力设备

有些助听器设备是为 iPhone 认证而制造的,可以与客户的设备配对,以通过设备传送音频,或使用实时聆听功能从 iPhone 的麦克风直接传送到助听器。如果您检测到助听器已配对,您可能需要为您的客户提供将所有音频移动到他们佩戴助听器一侧的选项。

如果需要,您可以通过注册hearingDevicePairedEarDidChangeNotification s 或检查hearingDevicePairedEar选项集是否包含.left.right.both来确定助听器配对状态(列表 10-1 )。

import UIKit

class MyViewController: UIViewController {

    var hearingDeviceStatus: UIAccessibility.HearingDeviceEar {
        get{
            return UIAccessibility.hearingDevicePairedEar
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(hearingDevicesChanged), name: UIAccessibility.hearingDevicePairedEarDidChangeNotification, object: nil)
    }

    @objc
    func hearingDevicesChanged() {
        if hearingDeviceStatus.contains(.left) {
            // left ear device paired
        }

        if hearingDeviceStatus.contains(.right) {
            // right ear device paired
        }
        if hearingDeviceStatus.contains(.both) {
            // both ear devices paired
        }
        if hearingDeviceStatus.isEmpty {
            // no hearing devices paired
        }
    }
}

Listing 10-1Detecting changes with paired hearing devices

单声道声音

单声道音频禁用设备上所有音频的立体声。这是在系统级别完成的,不需要您的应用进行任何更改。单声道音频可以用于一侧听力损失的人,因为如果一些音频被平移到他们难以听到的一侧,立体声音频会导致他们丢失内容。例如,如果一段对话的视频被平移,使得一个人在左边,另一个人在右边,那么一侧听力丧失的人将只能听到对话的一半。

如果您依赖应用中的立体声音频,您可能想要了解此设置。例如,一个可能使用平移音频来提示敌人存在的游戏在启用此设置后将失去意义。

monoAudioStatusDidChangeNotification会告诉你该设置何时改变,isMonoAudioEnabled会返回当前状态(列表 10-2 )。

import UIKit

class MyViewController: UIViewController {

    var monoAudioStatus: Bool {
        get{
            return UIAccessibility.isMonoAudioEnabled
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(monoAudioChanged), name: UIAccessibility.monoAudioStatusDidChangeNotification, object: nil)
    }

    @objc
    func monoAudioChanged() {
      // check monoAudioStatus for current status.
      // provide alternatives if your app uses stereo audio.
    }
}

Listing 10-2Detecting Mono Audio status

字幕和字幕

可以在设备的辅助功能设置中启用音频描述。AVFoundation包含对音频描述和隐藏字幕的内置支持,因此为您的媒体使用一个AVPlayer实例将免费为您提供该功能(图 10-1)——前提是您确保您的视频中嵌入了音频描述和隐藏字幕。

img/486920_1_En_10_Fig1_HTML.jpg

图 10-1

AVPlayer 显示嵌入的字幕

如果你不和AVPlayer玩视频怎么办?也许你正在使用一个不同的控件,也许你想在你的用户界面中显示标题,或者你在你的应用中播放了一段语音音轨。在这种情况下,你需要自己显示字幕。请记住这个选项,您不仅要负责显示字幕,还需要保持字幕与音频同步。要决定你是否应该显示或隐藏字幕,你可以听isClosedCaptioningEnabled来决定是否显示字幕,closedCaptioningStatusDidChangeNotification将报告任何变化(清单 10-3) 。可以说,对于作为 UI 一部分而非内容的视频,默认显示字幕总是更好的选择。

import UIKit

class MyViewController: UIViewController {

    var captionsStatus: Bool {
        get{
            return UIAccessibility.isClosedCaptioningEnabled
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(captionsStatusChanged), name: UIAccessibility.closedCaptioningStatusDidChangeNotification, object: nil)
    }

    @objc
    func captionsStatusChanged() {
      // check captionsStatus for current status.
      // hide/show captions as requested.
    }
}

Listing 10-3Detecting changes in caption status

大多数专业视频编辑软件都允许你给视频添加字幕。理想情况下,这些应该是专业转录的,但 YouTube 提供了一个很好的免费自动生成的替代方案,作为其 YouTube Studio 软件的一部分。 1 如果你选择使用这项服务,请检查标题是否准确,并编辑 YouTube 猜错的任何内容。然后,您可以下载您生成的字幕,并将其导入您的视频编辑器。

由于 VoiceOver 会检测屏幕上的文本,因此它也可以作为一种替代方法,为没有音频描述轨道的视频添加音频描述。通过为您的视频启用字幕,在启用 VoiceOver 的情况下,您的字幕将在出现时被朗读。然而,这并不能真正取代精确的音频描述音轨。

摘要

  • 如果您发现客户启用了听力辅助功能,他们可能很难确定语音或音频的方向性。如果这些对你的应用很重要,考虑提供替代方案。

  • 使用您的视频编辑软件将字幕轨道嵌入到您的应用使用的任何视频内容中,并使用 AVPlayer 控件为您显示字幕。

既然我们已经涵盖了开发者可能需要考虑的所有 iOS 辅助功能,我们需要确保我们的更改对我们的客户产生了正确的影响。接下来,我们将考虑不同的技术来测试你的应用的可访问性。

Footnotes 1

https://support.google.com/youtube/answer/2734796?hl=en

 

十一、可访问性测试

这本书会给你一大堆工具和实用技巧,你可以在创建你的应用时使用,从设计、编码到整个服务。你如何在你的应用中使用这些知识,必须基于你的团队对它如何最适合你试图实现的目标的考虑。然而,除非你检查你的工作,否则这些工具没有一个能产生真实的人所需要的影响。

不要认为易访问性测试是额外的。和编码一样,你应该把易访问性作为你工作流程的一部分。将可访问性测试的考虑因素作为现有测试计划的一部分。因此,我不打算教你制定测试策略的基础知识;相反,我会提供应该成为第二天性的提示和工具。

自动化测试

有几个自动测试工具可以检查你的应用是否符合可访问的标准。将其中之一包含到您现有的持续集成套件中,将有助于确保您的可访问性标准始终保持较高水平。拥有这样一个可访问性质量关也将鼓励开发人员考虑高标准的可访问性,因为他们知道如果不这样,他们将无法发布他们的代码。

请记住,可访问性是关于你的客户如何体验你的应用,而不是复选框。自动化易访问性测试只能检查某些东西。一些商业工具已经被创建为法规遵从性工具,用于在需要时提供证据,证明您已经遵循了可访问性指南。如果你的主要目标不是因为糟糕的可访问性而被起诉,这是非常好的。我觉得防止基于可访问性的法律纠纷的更好方法是创建一个更易访问的应用。使用这些工具作为防止回归的方法,但是它们不能代替手工测试或者用户测试。

诸如此类的工具的主要好处是,您可以将它们集成到您现有的 CI/CD 管道中。通过这种方式,它们在发布前充当质量关。任何没有达到你的可访问性标准的提交都不会被发布给你的客户。

Google GTXiLib

Google 为 iOS 提供了一个开源的自动化可访问性测试工具。GTXiLib, 1 或 Google Toolbox for Accessibility,适用于 XCTest UI 测试框架,如 Google 自己的 EarlGrey。

GTXiLib 确保你的元素有一个合适的点击目标大小,有一个没有标点符号的可访问性标签,如果是按钮的话不会以“button”结尾。检查标签及其背景之间的冲突可访问性特征和对比。对比度检查只适用于标签,不适用于其他元素,比如按钮。

世界空间证明

Deque 为数字无障碍提供一系列服务,如培训和评估。他们的网站还提供了大量关于数字无障碍的博客和资源。

德克的世界空间证明 2 产品是一个用于 iOS、Android 和 Web 的可访问性测试工具包。对于移动设备,这是通过在你的应用中包含一个框架来实现的。然后,您可以将测试集成到 Android 或 iOS 上现有的单元测试套件中。实例化一个视图,然后将它传递给 Attest 函数,以便在出现可访问性问题时产生测试失败。

测试包括检查可动态调整大小的文本、按钮大小、滚动视图外显示的文本元素以及重叠控件。

XCUI 测试

iOS 的第一方 UI 测试框架 XCUI 通过检查应用的可访问性树来执行测试。这意味着任何编写良好的 XCUI 测试也是一个可访问性测试。这也意味着易访问的应用更容易编写自动化测试。

在 XCUITests 中按标签查找元素是必须的(清单 11-1 )。替代方法,比如通过可访问性标识符查找元素,虽然它们确实保证了屏幕上有一个元素,但是不能保证您已经为它设置了内容或者您的内容是正确的。如果找不到某个元素,这可能是因为您已将该元素设置为“可访问性隐藏”。同时,不要试图为了测试而让元素具有可访问性,因为这会给用户带来不好的体验。

let myButton = XCUIApplication().buttons["My Button"]

Listing 11-1Finding a button element from its label “My Button”

一旦有了一个元素,就有可能对它执行一些可访问性健全性检查。这些检查的形式可以是断言按钮是大写的,并且不以句号结尾,或者交互元素最小为 44px x 44px(清单 11-2 )。我在下面提供了一些你可以使用的示例测试(清单 11-2 和清单 11-3 )。我提供的进一步测试在一个名为 A11yUITests 3 的库中,您可以将其作为 XCUITests 的依赖项。

import XCTest

class AccessibilityTests: XCTestCase {

     let app = XCUIApplication()

     override func setUp() {
        app.launch()
     }

     func test_buttonAllButtons() {
          // Navigate to the screen you want to check

          let buttons = app.buttons.allElementsBoundByIndex

          for button in buttons {
             check(button: button)
          }
     }

     func check(button: XCUIElement) {
          XCTAssert(button.frame.size.height >= 44)
          XCTAssert(button.frame.size.width >= 44)
          XCTAssertTrue(button.label.count <= 40)
          XCTAssert(button.label.first!.isUppercase
     }
}

Listing 11-2Checking all buttons on screen have a large enough tap target

import XCTest

class AccessibilityTests: XCTestCase {

     let app = XCUIApplication()

    override func setUp() {
        app.launch()
    }

    func test_imageName() {
    // Navigate to the screen you want to check

         let images = app.images.allElementsBoundByIndex

         for image in images {

              XCTAssertFalse(image.label.contains("image"))
         }
    }
}

Listing 11-3Checking image’s

accessibility label doesn’t contain the word “image”

浓缩咖啡测试

Android 的 Espresso 测试框架包括一类可访问性检查。通过导入AccessibilityChecks来包含这些测试,并使用清单 11-4 中的代码来启用它们。

import androidx.test.espresso.contrib.AccessibilityChecks

@RunWith(AndroidJUnit4::class)
@LargeTest
class MyWelcomeWorkflowIntegrationTest {
    companion object {
        @Before @JvmStatic
        fun enableAccessibilityChecks() {
            AccessibilityChecks.enable()
        }
    }
}

Listing 11-4Enabling accessibility tests in Espresso

每当在视图上执行一个动作时,测试将自动在该视图及其子视图上执行。或者,您可以通过在enable()调用后添加setRunChecksFromRootView(true)来指示 Espresso 在根视图上运行测试套件。

AccessibilityChecks包含对许多常见可访问性问题的测试,如冗余标签、可访问性标签存在和点击目标大小。它还能够检查其他工具无法检查的可访问性问题,例如遍历顺序和图像对比度。

验证工具

可访问性验证工具是自动化测试和手动测试之间的中间地带。在某些方面,它们可以提供比自动化测试更多的细节,但是需要手工操作来运行检查。

google 扫描仪

GSCX, 4 或 Google Scanner for Accessibility,是 Google 的 GTXiLib for iOS 之上的一个库。您可以将 GSCX 包含在您的内部测试应用中。这里它在你的应用屏幕上覆盖了一个“执行扫描”按钮。按下此按钮时,GSCX 会突出显示任何违规元素。点击这些突出显示提供了失败原因列表和解释。由于 GSCX 在引擎盖下使用 GTXiLib,因此它具有相同的检查套件。

如果您正在使用 GTXiLib 进行自动化测试,这是一个友好的额外工具,可以帮助可访问的开发。

世界空间证明

如果你已经在 iOS 或 Android 上购买了 Deque 测试工具的许可证,这也带有手动模式。手动检查通过导航您的应用进行,该应用附带有 Attest companion 应用。然后,附加的应用可以对您的应用的可访问性树进行快照,并为您提供发现的任何问题的详细报告,在出现故障的屏幕截图上突出显示。

Apple 辅助功能检查器

辅助功能检查器是 Xcode 工具套件的一部分。您可以从 Xcode 菜单➤ Open Developer Tool 中的 Xcode 内启动它。然后,您可以在设备上或模拟器上以两种模式之一对您的应用运行辅助功能检查器。

Quicklook 允许您将模拟器中的用户界面元素作为目标,以查看元素的可访问性属性,如标签、特征和提示(图 11-1 )。快速查看视图的顶部会显示 VoiceOver 遇到元素时读取的字符串。按下旁边的扬声器按钮会让 VoiceOver 朗读字符串。

img/486920_1_En_11_Fig1_HTML.jpg

图 11-1

快速查看模式下的辅助功能检查器(左)显示 iOS 日历图标的辅助功能属性,高亮显示(右)

这里的大播放按钮将在屏幕上的每个可访问元素之间循环。“辅助功能检查器”会按照 VoiceOver 导航屏幕的顺序来执行此操作。“辅助功能检查器”会像 VoiceOver 一样为您朗读元素。这使得验证技术比使用 VoiceOver 本身要快得多。

审计模式对整个当前视图进行检查,并报告发现的任何可访问性问题(图 11-2 )。报告包括验证失败原因的更详细描述、位置失败的元素的屏幕截图,以及如何修复失败的提示。测试包括对比度、动态文本、点击目标大小和对大图像的描述。

img/486920_1_En_11_Fig2_HTML.jpg

图 11-2

审核模式下的辅助功能检查器报告(左)。审计创建屏幕截图,突出显示屏幕上可能存在问题的区域(右图)

辅助功能检查器还提供了使用设置选项卡切换某些辅助功能的快速访问(图 11-3 )。您可以在这里调整动态文本的大小。您还可以切换反转颜色、增加对比度、降低透明度和减少运动。

img/486920_1_En_11_Fig3_HTML.jpg

图 11-3

“辅助功能检查器设置”标签提供对某些辅助功能的控制

Xcode 环境覆盖

Xcode 为当前运行的应用提供了一个环境覆盖菜单。这在模拟器和设备上都有效。你可以在编辑器底部的调试器工具栏上找到这个按钮(图 11-4 )。在这里,您可以毫不费力地在明暗模式之间切换,并调整动态字体大小。您还可以切换几个辅助功能:增加对比度、降低透明度、粗体文本、减少运动、开/关标签、按钮形状、灰度、智能反转和无颜色区分。

img/486920_1_En_11_Fig4_HTML.jpg

图 11-4

Xcode 环境覆盖

Xcode 应用语言

Xcode 还提供了用不同语言测试应用的覆盖,包括伪语言。通过点击 Xcode 左上角的应用名称来编辑你的应用的构建方案(图 11-5 )。在运行和选项下,你会发现一个应用语言的下拉选项。在这里,您可以选择 iOS 支持的任何语言来检查您的本地化。列表底部还提供了各种伪语言选项(图 11-6 )。

img/486920_1_En_11_Fig6_HTML.jpg

图 11-6

在 Xcode 的方案编辑器中选择一种伪语言

img/486920_1_En_11_Fig5_HTML.jpg

图 11-5

在 Xcode 中编辑目标的方案

伪语言是模仿具有不同属性的语言的合成语言。这个列表中最有用的是从右向左的伪语言和双倍长度的伪语言(图 11-7 )。从右到左的伪语言模仿了你的应用在阿拉伯语中的显示方式,这种语言的阅读方向与大多数语言相反。双倍长度的伪语言复制你的字符串。这允许您检查您的布局是否足够灵活,以支持比您的开发语言占用更多空间的语言。在布局中提供足够的灵活性也有助于支持动态文本大小。

img/486920_1_En_11_Fig7_HTML.jpg

图 11-7

从右向左的伪语言(左)和双倍长度的伪语言(右)

谷歌无障碍扫描仪

谷歌的无障碍扫描仪是一个应用,可以从谷歌 Play 商店免费下载。 5 当被请求时,可访问性扫描器将对你的应用运行审计,捕捉屏幕截图并突出显示将从改进中受益的元素(图 11-8 )。该报告为您提供了失败视图的标识符,以及元素失败原因和如何修复错误的描述。

img/486920_1_En_11_Fig8_HTML.jpg

图 11-8

谷歌无障碍扫描器提出改善无障碍的建议

人工测试

虽然自动化工具和检查器在防止回归和突出不太明显的可访问性错误方面非常出色,但是存在自动化测试永远无法识别的可访问性问题。其中最常见的是确定您向客户展示的可访问性树是否合理和有意义。虽然在我们的可视化用户界面中,我们有设计师来为我们做这些,但是一旦我们将设计转化为代码,他们的辛勤工作并不总是转化为有用的可访问性树。检验这一点的唯一方法是亲自尝试。

屏幕阅读器测试

创建新屏幕或对屏幕进行重大更改时,请在启用 VoiceOver 或 TalkBack 的情况下浏览屏幕。虽然这些屏幕阅读器仅构成一种辅助技术,但由于它们都使用相同的可访问性树,因此体验应该是相似的。

一旦您熟悉了这些屏幕阅读器的工作方式,这个测试应该会成为您常规开发工作流程中快速且必要的一部分。随着你对这个测试越来越熟悉,试着启用黑屏或幕帘。这些功能会关闭显示屏,这意味着您与设备的唯一交互是通过手势和设备语音反馈。对你来说,在没有任何视觉提示的情况下关注你的应用有多简单?

需要注意什么

当使用屏幕阅读器执行手动测试时,当您导航时,有几个问题要问。

  1. 每个元素都是按照逻辑顺序呈现的吗?

    元素应该以有意义的方式相互跟随,为控件提供上下文。例如,不要在要购买的商品名称前显示“购买”按钮。

  2. 是否缺少任何元素?

    元素可能对辅助技术隐藏,但在屏幕上仍然可见。当我滑动浏览时,屏幕上的所有内容和控件都被读取了吗?

  3. 有我不希望出现的元素吗?

    如果您在屏幕上隐藏了元素,根据您隐藏它们的方式,它们可能仍然可用于辅助技术。这可能会导致您向客户提供不正确的信息,或者让您的客户进入无效状态。

  4. 浏览这个屏幕很费力吗?

    你必须经常在元素间滑动吗?元素或控件是否重复?信息是重复的吗,就像给一个按钮命名为“button”并设置一个“button”特征?也许有些元素可以隐藏起来,以便在不失去意义的情况下改进导航。考虑使用语义视图。

语音控制测试

iOS 13 的新语音控制功能首先是一个辅助功能,是为那些努力敲击屏幕的人设计的。但是它也隐藏了第二个非常有价值的功能,作为一个快速的可访问性测试工具。

通过说“嘿,Siri,启用语音控制”来启用语音控制启用后,说出“显示数字”iOS 会在每个交互元素旁边显示编号气泡(图 11-9 )。这个数字代表 VoiceOver 访问每个元素的 tab 键顺序。快速浏览这些数字将会确认您是否缺少元素或者有您不期望出现的元素。它还将帮助您验证每个元素的顺序在屏幕的上下文中是否有意义。

img/486920_1_En_11_Fig9_HTML.jpg

图 11-9

语音控制显示辅助功能选项卡顺序

接下来,说“显示姓名”iOS 会将这些编号的气泡替换为带有每个交互元素可访问性标签的命名气泡(图 11-10 )。这允许您验证标签是否存在以及是否有意义。

img/486920_1_En_11_Fig10_HTML.jpg

图 11-10

显示辅助功能标签的语音控制

用户反馈

考虑在您的应用中添加一个选项,让您的客户联系您并提供反馈。AppleVis 是一个由盲人和低视力苹果用户组成的在线社区,它建议其成员在遇到可访问性问题时联系应用开发者,以概述问题。许多发现易访问性问题的人就是这么做的。现实情况是,许多开发人员对可访问性了解不够,不知道可能存在问题。做电子邮件反馈的人往往会发现他们从中获得了好的结果。但是即使你遵循了这本书里的所有内容,你仍然不会有你的客户在使用你的应用时的体验。反馈选项是一种低成本、低工作量但有效的用户测试方式。

作为移动开发人员,我们有一个好处,尽管这可能并不总是一个好处,那就是我们以应用评论的形式收到客户的反馈。定期查看这些,并确定趋势。留意那些抱怨你的应用缺少某个功能的人。这不是你的用户没有发现这一点的错;你的特征要么不够直观,要么不够明显。

用户测试

在本书的前面,我强调了移情在软件工程中的重要性。同理心对于任何软件工匠来说都是一项非常有价值的技能。但同理心有时会把我们引向错误的道路——认为必须做一些事情,但不考虑我们选择做的事情是否有我们想要的效果。提高应用可访问性的一个原因确实是因为帮助他人让你感觉良好,但这不应该是主要原因。设计战略家 Liz Jackson 要求我们重新思考移情策略。

【同理心】具体化阶级和权力结构。你总是有移情者,然后你总是有移情者,对吗?移情者是救世主,移情者永远是接受者,这些角色永远不会改变。

【感同身受】让接受者保持沉默。你应该感激为你做的一切。

——莉兹·杰克森,移情具体化残疾污名 7

无障碍顾问和手语使用者 Marie van Driessche 告诉我们,从她的经历来看,同理心被用作不和残疾人交谈的借口。

大多数人对与残疾人交谈不感兴趣,他们更喜欢感同身受。但是同理心并没有帮助我们。

-玛丽·范·德里斯切??[8]??

我的观点是,如果你没有和残疾用户一起测试你的应用,你就没有做到可访问性。你只是在浪费你的发展时间来提升你的自我。

有许多专门讨论用户测试的书籍,它们会涵盖如何用比我更多的专业知识来做这件事,所以我不会涉及如何建立用户测试会议或实验室。但是我想表达让你的用户测试会议的参与者多样化是多么的重要。确保包括残疾人,以及来自不同背景和各种技术能力的人。最重要的是,倾听他们的反馈。可能是这样的情况,你所做的一个认为会提高可访问性的改变反而使它变得更糟。残疾人没有义务感谢你为他们考虑。相反,作为开发人员,你的职责是处理他们的反馈。

摘要

  • 和软件的其他方面一样,如果你不测试它,你怎么知道它能工作呢?

  • 最准确和最有用的易访问性测试形式是对具有不同能力的人进行用户测试。一定要倾听和相信他们的经历。

  • 用户测试可能是耗时且昂贵的,所以考虑将自动化测试作为标准发布过程的一部分。然而,您不应该过于依赖自动化测试,因为它们的范围是有限的。

Footnotes 1

https://github.com/google/GTXiLib

  2

www.deque.com/tools/worldspace-attest/

  3

https://github.com/rwapp/A11yUITests

  4

https://github.com/google/GSCXScanner

  5

https://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.auditor

  6

https://applevis.com/apps

  7

杰克逊莉兹。 https://vimeo.com/319388683 谓移情使残疾污名具体化

  8

范·德瑞斯彻,玛丽。推特帖子。2019 年 9 月 4 日https://twitter.com/marievandries/status/1169242121108369409

 

十二、让您的应用具有包容性

到目前为止,我希望我已经说服了你,为什么可访问性和包容性是必不可少的。我们还介绍了每个平台的功能和原因。但是,你应该何时以及如何使用谷歌和苹果为你创造的每一个工具呢?在这一章中,我们将讨论一些你可以用来为不同的人改善你的应用体验的技术。没有特定的顺序,我们将涵盖不同的人群,并讨论一些让你的应用更具包容性的方法。我们将结合平面设计、服务设计和移动编程的元素。

最终目标是让我们的应用成为真正的包容性体验。当你通读时,你可能会注意到一些主题出现了。这不是偶然的。把你的应用定位于某一群人,这不是包容,而是排斥。通过坚持围绕设计、灵活性和尊重客户的原则,我们可以创建对每个人都更好的软件。

诵读困难、自闭症和学习困难

符合这一类别的人,以及患有其他疾病的人,如多动症、双相情感障碍等,通常被称为神经多样性。我喜欢这个词提供的框架;它改变了神经多样化的人需要克服某些东西的想法。认为自己神经多样化的人觉得他们的大脑以不同于我们其他人的方式工作。我有阅读障碍,虽然这确实给我带来了问题,即阅读和数学,但我觉得大脑处理信息的方式给我提供了独特的视角。这花了我很多年,我会一直学习新的东西,但我觉得我已经掌握了如何利用这些差异作为优势。你可以做一些事情,让包括我在内的神经多样化的人对你的应用有更愉快的体验。

设计简单

坚持合理的设计原则将对许多有学习困难的人产生重大影响。保持你的设计一致、简单、干净、整洁。坚持平台规范以增加一致性。

任何移动或动画内容都必须包含一个让您的客户暂停动画的机制,包括视频,但不包括过渡。移动内容应该只在响应用户操作时触发。

排印

不要使用太多的字体、字号或颜色。有太多的变化会让你的应用看起来混乱和不一致。但是对于一些有学习困难的人来说,太多的差异会使阅读变得更加困难。避免粗体、下划线、斜体和全部大写的文本。

对于正文,在浅色背景上使用黑色文本,而不是白色。如果可能的话,允许用户选择背景颜色是最理想的。正文应该总是自然对齐(在大多数语言中是左对齐)。如果您的设计要求文本居中或右对齐,这是可以的,但要避免完全对齐的文本,因为这会创建一堵难以解读的文本墙。

清晰的书面内容

保持书面内容简洁和描述性。明确任何行为的后果。对按钮和其他控件使用这些相同的原则。避免使用习语、首字母缩略词和缩写词,因为这些很难理解。

简明英语运动在他们的网站 1 上提供免费的建议,让你用清晰的英语写作,既能表达你的信息,又能引人入胜。海明威( www.hemingwayapp.com ,见图 12-1 )是一个伟大的免费网络应用,它会检查你的语法,并为你的文本提供美国学校阅读评分,突出需要改进的地方。

img/486920_1_En_12_Fig1_HTML.jpg

图 12-1

海明威强调我可以提高我的写作可读性的领域。老实说,这本书的大部分内容没有这一段突出红色

文本的替代

不要只展示基于文本的信息。以图像、图表或视频的形式提供冗余。对于较大的文本组,或者对于不容易转换成可视形式的文本,请提供录音。

iOS 和 Android 都提供屏幕阅读器——在 Android 上选择朗读,在 iOS 上选择朗读和朗读屏幕。注意,这些与画外音和回话是不一样的。VoiceOver 和 TalkBack 包含一个导航元素,是为有视觉障碍的用户设计的。屏幕阅读器只读文本内容。它们不读取或促进与控件的交互。您应该在启用屏幕阅读器的情况下测试您的应用,以确保它以有意义和可理解的方式阅读您的内容。您可能需要更改应用的可访问性树,以提供最佳体验。

颜色

对于一些有学习困难的人来说,特定的颜色组合会使文本显得杂乱或闪烁。避免明亮、鲜艳的颜色,尤其是在内容周围。文本使用黑色,而不是灰色或其他颜色,不管这种颜色有多接近黑色。文本内容的背景应为浅色;柔和的颜色很好。避免白色或其他亮色。理想情况下,允许客户选择适合他们的背景颜色。

准确

不要坚持书面输入的准确性。相反,提供选项。在有限的选项中,允许您的客户从微调按钮或按下按钮进行选择。在选项范围较广的地方,如文本框,提供自动完成的机会或减少键入量的建议。尽可能确保这些建议不需要完美的拼写就能出现。

对于较长的段落,允许通过听写输入文本。默认情况下,两个平台都支持听写,但如果您的应用提供了自己的键盘,则可以禁用听写,因此尽可能使用系统键盘。对任何标准文本条目启用自动更正。在您的用户提交之前,请始终让他们有机会检查和编辑他们输入的任何内容。

完全公开

用户体验专家 Harry Brignull 在 2010 年创造了一个短语“黑暗模式”,用来识别那些旨在让用户做他们不想做的事情的敌对设计模式。哈利在他的网站 darkpatterns.org 上定义了一些常见的黑暗模式。 2 这些包括但不限于,诱骗提问、确认羞辱、误导。康奈尔大学 2019 年的研究在流行的在线购物网站中共发现了 15 种不同类型的黑暗模式。研究人员发现,超过 11%的排名最高的商业网站至少有一个例子。让我们明确这一点:旨在欺骗你的用户的黑暗模式是对所有用户的蔑视,并且总是不道德的。对于有学习困难的客户来说,这些陷阱更加令人不安和困惑。

清楚执行一个行为的后果,不要在没有明确同意的情况下改变后果。例如,如果你正在收集 2FA 的电话号码,不要用它来发送垃圾短信。未知原因的意外消息的突然到来可能会令人担忧。

焦虑与心理健康

许多头条都在报道智能手机对健康的影响:“放下手机可能有助于你活得更久,” 4 无休止的观点文章,如“我如何抛弃了我的手机,打破了我的大脑, 5 以及大量的健康指南,如“你的手机影响你焦虑的 5 种方式”。看到这些标题,人们可能会很容易相信我们移动开发者创造了一个怪物。

对信息过载和新技术的恐慌比技术本身还要古老。大约在公元前 360 年,苏格拉底警告说,书面文字会“造成健忘”,读者会很难区分幻想和现实。网络成瘾或手机成瘾确实存在,而且其危害性不亚于任何其他成瘾。过度使用智能手机会导致压力、抑郁、睡眠问题、焦虑和孤独,这也是事实。88

虽然过度使用技术是心理健康不佳的一个指标,但技术使用不足也是如此。Bélanger 和他的同事在 2010 年的一项研究中发现了互联网使用和心理健康之间的“U 型关联”。他们经常被引用的研究发现,那些很少或不使用互联网的人因感到孤独而导致的抑郁程度增加了。因此,虽然我们选择的平台可能会对某些人产生上面列出的影响,但对大多数人来说,它会产生完全相反的影响。通过创造身临其境的体验,我们让人们丰富他们的生活,找到归属感。这是我们应该庆祝的事情。

确定智能手机使用的哪些领域是精神健康的风险因素几乎是不可能的。我们可以在智能手机上执行的广泛任务,加上大量使用智能手机是一种社会规范的事实,使得识别模式非常困难。 10 但是我们可以对心理健康风险因素进行一些更为一般性的研究,从而制定一些指导方针。

向导

迷失或受困的感觉可能是焦虑的催化剂。在移动领域,这种情况经常发生,迫使您的客户在我们选择的时间执行操作,例如,显示一个间隙,而不是让我们的客户在他们准备好的时候做出决定。我经常看到的另一种模式是,试图通过隐藏替代选项来让用户选择我们喜欢的结果。

你可以通过指引和路标来对抗迷失感。当客户执行任务时,向他们展示他们的进度,以重申他们已经完成的任务以及还剩下多少。 11 让你的客户按照自己的进度前进。如果可能的话,允许您的客户按照他们的顺序前进,根据需要跳过或返回到步骤。

当你的客户完成一项任务后,在他们提交之前,给他们一个机会检查他们做了什么。让他们有机会根据需要改变自己的回答。如果任何行为会对服务产生显著影响,例如破坏性行为,在允许客户做出承诺之前,以易于理解的方式解释其后果。我们的目标通常是加快我们的应用中客户的互动,但是如果你的流程可能导致重大变化或负面结果,请考虑使用积极的摩擦。积极的摩擦提供了一个停顿,让你的客户有机会再次检查他们的行动。 12

确保你的应用的外观和感觉是一致的,尽可能坚持系统控制,以帮助与平台保持一致。事情运作方式的变化,尤其是意想不到的变化,会引起不适的感觉,并增加焦虑。

通讯

可见性对于焦虑来说至关重要,与客户进行清晰及时的沟通会产生积极的效果。投资一个好的文案会给你的应用的清晰性带来显著的好处。在用户采取行动之前,就行动的后果进行简单明了的交流是至关重要的。如果您要对服务进行更改,例如重新设计,请确保提前进行沟通。 14

如果你的应用以应用内购买或订阅的形式提供付费服务,不要隐藏任何费用。让付费服务的任何选项都变得透明,并明确服务包括什么和不包括什么。允许你的客户在任何时候取消,而不需要经过重重关卡。就像在你的客户开始付费服务之前通知他们一样,确保你清楚如果他们取消的话会失去什么。暂停付费服务的选项是一个很好的补充。 十五

目标是做到这一切,同时记住不要用信息轰炸你的客户。为他们提供清晰易懂的相关信息,但要保持简短,一目了然。如果您的客户需要更多信息,请指引他们到他们可以访问的地方。理想情况下,用一个真人来提供支持。对支持可以提供什么、何时可用以及需要多长时间做出响应设定期望值。 16

自制力

许多患有焦虑症、精神障碍或学习困难的人通常会发现给自己增加限制的能力是一种积极的行为。诺和他的同事在 2019 年的一项研究中发现,不提供内容定义端点的应用,例如无限滚动,可能会导致智能手机成瘾。强制停止使用智能手机可以让我们休息一下,重新集中注意力。根据应用的用途,在应用中实现这些控件会有很大的不同。我在这里列举了一些例子来激发灵感。

允许客户管理自己的一个很好的例子来自英国挑战者银行 Monzo。Monzo 在其应用中对某些交易进行了阻止,为客户提供了一个禁止任何与在线赌博相关的交易的设置。苹果还在 iOS 中实现了一些带屏幕时间的自控功能(图 12-2 和图 12-3 )。这项功能允许我们限制我们在某些应用、类别或手机上花费的时间。当我们只希望某些基本应用可用时,我们也可以设置停机时间。

img/486920_1_En_12_Fig3_HTML.jpg

图 12-3

使用 iOS 的屏幕时间功能设置夜间停机时间

img/486920_1_En_12_Fig2_HTML.jpg

图 12-2

通过 iOS 的屏幕时间功能限制社交媒体的使用

社会的相互影响

数字服务是让人们变得社会化并找到归属感的无价工具。在你的应用中加入社交元素是志趣相投的人发现彼此的好方法,对他们的精神健康大有裨益。

但是正如我们在下面关于性别和性行为的章节中所提到的,用户之间的任何互动方式都会对你的客户和你的业务造成损害。对于用户之间的任何形式的交互,为客户提供一个阻止内容和用户的机制是非常重要的,最好是一个审核系统。

游戏化

在最好的情况下,游戏化是推动理论的数字体验分叉。推动理论是行为科学领域,研究使用积极强化来鼓励积极的行动。最常被引用的例子是在阿姆斯特丹史基浦机场的小便池中添加家蝇的图像。通过在便池的正确位置添加苍蝇,发现男性的瞄准能力显著提高,溢出量减少了 80%。游戏化可以作为一种让体验变得更积极的手段,并被证明对严重精神疾病患者有效。 19

语言学习应用 Duolingo(图 12-4 )利用游戏化成为 app store 上下载量和使用量最大的学习应用。它通过结合小的、可实现的、渐进的目标、可视化的进展以及返回并保持参与的提示来做到这一点。 20

img/486920_1_En_12_Fig4_HTML.jpg

图 12-4

多林哥的成就

虽然我们当然可以批评当你没有给予足够的关注时,Duolingo 发送的越来越需要、令人焦虑的推送通知;在很大程度上,Duolingo 是一个游戏化做得很好的例子。它丰富多彩,友好,有趣,重要的是不会迫使用户付费。

游戏化往往是心理操纵的委婉说法,让你的用户做一些他们本来不会做的事情,比如花钱、执行任务、分享个人数据或许多其他例子中的一个。这两个应用商店都充满了“免费增值”游戏,糖果粉碎和部落冲突就是著名的例子。许多这样的游戏,虽然看起来是免费的,但需要大量的真钱投资才能取得重大进展。

英国移动网络 GiffGaff 已经取代了他们的一些核心业务运营,如客户支持和销售,或者 GiffGaff 称之为“社区成员”。每完成一项任务都会获得积分,比如在应用中回复一位客户的支持查询。GiffGaff 以较低的价格为每个人奖励社区成员。获得的任何积分都可以兑换成客户账单上的积分。为积极的客户行为提供奖励是提高客户忠诚度的一个好方法,可以鼓励你的应用需要的实践,让你的体验更愉快。但对我来说,将核心业务职能外包给你的客户跨越了道德劳动边界。

在用游戏化吸引你的客户和播种坏习惯之间,这是一条微妙但重要的线。诺和他的同事认为,在线与朋友竞争的游戏化可能是智能手机成瘾的一个原因。 21 诺伊的团队使用了 Snapchat 的 Snapstreak 功能的例子。Snapstreak 用一个火表情符号和连续记录保持的天数奖励定期发帖。鼓励用户保持这种势头。但这可能会导致用户感到发帖的压力,并可能导致高度的压力和焦虑。

经济困难

一台电脑、一台平板电脑或一部智能手机以及一个互联网连接不是一笔微不足道的财务支出,也是一笔经常性支出。对于大约 20%的互联网用户来说,智能手机是他们访问互联网的唯一途径。仅使用智能手机的互联网用户更有可能生活在贫困地区。40%的人说他们使用智能手机的原因是因为其他选择的成本。

然后,作为移动开发者,我们有责任确保我们保持与桌面体验同等的功能。围绕我们支持的设备,也需要达成微妙的平衡。放弃对旧设备和操作系统的支持可以给我们带来好处,比如降低复杂性和令人兴奋的新功能。但我们可能会离开没有应用的用户通常是那些最弱势的用户,他们可能很难升级。

还要考虑到残疾人通常比正常人有更大的成本负担——英国残疾人慈善机构 Scope 估计每月要多支付 750 美元。 23 残疾人也更容易失业。美国的就业率为 3.7%;在残疾人中,这一比例上升至 8%。 24 因此,残疾人更容易陷入经济困难的境地。

数字素养

你是专家。虽然我们在软件工程方面都有自己的专长,但你仍然是专家。对许多人来说,任何数码产品都是一个谜,也许是因为他们缺乏经济来源。也许他们成长在计算机还没有普及的时代,没有找到学习的理由。作为一个经常性的、长期的数字公民,很容易忘记或看不起许多不使用互联网的人,甚至可能是害怕互联网的人。但对网上银行的担忧是真实的,80%的人都有这种担忧。 25

基本数字技能

英国政府与亚马逊(Amazon)和微软(Microsoft)等集团协商,编制了一份基本数字技能清单。政府认为这些技能是任何人能够胜任使用互联网的基准。

当你在读这本书的时候,我想你可以掌握所有这些重要的数字技能。事实上,它们中的许多看起来是如此的基本,以至于几乎不值得一提。然而,对英国的许多人来说,现实是他们不能做这些我们认为显而易见的事情。21%的英国成年人口,1130 万人,不具备这些技能。更令人担忧的是,8%的英国成年人口,430 万人,不具备这些技能中的任何一项——一项都没有。我总结了一些关键技能和一些与移动最相关的技能。

交流

沟通、协作和共享信息所需的技能,包括以下技能

  • 我可以在 WhatsApp 或 Messenger 等消息平台上建立一个群组,与朋友或家人聊天。

  • 我可以在社交媒体上适当发帖,并访问和发帖到 Mumsnet 或 Reddit 等论坛。

  • 我可以将照片和其他文件作为电子邮件附件发送给朋友和家人。

  • 我理解安全交流的重要性。

处理信息和内容

安全地查找、管理和存储数字信息和内容所需的技能包括

  • 我明白并非我看到的所有在线信息和内容都是可靠的。

  • 我可以使用搜索引擎查找信息,并利用搜索词产生更好的结果。

  • 我知道云是我可以在远程位置存储信息和内容的一种方式。

  • 我可以从 Spotify 或 Apple Music 等合法网站上下载音乐,或者从网飞或亚马逊 Prime 等合法网站上观看流媒体电影。

交易

注册和申请服务、购买和销售商品和服务以及管理在线交易需要以下技能:

  • 我可以为公共服务建立在线账户。

  • 我可以为政府服务和零售商建立在线账户,以便通过亚马逊或易贝等在线订购和支付商品。

  • 我可以使用旅游网站和应用来订票。

  • 我可以安全地管理我的在线资金和交易。

解决问题

使用数字工具和在线服务寻找问题解决方案所需的技能:

  • 我可以使用在线教程、常见问题解答和建议论坛来解决问题,并提高我使用设备、软件和应用的技能。

  • 我可以通过使用像 YouTube 上的教程视频来找到如何做某事。

  • 我可以使用互联网查找与需要执行的生活任务相关的特定信息,例如,查找食谱或帮助计划旅行的信息。

在线安全合法

在生活和工作中保持在线安全、合法和自信所需的技能包括

  • 我对网站和帐户使用不同的安全密码来保护我用来访问我的在线帐户的信息,并确保我不会与任何人共享这些信息。

  • 我可以识别电子邮件、网站、社交媒体消息和弹出窗口中的可疑链接,并且知道单击这些链接或下载不熟悉的附件可能会使我和我的计算机面临风险。

  • 我了解开展在线活动的风险和威胁,以及安全工作的重要性。

  • 我理解保持我的计算机系统和安全软件最新的重要性,并且我允许它们在提示时更新。

调查的结果

在上述五个领域中,技能最高的领域是处理信息和内容。91%的人口拥有这方面的足够技能。然而,21%的受访者无法下载或保存他们在网上找到的照片。

尽管我们与数字化组织的互动越来越多,但在 2015 年至 2018 年期间,这些技能仅增长了 1-2%左右。只有 87%的人能够完成在线申请表,85%的人能够在线购买商品或服务。我们在移动领域特别感兴趣的是,只有 76%的人能够在他们的设备上安装应用。

你≠你的用户

在过去的 25 年里,我们主要是为设计[软件]的人设计[软件]。

—vasilis van gemert,独家设计【28】

作为以这种或那种方式靠电脑谋生的人,我们很容易忘记,在知道如何使用我们创造的产品时,我们处于一种特殊的地位。现实中,我们的客户和我们不一样;他们甚至不太可能像我们的朋友。

我相信我们都能想到一个不使用技术的家庭成员。如果他们今天需要拿起设备来完成任务,他们会知道煎锅图标意味着他们可以搜索吗?他们会在意你给事物起的可爱名字吗,比如当你指的是存储时的“云”吗?我记得在苹果经销商工作的一段时间。一位顾客认为 AirPort 是苹果 Wi-Fi 的品牌名称,这意味着他们只能在飞机上使用 Wi-Fi。

我们不能在那里握住客户的手。我认为我们或我们的客户也不希望这样。思考我们的客户有能力做什么和屈尊俯就之间有一条细微的界限。避免行话,无论是书面的还是视觉的,都是很好的第一步。为了在其他方面取得成功,我们需要更多地了解我们的用户。

用户测试

开发任何产品时,了解市场和你的客户群是很重要的。当我们在创建软件时,这有什么不同呢?作为开发人员,我们没有理由不能与用户交流。除此之外,我们中的许多人更喜欢尽可能少的人际交往。

用户测试既耗时又昂贵。但对于任何规模的企业来说,这可能是成功产品和失败产品的区别。产品经理可能对识别产品及其市场的用户测试感兴趣。但是作为开发者,我们可以使用用户测试来识别我们市场的技能。这正是重要的数字技能发挥作用的地方。

英国政府开发了前面列出的基本数字技能作为用户测试工具。在邀请人们体验他们的软件之后,在动手之前,他们向参与者提问,以确定他们的数字技能。然后,参与者被标绘在一个标尺上(图 12-5 ),从 0 开始,从来没有也永远不会使用互联网。移动到 4,这意味着参与者可以做到上述基本数字技能之一。7 表示参与者可以执行所有必要的数字技能。9 点结束,你和我会坐在那里,这意味着我们是以数字为生的专家。

img/486920_1_En_12_Fig5_HTML.jpg

图 12-5

英国政府的数字包容性量表

您可以通过两种方式使用该秤。如果你真的有信心准确了解你的应用的用户群,作为研究参与者,你可以使用这个量表来了解你的参与者的技能。规模将帮助您了解如何先进和冒险,你可以使您的功能。只要相信你的用户会追随你就行了。

或者,你可以使用这种尺度来确保你的应用简单易懂。检查一下,对于那些数字技能较低的人,他们可以通过你的应用引导自己,而无需你光顾他们。

年龄

科技有代沟。99%的 11-18 岁青少年可以上网;其中 96%的人每天都使用互联网。60 岁以上的人有 28%根本不上网。 29 这是一代人之间的巨大差距。我们中的许多人是伴随着无处不在的计算成长起来的。其他人可能从未听说过计算机,或者知道计算机是一种他们永远不会使用的晦涩的工业工具。如果这突然成为我们日常生活的一部分,我们当中没有在农场长大的人会有信心,甚至喜欢在 30 多岁时学习复杂的农业机械的复杂细节?在前面关于数字技能的章节中,我们在更广泛的背景下讨论了许多问题。

虽然这种技能差距正在逐渐缩小,但我们无法回避的是,世界人口正在老龄化,随着年龄的增长,我们的身体也会发生变化。随着预期寿命的增长,众所周知,我们中的大多数人将会看到我们的身体开始让我们失望。因此,尽管你现在可能不会使用辅助技术,但在未来,当你的眼睛、认知、运动能力或任何其他身体方面开始衰竭时,你会开始欣赏它们的存在。这对你的客户也是一样的。

文本大小是通向可访问性的大门

age 的“网关”辅助功能是改变文本大小的能力。在 iOS 上支持动态类型并在 Android 上使用可扩展的磅值是任何应用中可访问性的必备第一步。可调整的文本大小通常是客户可能使用的第一个辅助功能,通常不认为它是一个辅助功能。

可定制的文本大小介于我们可能认为的辅助功能和定制之间。因此,支持这些有助于规范辅助功能的使用。它还可以教育你的用户,在他们的设备上也可以考虑可访问性。

没有具体的考虑使老年人比一般人受益。但是老年人更有可能从无障碍功能中受益。确保你已经遵循了本书其他地方的指导方针,将意味着你的应用为老年用户提供了更好的体验。

性别与性

记得高中的时候学过基本数据类型。这个练习是为了创建一个数据捕获表单,供人们注册一个聚会。尽管要求在 Excel 电子表格中注册聚会的人不太可能有很多客人。我们将年龄存储为整数,将姓名存储为字符串,将性别存储为布尔值。从工程的角度来看,以这种方式存储性别从来都不是使用布尔值的好例子。

我们通常不应该将任何真实世界的值表示为布尔值。生活很少是二元的选择或决定。将自己限制在两个选项之内会限制未来重构的范围。虽然我见过用枚举来表示一个人的生活状态,但这是一个极端的例子。虽然这意味着一旦冬天不可避免地来临,重构夜王的死亡之军就不再是一个项目了。对于除了生与死之外的任何事情,我会推荐一个 enum,允许未来的变化。

其次,对于任何涉及身份的事情,只允许两种选择意味着对使用你的应用的人做出假设。无论你是主动还是被动做出这个选择,都是如此。这种对你的客户的假设可能是不正确的,你的许多用户不会因此而感谢你。

性别

性别是一个很好的例子,说明为什么使用布尔值来表示真实世界的值是一个坏主意。性别不是,也从来不是一个二元选择,但就在不久前,作为一个社会,我们认为它是这样的。因为这种社会规范,我们创造了许多软件来接受男性或女性的二元选择。

不管你个人的观点如何,有一个压倒一切的技术软件工程师的观点告诉我们这是一个糟糕的选择。通过将所有这些系统编程为使用不灵活的布尔值,当我们不可避免地改变我们系统的工作方式时,我们产生了大量的技术债务。在性别认同的例子中,社会要求我们改变系统的运作方式。这种变化现在需要后端数据库迁移和前端重新设计,以允许这种扩展的选择。

这里软件工匠的观点是,通过限制只有两个选择,我们排除了那些不区分性别的人。我们增加了他们被排斥的感觉,为他们参与社会制造了障碍。许多性别非二胎的人在青少年或年轻成年时被他们的家庭排斥,因此,在开始生活时就认为他们没有归属感。多达 48%的非未成年人承认试图自杀。允许人们在生活中向我们的软件表明自己的身份不仅仅是数据类型之间的决定。这是一个明确的信号,每个人都欢迎做真实的自己,不管是谁,他们都是我们社会的重要成员。这并不能阻止你的用户选择自己的性别。

存储性别

作为一个工程问题,在维护数据有效性的同时,一个解决方案是将性别存储为一个枚举。作为最基本的要求,我建议男性、女性和非二胎。

一个更具包容性的解决方案是将这些选项和更多选项作为自动完成建议显示在文本字段中。因此,我们允许人们输入他们自己的选项。

不要提供“其他”的第三个选项,或者在“其他”选项后面隐藏选项。“其他”是一个明确的信号,表明你认为不认同男性或女性的人不那么重要。当然,确保你的系统有一个选项来改变性别选项。

第三,也是更可取的选择,是考虑你为什么要捕捉性别。除非你的应用涵盖健康,否则我很难想出一个真正的理由来要求获取这些数据。

重要的是,记住性别≠代词。

代词

不要假设他/他和她/她的代词分别代表男性和女性。如果你遵循了我上面的建议,无论如何你都不会做出这样的假设。代词最好的选择可能是询问你是否需要它们。但是如果你的应用用代词指代你的客户,确保你提供的选项和性别选项是分开的。提供“他们/他们”选项,并允许您的客户根据需要更改他们的代词。

标题

当你的顾客认同时,提及他们是对他们最基本的尊重。这当然也适用于名称和代词,但对于标题,也有其他选择。

就我个人而言,我不喜欢被称为先生,更喜欢被直呼其名。许多人认为使用头衔是礼貌的,尤其是在你和你所称呼的人不友好的情况下。许多人理所当然地获得了博士、先生、上尉等头衔。,不允许这些选项可能是不尊重。不幸的是,由于产生这些头衔的现在有些过时的阶级制度,许多头衔是有性别区分的。对于那些没有性别区分的,确保不要假设性别。包括一个非性别的 Mx,也可能没有标题的选项。

首选名称

软件的一个常见要求是存储一个合法的或出生时的名字。例如,我们预计在人力资源、银行或政府服务的软件中需要“真实”的名字。但是对于我们来说,想要以不同的方式为人所知并不罕见。我喜欢别人叫我罗伯,但我的护照上写的是罗伯特。这可能会给我在通过工作预订国际旅行时带来问题,因为系统会自动以 Rob 的名义预订所有东西。

对我来说,能够将我的名字和我喜欢的名字分开,只是一种便利。我既不用让同事叫我罗伯,也不用修改旅行预订来匹配我的护照。但对许多人来说,这是他们身份的重要组成部分。对于任何已经或正在改变身份的人来说,被一个他们不再认同的名字所知会令人非常不安。

代词项目的 Chelsea Hostetter 观察到“实名”政策会增加歧视,特别是在某人可能倾向于一个群体而不是另一个群体的情况下。脸书对他们认为没有使用“真实”姓名的账户进行标记的政策会让那些被标记的人感觉像是骗子。

允许你的客户用他们觉得舒服的名字来称呼,并允许他们在需要的时候改变这个名字。可能有些应用需要出生或法定姓名,但只在必要时收集和使用这些信息。

骚扰

这一部分同样适用于社会中的任何少数群体,实际上也适用于本书中的任何类别。我选择把它放在这里,因为性别和性,不幸的是,提供了技术如何使骚扰成为可能的最鲜明的例子。

同性恋交友应用 Grindr 被专制政权用来识别,在某些情况下,追捕 LGBTQ+社区的成员。 33 在英国,Grindr 等 app 被连环杀手斯蒂芬·波特用来引诱他的受害者。 34

现实是严峻而简单的。如果你的应用为你的用户提供了任何与他人互动的方式,你的应用可以,也将会被用于骚扰,不管你的应用的主要目的是什么。有这样的例子,像 Square 35 和 PayPal 36 这样的金融应用被用来通过发送小额资金和短信来骚扰人们。在任何可能进行个人交互的地方,阻塞机制都是必不可少的。你可能还需要一个审核和报告系统。所有这些都意味着我们需要彻底考虑在我们的应用中增加用户交互的决定及其后果。

耳聋和听力损伤

智能手机主要是一种视觉媒介。因此,在开发应用时,很容易忘记考虑听力障碍。尤其是如果你的应用不使用音频,你可能会认为听力障碍根本不是你要考虑的问题。但是这里有一些事情需要考虑。

清除内容

语言是复杂的,在人脑中是相互联系的。我们没有,也可能永远不会完全意识到我们对语言的使用和理解是如何发展的。这就是说,耳聋的人可以通过其他方式进行补偿,例如,高标准的文化水平,这可能是一种常见的误解。由于几个原因,情况往往不是这样。失去听力语言的语境会阻碍学习读写技能。还要记住,对于喜欢手语的聋人来说,口语或书面语永远是第二语言。因此,你应该总是喜欢清晰,简洁的语言,有逻辑的布局,没有成语和谚语。

字幕

如果你的应用以任何方式使用音频,你应该总是以一种形式提供标题。你可以以最简单的方式提供字幕作为单独可用的抄本。理想情况下,在你的视频中嵌入隐藏字幕,就像我们在前面章节中提到的那样。

请记住,这同样适用于音频内容,而不仅仅是视频。举例来说,如果你的应用包括语音旁白,比如一个游戏,你也应该给这些加上标题。此外,最适合游戏,不要依赖您的客户来确定音频发出的方向。如果你的游戏向左移动声音来暗示左边有坏人,也要提供视觉提示。

身体和运动技能

正如我们所提到的每一种损伤一样,身体和运动损伤涵盖了各种各样的能力。这包括从丢失一个手指从而使多点触摸手势变得更难,到只有最小的移动。在晚年,斯蒂芬·霍金只能通过一块脸颊肌肉活动,但却能操作电脑,这是出了名的。像任何用户一样,您的身体有障碍的客户会喜欢您的用户界面的简单性。

精确

不要坚持你的客户的准确性;所有交互元素在每个方向的最小尺寸都应该是 44 像素。谷歌建议 Android 上的交互元素至少应为 48 像素。重要的是,记住也要分开交互元素,这样可以防止意外输入。

键盘和开关访问

测试您的应用是否适合每个平台的交换机访问功能。有两个常见的陷阱需要注意。

不幸的是,网络上的一个普遍现象是“键盘陷阱”使用 tab 键导航时会出现键盘陷阱。可以导航到某个项目,但不能再次导航离开。我还没有在移动平台上常见到这种情况,但它确实发生了。在手机上,这也可能发生在开关控制和屏幕阅读器上。

第二,保证元素的逻辑导航顺序。当您在没有启用切换控制的情况下通读页面上的元素时,您是按照切换控制功能的顺序通读的吗?可访问性差的应用会导致键盘高亮在屏幕上跳来跳去。这种随机的运动充其量是令人沮丧的。

这两个平台都可以通过外部键盘输入进行导航,无需客户进行任何激活。然而,iOS 确实需要一些标准功能的帮助,比如分页。开源项目 KeyboardKit 38 应该对此有所帮助。在可能的情况下,也实现键盘快捷键。

超时设定

有运动障碍的人可能会因为许多原因而难以与他们的设备进行交互。双手稳定地使用智能手机几乎总是比任何形式的灵活性下降的人都快,无论是手指或四肢缺失,帕金森氏症等导致颤抖的情况,还是使用开关或语音控制的严重受限时刻的人。要求客户在特定时间内采取行动将给有汽车问题的客户带来巨大压力。

取消任何不必要的时间限制。例如,当您需要为客户的安全设置时间限制或防止拒绝服务时,请确保在维护安全性的同时尽可能延长时间限制。如果时间限制即将到期,保存进度并通知您的客户时间限制即将结束。向他们提供延长或更新时间限制的选项,并从他们停止的地方开始。

快捷指令

尽可能提供快捷方式。快捷方式可以绕过应用的公共区域,或者是填写表单的更直接的方式。举个例子,如果你的应用处理电子商务,你需要每个订单的送货和账单地址。让你的客户为他们的每个订单完整地填写这两个地址是失去任何回头客的最好方法。但是对于那些觉得与你的应用交互是一件苦差事的人来说,这不仅仅是一个小挫折。此处的解决方案包括让您的客户复制帐单和送货地址,使用邮政编码或邮政编码查找工具,以及允许回头客保存地址以备后用。

自动化

对于身体有缺陷的人来说,任何运动都是昂贵的。根据个人的障碍,这可能包括从穿过房间到打开电灯开关,再到在智能手机屏幕上导航。因此,任何减少运动需求的东西都是可取的。自动化是一个非常好的工具。除了自动化智能家居之外,我们还可以利用自动化让我们的应用内和应用间的日常任务无需触摸。

在 Android 中,谷歌提供了应用操作。应用操作允许特定类别的应用连接到谷歌助手,这意味着只需一个语音命令就可以快速访问日常活动。

对于 iOS,苹果通过 Siri 快捷方式为此提供了一个梦幻般的框架。Siri 的意图是让你的客户不仅可以通过单一的语音命令控制你的应用,还可以通过快捷方式应用将活动链接在一起。然后,客户可以通过一次点击、语音命令甚至外部触发(如时间、位置或点击 NFC 标签)来触发快捷方式。

视觉障碍

可调整的文本大小和屏幕阅读器支持对于包含有视觉障碍的人是必不可少的。支持客户选择的文本大小是任何移动应用的重中之重。如果你没有听这个设置,或者如果你正在以较大的尺寸截断或重叠文本,你需要重新考虑你的一些开发过程。假设你已经支持这一点,其他声音设计原则将有助于包括那些有任何类型的视觉障碍。

小心使用颜色

颜色是一种快速传达意义的强大方式,但不是每个人都以同样的方式体验它。有些人对颜色的感知有缺陷,很难区分。一些视力模糊或受损的人会发现相近的颜色会相互融合。在应用中选择何时、何地、如何以及使用什么颜色是至关重要的,你选择的颜色要足够不同,以便于确定。万维网联盟的网页内容可访问性指南(第三章)建议文本与其背景的对比度应为 4.5:1,或者对于 18pt 左右或更大的大文本为 3:1。为了更好地符合 WCAG,目标是 7:1 的对比度。

记住不要仅仅依靠颜色来传达意思。虽然这是展示地位的好方法,但绿色或红色的高光并不是每个人都能看到的。还要记住,不同的颜色在不同的文化中有不同的含义。总是将颜色与形状或文本结合起来,这样你就有了一种冗余的方式来呈现信息。记得给对讲和画外音加个有意义的标签。

有许多检查对比度的在线工具,但我推荐从 Paciello Group 下载免费的彩色对比度分析器(CCA)(图 12-6 )应用。 39 CCA 允许您以多种格式输入颜色,包括十六进制和 RGB,或者您可以使用吸管工具选择一种颜色,并使用滑块调整它们。然后,CCA 将向您展示一个您选择的文本和图标颜色组合的示例,并指出您的组合符合哪个 WCAG 规则。然而,检查你与真人的对比是至关重要的,因为即使是一些及格的组合对一些人来说也不够高。此外,文本越小,所需的比率越高。

img/486920_1_En_12_Fig6_HTML.jpg

图 12-6

Paciello 集团的免费色彩对比分析软件

逻辑布局

为你的应用设计一个好的 UX 会给有视觉障碍的人带来很大的不同——以流畅、逻辑、线性的布局呈现内容。目标是保持内容以自然的方向呈现——对于大多数语言来说是从左到右。缩放或放大用户将从自然阅读侧导航您的应用,这意味着他们可能会错过任何从右侧呈现的内容。如果您在文本旁边显示状态图标,请考虑这一点。如果你的图标在文本的右边,放大用户可能永远不会意识到这个状态指示器的存在。

使用我们在 Android 的第四章和 iOS 的第六章中讨论的语义视图技术将相关控件链接在一起。链接元素将有助于增加控件的上下文,同时使导航更加直观。

种族和国籍

种族是一个很好的例子,说明了为什么在我们的发展过程中让不同背景的人参与进来是很重要的。确保您的团队包括来自不同国家和文化的优秀工程师。这样,你会更多地了解你对使用你的应用的人的无意识假设。

机器学习

不幸的是,机器学习为我们提供了一些缺乏多样化思维可能适得其反的鲜明例子。机器学习是另一种适合我们在本章讨论的任何类别的技术。但是种族显然是一个领域,机器学习已经被证明是麻烦的。

2017 年,人工智能自拍应用 FaceApp 因使用未经检查的刻板印象而陷入了几次争议。他们提供的一个过滤器改变了你的脸,让你看起来像一个不同的种族。虽然我们大多数人可能会质疑这种形式的数字黑脸是不是一个好主意,但直到用户告诉他们之后,FaceApp 才知道。

在更早的一次事件中,FaceApp 取消了一个旨在让其用户看起来更有吸引力的过滤器。所谓的热度过滤器是一种机器学习模型,可以对你的脸进行变换。该模型将这些转变建立在它对被告知“性感”的人的了解上。这导致模型使人们的肤色变亮。FaceApp 首席执行官雅罗斯拉夫·冈查罗夫告诉 TechCrunch:

这是由训练集偏差引起的底层神经网络的不幸副作用,而不是有意的行为。

—FaceApp CEO 雅罗斯拉夫·冈查罗夫,TechCrunch 41

机器学习模型确实是一个令人担忧的原因。但这不能怪模特。尽管大肆宣传,机器学习和任何其他计算机系统一样,是我们输入的产物。因此,机器学习模型的一个重要功能是揭示我们的偏见。在 FaceApp 的案例中,训练模特的小组根据欧洲的理想选择了美女。

虽然 FaceApp 的例子引起了苦恼和冒犯,但有些例子更进一步。美国法院使用的机器学习系统通常会建议对黑人罪犯判处比白人罪犯更长的刑期。 42 机器学习模型的黑箱性质加剧了这个问题。测试或审计为什么一个模型会做出它所拥有的决定是不可能的。

机器学习也是一项令人难以置信的技术,它帮助推动了移动应用中许多最令人兴奋的新功能。如果没有它,我们在 FaceApp、Snapchat 和 Instagram 中看到的图像处理过滤器就不可能实现,自然语言处理也不可能实现语音控制和语音访问等辅助功能。如果你选择在你的应用中使用机器学习模型,请仔细考虑应用。对你的数据有信心,并在开始之前尝试理解你的数据的偏差。尽可能多地测试,以发现你的模型在哪里检测到了你隐含的、无意识的偏见。你的模型甚至可以帮助你改进你的数据收集。

本地化

本地化是一个巨大的话题。我们在前面的章节中介绍了本地化语言应用的基础知识。但是本地化是一本新书的主题。除了翻译文本,记住从右到左语言要求你考虑应用的布局,包括 UX 设计和如何在应用中构建设计。使用流动布局来适应不同的元素大小会有所帮助。请记住,不同地区的格式是不同的。生活在英国,我经常在预订去美国的旅行时感到困惑,不得不反复检查我是否输入了正确的日期月份和日期顺序。如果预订应用检测到我的位置,这将减少我的预订体验的压力。

即使你的应用只在单一市场可用,我们生活在一个全球化的社会中。2017 年,美国人口普查局发现,近 22%的美国人在家里说英语以外的语言。大约有 7000 万美国人可能会发现,如果你的应用有另一种语言可供他们使用,使用起来就不会那么复杂。

发展无障碍和包容性

我真诚地感谢你选择拿起我的书,不仅因为这本书对我个人意义重大,还因为当人们想了解更多关于移动可访问性和包容性的信息时,我总是很兴奋。作为塑造现代世界运作和进步方式的人,我们拥有特殊的地位。我们有其他领域的同事没有的机会。如果一座只有台阶的建筑发现人们无法进入,更换台阶是一项大工程。在软件中,我们可以快速识别和修复类似的问题。然后,我们可以在应用审查所需的时间内将改进后的软件交到客户手中。

希望有了这些新知识,你可以开始识别应用中潜在的可访问性问题。当你获得更多的知识时,请在你获得自信时把它传递下去。安排研讨会,或者在午餐和学习会议上发言。对于较大的团队,考虑开始一个实践项目的可访问性社区。分享潜在问题和解决方案只会为您的客户带来更好的结果。

从我的经验来看,我们的大多数开发伙伴都对可访问性感兴趣,并希望做正确的事情。他们有时只是缺乏如何做到这一点的知识。

A11y 社区

就像整个 iOS 和 Android 社区一样,有一个充满活力和专注的数字无障碍社区。这个社区一般使用缩写 A11y。我们从 accessibility 中取出 A 和 Y,11 指的是中间的 11 个字母。这也为 ally 创造了一个令人愉快的谐音。这个首字母缩略词也有助于区分热衷于无障碍技术的人和使用无障碍功能的人。如果你想了解更多关于无障碍技术社区的信息,试着在 Twitter 或 LinkedIn 上搜索#A11y。我有一个 Twitter 账号@MobileA11y,用来分享与移动相关的可访问性内容。

聚会和会议

A11y 社区举办了一系列讨论最佳实践和进步的会议。当你遇到一个特别棘手的可访问性 bug 时,这些地方是扩展你的知识和会见专家询问更多信息的好地方。我还在一次活动中获得了学习英国手语的机会。

世界各地有许多关于无障碍的聚会和会议,但我参加过,并强烈推荐英国的无障碍伦敦 44 和无障碍诺丁汉 45 。虽然我没有机会参加,但移动辅助功能专家 Paul J. Adam 是德克萨斯州奥斯汀市奥斯汀辅助功能和包容性设计会议的组织者。移动无障碍专家 Jon Gibbins 是英国布里斯托尔布里斯托尔包容性设计和开发会议的组织者。

在英国爱丁堡,有一个为期一天的无障碍会议,会上有一些发人深省的演讲。你可以在他们的博客上找到这些演讲的视频、文字记录和幻灯片。 49

Footnotes 1

“如何用简明英语写作”,简明英语运动。 http://www.plainenglish.co.uk/how-to-write-in-plain-english.html 。2019 年 11 月 20 日访问

  2

“暗图案的类型”,暗图案。 https://www.darkpatterns.org/types-of-dark-pattern 。2019 年 11 月 20 日接入。

  3

Mathur,Arunesh 等人《大规模的黑暗模式》美国计算机学会人机交互会议录 3。CSCW (2019 年)。 https://arxiv.org/pdf/1907.07032.pdf

  4

普莱斯凯瑟琳。“放下手机可能有助于长寿”。《纽约时报》2019 年 4 月 24 日。 www.nytimes.com/2019/04/24/well/mind/putting-down-your-phone-may-help-you-live-longer.html

  5

凯文·卢斯,“请勿打扰:我是如何扔掉手机和打破我的大脑的”。《纽约时报》2019 年 2 月 23 日。https://www.nytimes.com/2019/02/23/business/cell-phone-addiction.html

  6

埃莉诺·琼斯,“手机影响焦虑的 5 种方式”。Cosmopolitan,2018 年 2 月 14 日。www.cosmopolitan.com/uk/body/health/a17851630/mobile-phone-affecting-anxiety-mental-health/

  7

柏拉图,Phaedrus。雅典,360 欧洲央行。 http://classics.mit.edu/Plato/phaedrus.html

  8

noi,Beryl 等人,“通过用户-应用交互识别智能手机成瘾指标”。人类行为中的计算机,第 99 卷。2019 年 10 月第 56-65 页。www.sciencedirect.com/science/article/pii/S0747563219301712

  9

Bélanger,Richard E .等人,“互联网使用强度和青少年健康之间的 U 型关系”。《儿科》,第 127 卷,第 2 期。2011 年 2 月。https://pediatrics.aappublications.org/content/127/2/e330

  10

noi,“通过用户-应用交互识别智能手机成瘾指标”

  11

“突出人在哪里”,为心理健康设计模式。2019 年 11 月 20 日接入。www.designpatternsformentalhealth.org/pattern-library/highlight-where-people-are

  12

“Monzo:将良好的心理健康设计到我们的银行方式中”,设计委员会。2019 年 11 月 20 日访问。www.designcouncil.org.uk/news-opinion/monzo-designing-good-mental-health-way-we-bank

  13

“Monzo:将良好的心理健康设计到我们的银行方式中”,设计委员会。

  14

“积极更新”,为心理健康设计模式。2019 年 11 月 20 日访问。www.designpatternsformentalhealth.org/pattern-library/positive-update

  15

“不附带任何条件”,为心理健康设计模式。2019 年 11 月 20 日访问。www.designpatternsformentalhealth.org/pattern-library/no-strings-attached

  16

“即时支持”,心理健康设计模式。2019 年 11 月 20 日访问。www.designpatternsformentalhealth.org/pattern-library/immediate-support

  17

noi,“通过用户-应用交互识别智能手机成瘾指标”

  18

理查德. h .泰勒卡斯. r .桑斯坦。"推动:改善关于健康、财富和幸福的决定."2009.

  19

约翰·布朗利,“为患有严重精神疾病的人设计一个应用。”快公司,2016 年 3 月 17 日。www.fastcompany.com/3057872/designing-an-app-for-people-with-severe-mental-illness

  20

Draycott,Richard,“游戏化是 Duolingo 成功的关键,产品经理 Gilani 在 Canvas 会议上说”。鼓,2016 年 10 月 26 日。www.thedrum.com/news/2017/10/26/gamification-the-key-duolingo-success-says-product-manager-gilani-canvas-conference

  21

诺,“通过用户-应用交互识别智能手机成瘾的指标。”

  22

“被锁在外面:智能手机赤字”,苏格兰公民建议。2018 年 8 月。www.cas.org.uk/publications/locked-out-smartphone-deficit

  23

约翰埃文。托马斯格雷格。,和 Touchet,Anel。“2019 年残疾价格标签”2019 年 2 月。www.scope.org.uk/campaigns/extra-costs/disability-price-tag/

  24

“残疾人:劳动力特征总结”美国劳动局。2019 年 2 月 26 日。统计数据。www.bls.gov/news.release/disabl.nr0.htm

  25

“劳埃德银行英国消费者数字指数 2018”劳埃德银行。2018 年 5 月。https://www.lloydsbank.com/assets/media/pdfs/banking_with_us/whats-happening/LB-Consumer-Digital-Index-2018-Report.pdf

  26

“基本数字技能框架”,教育部。2019 年 4 月 23 日。www.gov.uk/government/publications/essential-digital-skills-framework/essential-digital-skills-framework

  27

“劳埃德银行英国消费者数字指数 2018”劳埃德银行。

  28

凡·格默特,瓦西里斯,“独家设计”。2019 年 11 月 20 日接入。https://exclusive-design.vasilis.nl

  29

“劳埃德银行英国消费者数字指数 2018”劳埃德银行。

  30

“老龄化”,联合国。2019 年 11 月 20 日接入。www.un.org/en/sections/issues-depth/ageing/

  31

哈萨宁,罗基亚。"新的研究揭示了跨性别青少年中令人震惊的自杀未遂率."人权运动。2018 年 9 月 12 日。www.hrc.org/blog/new-study-reveals-shocking-rates-of-attempted-suicide-among-trans-adolescen

  32

霍斯特,切尔西。代词项目“为所有性别设计”。2018 年 3 月 4 日。the prounprojec t . com/blog/2018/3/4/design-for-all-gender

  33

约瑟夫·麦考密克。“埃及警方用 Grindr 引诱男同性恋去酒店房间”,Pink News。2017 年 10 月 29 日。www.pinknews.co.uk/2017/10/29/egyptian-police-use-grindr-to-lure-gay-men-to-hotel-rooms/

  34

“斯蒂芬·波特:谋杀四人的连环杀手”,BBC 新闻。2016 年 11 月 23 日www.bbc.co.uk/news/uk-england-38077859

  35

安娜·玛丽·克利夫顿。推特帖子。2016 年 10 月 22 日。https://twitter.com/TweetAnnaMarie/status/789957313649967104

  36

九个。推特帖子。2016 年 10 月 4 日。https://twitter.com/supernowoczesna/status/790359673702457344

  37

对聋人教育中基于证据的读写能力研究的检查,《美国聋人年鉴》,第 150 卷,第 5 期。2005/2005.www.uv.es/infabra/Luckner%202005%2006%20AN%20EXAMINATION%20OF%20THE%20EVIDENCE-BASED.pdf

  38

https://github.com/douglashill/KeyboardKit

  39

可在 https://developer.paciellogroup.com/resources/contrastanalyser/ 下载 Mac 或 PC 版。

  40

赫恩,亚历克斯。“FaceApp 被迫删除允许‘数字黑脸’的‘种族主义’过滤器”。《卫报》,2017 年 8 月 10 日。www.theguardian.com/technology/2017/aug/10/faceapp-forced-to-pull-racist-filters-digital-blackface

  41

娜塔莎·洛马斯。“FaceApp 为构建种族主义 AI 道歉”Tech Crunch,2017 年 4 月 25 日。https://techcrunch.com/2017/04/25/faceapp-apologises-for-building-a-racist-ai/

  42

利普塔克亚当。“被一个软件程序的秘密算法送进监狱”。《纽约时报》。2017 年 5 月 1 日。www.nytimes.com/2017/05/01/us/politics/sent-to-prison-by-a-software-programs-secret-algorithms.html

  43

美国人口普查局,“各州和地方收入、贫困和健康保险的新美国社区调查统计”。2017 年 9 月 14 日。www.census.gov/newsroom/press-releases/2017/acs-single-year.html

  44

www.meetup.com/London-Accessibility-Meetup/

  45

www.accessibilitynottingham.co.uk

  46

www.meetup.com/a11yATX/

  47

www.meetup.com/Bristol-Inclusive-Design-and-Development/

  48

https://accessibility.scot

  49

https://accessibility.scot/blog/