Ga naar hoofdinhoud

Native versus cross-platform frameworks om toegankelijke apps te ontwikkelen

Het is belangrijk om toegankelijkheid in overweging te nemen bij het ontwikkelen van een app. Meer dan 1 miljard mensen in de wereld hebben een beperking. En 50% van alle mensen maakt gebruik van toegankelijkheidsfuncties op hun mobiele apparaten.

Een vraag die ons vaak wordt gesteld, is: "Welk framework moet ik kiezen om een toegankelijke app te ontwikkelen?"

In dit artikel vergelijken we de voor- en nadelen van Android, iOS, Flutter, React Native en Xamarin. En we hebben ook Web-equivalenten toegevoegd. Op het eind wordt een conclusie getrokken.

1. Oriëntatie

Apps dienen meerdere oriëntaties (staand en liggend) te ondersteunen om ervoor te zorgen dat gebruikers hun apparaten op de gewenste manier kunnen vasthouden.

Screenshot of an app in landscape mode, the layout has changed to two columnsScreenshot of an app in landscape mode, the layout has changed to two columns
FrameworkFunctieVoordelenNadelen
Androidandroid:screenOrientationAlle oriëntaties staan standaard aan
iOSUISupportedInterfaceOrientationsDe 'Upside Down' oriëntatie is standaard uitgeschakeld
FluttersetPreferredOrientationsFlexibel
React Nativeexpo-screen-orientation or nativeFlexibel
XamarinDevice Orientation or nativeFlexibel
Web@media queryUitgebreide mogelijkheden

2. Tekstvergroting

Apps dienen tekstvergroting te ondersteunen, zodat gebruikers tekst kunnen lezen in de gewenste lettergrootte.

Screenshot of an app with increased font size, none of the text is truncatedScreenshot of an app with increased font size, none of the text is truncated
FrameworkFunctieVoordelenNadelen
AndroidScale-independent Pixels (sp)Schaalt automatisch
iOSUIFontMetricsEigen vergroting logica implementeren
FlutterfontSizeSchaalt automatisch
React NativefontSizeSchaalt automatisch
XamarinSetEnableAccessibilityScalingForNamedFontSizesEigen vergroting logica implementeren
Web(r)em unit / Browser zoomSchaalt automatisch

3. Contrast

Apps dienen voldoende contrast te hebben, zodat gebruikers tekst kunnen lezen en interface-elementen kunnen onderscheiden.

Screenshot of an app, text colors are picked using a color picker, the contrast ratio is 4,77:1Screenshot of an app, text colors are picked using a color picker, the contrast ratio is 4,77:1
FrameworkFunctieVoordelenNadelen
AndroidColor
iOSColorIngebouwde ondersteuning voor hoog contrast
FlutterColor
React NativeColor
XamarinColor
Web<color>

4. Naam

Apps dienen een toegankelijke naam te verstrekken voor interactieve elementen, zodat gebruikers van ondersteunende hulpmiddelen ze kunnen identificeren.

Screenshot of an app with Voice Control enabled, numbers and labels are indicated by tooltipsScreenshot of an app with Voice Control enabled, numbers and labels are indicated by tooltips
FrameworkFunctieVoordelenNadelen
AndroidcontentDescriptionFlexibel
iOSaccessibilityLabelFlexibel
FluttersemanticsLabelFlexibel
React NativeaccessibilityLabelFlexibel
XamarinAutomationProperties.NameFlexibel
Webaria-labelFlexibel

5. Rol

Apps dienen een toegankelijke rol te verstrekken voor elementen, zodat gebruikers van ondersteunende hulpmiddelen hun bedoeling begrijpen.

Screenshot of an app showing that the role of elements has been marked for assistive technologiesScreenshot of an app showing that the role of elements has been marked for assistive technologies
FrameworkFunctieVoordelenNadelen
AndroidsetRoleDescription or setClassNameAanpasbare rollen
iOSaccessibilityTraitsGeen aanpasbare rollen
FlutterSemantics → roleGeen aanpasbare rollen
React NativeaccessibilityRoleGeen aanpasbare rollen
XamarinSemanticEffectsetDescriptionExterne bibliotheek, maakt gebruik van contentDescription
Webrole / aria-roledescriptionAanpasbare rollen

6. Waarde

Apps dienen een toegankelijke waarde te verstrekken voor elementen, zodat gebruikers van ondersteunende hulpmiddelen op de hoogte zijn van hun huidige waarde.

Screenshot of an app showing that a selected item has been marked as selected for assistive technologiesScreenshot of an app showing that a selected item has been marked as selected for assistive technologies
FrameworkFunctieVoordelenNadelen
AndroidAccessibilityNodeInfoCompatBeperkte keuze uit waardes
iOSaccessibilityValueFlexibel
FlutterSemantics → valueFlexibel
React NativeaccessibilityValueFlexibel
XamarinNiet ondersteundWaarde kan niet ingesteld worden
Webaria-valuenow / aria-valuetextFlexibel

7. Status

Apps dienen een toegankelijke status te verstrekken voor elementen, zodat gebruikers van ondersteunende hulpmiddelen op de hoogte zijn van hun huidige status.

Screenshot of an app announcing a status message for screen reader users when loading or when errors are displayedScreenshot of an app announcing a status message for screen reader users when loading or when errors are displayed
FrameworkFunctieVoordelenNadelen
AndroidsetStateDescription and AccessibilityNodeInfoCompatFlexibelVereist Android 11 (API 30)
iOSaccessibilityTraitsBeperkte opties
FlutterSemantics → stateBeperkte opties
React NativeaccessibilityStateBeperkte opties
XamarinNiet ondersteundStatus kan niet ingesteld worden
WebARIA states, e.g. aria-selectedUitgebreid

8. Focusvolgorde

Apps dienen een logische focusvolgorde te bieden, zodat gebruikers van ondersteunende hulpmiddelen efficiënt kunnen navigeren.

Screenshot of an app, showing the focus order using numbers displayed by Voice ControlScreenshot of an app, showing the focus order using numbers displayed by Voice Control
PlatformFunctieVoordelenNadelen
AndroidsetAccessibilityTraversalBefore/AfterIndividuele aanpassingTwee functies voor één doel
iOSaccessibilityElementsVolledige controleIndexering up-to-date houden
FlutterSemanticsSortKeyFlexibel
React NativeNiet ondersteundVolgorde kan niet aangepast worden
XamarinTabIndex and IsTabStopFlexibelIndexering up-to-date houden
WebtabindexFlexibelIndexering up-to-date houden

9. Focusverplaatsing

Apps dienen de focus van ondersteunende hulpmiddelen te kunnen verplaatsen, zodat gebruikers op het juiste element terechtkomen.

Screenshot of an app showing two scenarios where you might forcefully move the focus of assistive technologies, e.g. after scanning a QR-code or entering a pincodeScreenshot of an app showing two scenarios where you might forcefully move the focus of assistive technologies, e.g. after scanning a QR-code or entering a pincode
PlatformFunctieVoordelenNadelen
AndroidAccessibilityEventTYPE_VIEW_FOCUSED
iOSUIAccessibility.NotificationscreenChanged of layoutChangedTwee soorten
FlutterNiet ondersteundFocus kan niet verplaatst worden
React NativesetAccessibilityFocus
XamarinSemanticExtensionsSetSemanticFocusExterne bibliotheek
Webtabindex / focus()Meerdere opties

10. Statusberichten

Apps dienen belangrijke interfacewijzigingen te communiceren aan ondersteunende hulpmiddelen, zodat gebruikers op de hoogte zijn van gebeurtenissen.

Screenshot of an app announcing a status message for screen reader users when loading or when errors are displayedScreenshot of an app announcing a status message for screen reader users when loading or when errors are displayed
PlatformFunctieVoordelenNadelen
AndroidAccessibilityEventTYPE_ANNOUNCEMENT
of
View.announceFor Accessibility
Twee opties
iOSUIAccessibility.NotificationannouncementMakkelijk
FlutterSemanticsServiceannounceEenvoudig
React NativeAccessibilityInfoannounceForAccessibilityEenvoudig
XamarinSemanticExtensionsAnnounceEenvoudigExterne bibliotheek
Webaria-liveMinder controle

Conclusie

Dus, welk framework raden we aan voor de ontwikkeling van toegankelijke apps? Native frameworks bieden de beste ondersteuning voor toegankelijkheid.

Het is misschien niet haalbaar om twee codebases en twee ontwikkelingsteams te onderhouden. Cross-platform frameworks zijn gelukkig bezig om hun ondersteuning voor toegankelijkheidsfuncties uit te breiden.

Maar let op, bij het gebruik van cross-platform frameworks heb je mogelijk geen toegang tot bepaalde toegankelijkheidsfuncties vanwege abstractielagen. Indien je de meest toegankelijke app wilt ontwikkelen, dan is native altijd de beste keuze.

FrameworkScoreOordeel
Android100%Volledige ondersteuning
iOS100%Volledige ondersteuning
Web100%Volledige ondersteuning
Flutter90%Goede ondersteuning, focus verplaatsing ontbreekt
React Native90%Goede ondersteuning, volgorde aanpassen ontbreekt
Xamarin50-80%Matige ondersteuning, status/waarde ontbreekt, vereist externe bibliotheken.

Bekijk onze uitgebreide documentatie voor aanvullende informatie:

  • Android logo (light)Android logo (light)

    Android accessibility

    Android heeft een toegankelijkheidslaag die gebruikers helpt om hun Android toestel te gebruiken. Door toegankelijkheidsfuncties te integreren, kun je de bruikbaarheid van jouw app verbeteren, met name voor gebruikers met een beperking.

    Leer over Android accessibility
  • iOS logo (light)iOS logo (light)

    iOS accessibility

    iOS heeft ingebouwde toegankelijkheidsfuncties, toegankelijkheids-API's en ontwikkelaarstools die een buitengewone kans bieden om elke gebruiker, waaronder met een beperking, een superieure mobiele ervaring te bieden.

    Leer over iOS accessibility
  • Flutter logo (light)Flutter logo (light)

    Flutter accessibility

    Flutter zet zich in om ontwikkelaars te ondersteunen bij het toegankelijker maken van hun apps. Er is ingebouwde ondersteuning voor toegankelijkheidsfuncties van het onderliggende besturingssysteem.

    Leer over Flutter accessibility
  • React Native logo (light)React Native logo (light)

    React Native accessibility

    React Native heeft toegankelijkheids-API's waarmee je jouw app geschikt kunt maken voor alle gebruikers. Je kunt apps integreren met ondersteunende technologieën zoals de bijvoorbeeld de schermlezers VoiceOver en TalkBack.

    Leer over React Native accessibility
  • .NET MAUI logo.NET MAUI logo

    .NET MAUI accessibility

    .NET MAUI has built-in semantics for accessibility and includes support for accessibility features, allowing developers to build inclusive apps.

    Leer over .NET MAUI accessibility
  • Xamarin logo (light)Xamarin logo (light)

    Xamarin accessibility

    Xamarin heeft functies om apps te ontwikkelen die goed werken met toegankelijkheidsfuncties van het besturingssysteem, zoals groot lettertype, hoog contrast, inzoomen, schermlezer, visuele of haptische feedback en alternatieve invoermethoden.

    Leer over Xamarin accessibility

Credits

Dit artikel is een aangepaste versie van de presentatie die Jan Jaap de Groot gaf op de #id24-conferentie op 21 september 2023. Je kunt de presentatie terugkijken voor uitgebreide informatie over dit onderwerp.

Video: Jan Jaap de Groot / Native mobile accessibility testing #id24 2023 Video: Jan Jaap de Groot / Native mobile accessibility testing #id24 2023