iOS
voiceover

VoiceOverで突く脆弱性

はじめに

若干センセーショナルなタイトルになりましたが、VoiceOver時に問題になりそうな挙動をまとめてます。

ニュースアプリ

例えばこんなニュースアプリがあるとします。
IMG_3147.PNG

ニュースのタイトルだけはみられるけど、
記事に関してはユーザーにログインをしてもらう、というアプリです。

当然アプリ開発者としては「ログイン」をしなければ記事を見られないようにする、
という意味合いで灰色のViewを置いて記事を覆っているのですが、
この場合VoiceOverをOnにすると、

IMG_3146.PNG
普通に記事にフォーカスが当たり、ログインせずにニュースの内容が読み上げられます。

この場合、ログインの有無によって記事のisAccessibilityElementの状態を切り替えるべきでしょう。

課金型アプリ

例えばこんな漫画アプリがあるとします。
IMG_3150.PNG

「次のページ」ボタンを押すと次のページへ進めるのですが、次のページへ進むにはポイントが必要で、
ユーザーに購入を促している状態ですね。
ポイントがない場合は画面全体をViewでガードして「次のボタン」を押せなくしてポイント購入を待っている状態です。

IMG_3151.PNG
VoiceOverをOnにすると「次のページ」ボタンにフォーカスが当たります。

ただ、この例のように、ボタン上にViewがオーバーレイしている場合、
フォーカスを当てた状態でダブルタップしても、ボタンの処理は起こりません。
なので、課金処理をスルーして次のページに遷移してしまうことは起こりません。
(厳密にいうと、User Interaction Enabledの状態によってボタンの処理が起こるかが決まります)

ただVoiceOverユーザーにとっては、「次のページ」ボタンにフォーカスをしただけでは何故押せないか分からないので、
「次のボタン」のaccessibilityHintに「ポイントの購入が必要です」などの情報付与が必要でしょう。

まとめ

ということで、Viewをオーバーレイして見えなくしても、タップさせなくしても、オブジェクトがあることはVoiceOverで分かります。
一度開発中のアプリをvoiceOver ONで動作させてみることをお勧めします。