Google hotar att ta bort appar med tillgänglighetstjänster från Play Butik

Google skickar e-postmeddelanden som varnar utvecklare att inte använda tillgänglighetstjänster utanför avsedd användning, annars kommer deras appar att tas bort från Play Butik.

Uppdatering: LastPass har precis svarade till denna nyhet och säger att det inte kommer att bli "ingen omedelbar påverkan" för deras Android-appar. Huruvida detta innebär att andra ansökningar kommer att beviljas eftergift återstår att se.

Några av de mest innovativa applikationerna i Play Butik bygger på att använda API: er på sätt som Google aldrig hade tänkt sig. Det finns appar som kan mappa om dina volymknappar för att hoppa över musikspår, spela in och spela upp pekingångar på webbsidor eller spel, och till och med tillhandahålla alternativa navigeringsknappar så att du kan använda hela enheten skärm. Alla dessa exempel som jag just har nämnt är beroende av Androids tillgänglighets-API: er. Men det kanske snart ändra, eftersom Google Play Butik-teamet skickar ut e-postmeddelanden till utvecklare och berättar att de kan

implementerar inte längre tillgänglighetstjänster om de inte följer Googles riktlinjer.


Vad är en tillgänglighetstjänst?

För att förstå varför detta är viktigt måste vi först förklara vad tillgänglighet är i förhållande till Android. I allmänhet avser tillgänglighet till att göra en Android-app mer tillgänglig för användare med vissa funktionsnedsättningar, till exempel de som är synskadade. Även om det ligger i alla utvecklares bästa att göra sina appar mer tillgängliga för användare med funktionshinder, finns det en speciell klass av applikationer som är utformade för att förbättra användbarheten av alla Android-appar för användare med funktionshinder. Dessa kallas tillgänglighetstjänster.

En tillgänglighetstjänst, vanligen kallad a11y, är en app som systemet kan mata viss information till beroende på vad evenemang tillgänglighetstjänsten registrerar sig att lyssna på. En app som vill implementera en tillgänglighetstjänst måste lägga till android.permission.BIND_ACCESSIBILITY_SERVICE behörighet till AndroidManifest-filen så att endast systemet kan binda till appens tjänst.

Till exempel om en tillgänglighetstjänst är byggd för att lyssna efter TYPE_VIEW_CLICKED händelser, kommer den tjänsten att få information från systemet om alla knappar som användaren kan trycka på. En tillgänglighetstjänst kan också reagera på och konsumera vissa gester och KeyEvents innan andra appar tar emot dem. Slutligen kan en tillgänglighetstjänst också injicera vissa KeyEvents som baksidan, delad skärm eller knappen för senaste appar.

Således kan tillgänglighetstjänster vara extremt kraftfull och användbar. Flera av de mest populära, innovativa applikationerna i Google Play Butik förlitar sig på a11y för att utföra sina uppgifter. Här är bara några av de få exemplen som jag kom på över huvudet:

  • AutoInmatning - fånga upp KeyEvents och utföra tryck-/svepgester
  • Button Mapper - fånga upp KeyEvents och mappa om dem till andra KeyEvents
  • Greenify - automatiskt viloläge appar genom att tvinga stänga dem innan skärmen stängs av
  • Inmatning+ - upptäck när tangentbordsappen är öppen för att visa den flytande åtgärdsknappen
  • LastPass - skanna sidor efter användarnamn/lösenord (nödvändigt före Android Oreo)
  • Växla snabbt - skicka KeyEvent för bakåtknappen
  • Tasker - upptäck när appar är öppna så att du kan utföra vilken användardefinierad åtgärd som helst
  • Typ Maskin - spela in all textinmatning så att du aldrig förlorar någon textinmatning

Ingen av dessa applikationer använder på det sätt som Google tänkt sig, vilket är att hjälpa användare med funktionshinder. Jag skulle satsa på att de allra flesta applikationer som implementerar en tillgänglighetstjänst gör det för funktioner utanför Googles område. Men det är det fina med Android och API: er som tillgänglighet – Google begränsar vanligtvis inte vad utvecklare kan och inte kan göra. Det slappa förhållningssättet med användningen av tillgänglighetstjänster verkar dock förändras i takt med Google Play Butiksteamet har skickat e-postmeddelanden till utvecklare och varnat dem för kommande ändringar av deras policy angående 11 år.


Vad exakt gör Google?

Företaget informerar utvecklare om att om deras applikation använder en tillgänglighetstjänst av någon annan anledning än att hjälpa användare med funktionshinder, då måste ta bort användningen av denna behörighet inom 30 dagar, annars tas deras app bort från Play Butik. Underlåtenhet att följa detta krav kan resultera i ett brott mot en utvecklares Play Butik-konto, vilket kan så småningom leda till kontouppsägning.

För de få appar som använder a11y för att hjälpa användare med funktionshinder, uppger Google att dessa utvecklare behöver helt enkelt lägga till en framträdande, användarvänd avslöjande av orsaken till varför deras app behöver lov. Men som jag nämnde tidigare används tillgänglighetstjänster mycket oftare i appar som skulle sluta bryta mot denna nya policy.

Fullständig e-post skickas till utvecklare

Hej utvecklare på ****,

Vi kontaktar dig eftersom din app, ****, med paketnamn **** begär "android.permission. BIND_ACCESSIBILITY_SERVICE.' Appar som begär tillgänglighetstjänster bör endast användas för att hjälpa användare med funktionshinder att använda Android-enheter och appar. Din app måste följa vår Behörigheter policy och de framträdande upplysningskraven i vår Användardata politik.

Åtgärd krävs: Om du inte redan gör det måste du förklara för användarna hur din app använderandroid.permission. BIND_ACCESSIBILITY_SERVICE' för att hjälpa användare med funktionshinder att använda Android-enheter och appar. Appar som inte uppfyller detta krav inom 30 dagar kan tas bort från Google Play. Alternativt kan du ta bort alla förfrågningar om tillgänglighetstjänster i din app. Du kan också välja att avpublicera din app.

Om du behöver göra ändringar i dina appar, följ dessa steg:

  • Läs igenom Behörigheter och Användardata policyer för mer information och se till att din app följer alla policyer som anges i Programpolicyer för utvecklare.
  • Om du inte behöver BIND_ACCESSIBILITY_SERVICE-behörigheten i din app eller om behörigheten används för något annat än att hjälpa användare med funktionshinder att använda Android-enheter och appar:
    1. Ta bort din begäran om denna behörighet från appens manifest.
    2. Logga in på din Play Console och ladda upp din modifierade, policykompatibla APK.
  • Eller, om du behöver BIND_ACCESSIBILITY_SERVICE-behörigheten i din app för att hjälpa användare med funktionshinder att använda Android-enheter och appar:
    1. Inkludera följande kodavsnitt i appens butiksinformation: "Denna app använder tillgänglighetstjänster."
    2. Ange tydligt användarvänligt avslöjande om denna användning innan du ber användaren att aktivera denna behörighet i din app. Ditt avslöjande måste uppfylla vart och ett av följande krav:
      • Avslöjande måste lämnas via android: sammanfattning och android: beskrivning element i AccessibilityServiceInfo-klassen
      • Avslöjandet måste beskriva den funktionalitet som tillgänglighetstjänstens behörighet möjliggör för din app. Varje funktion som används med tillgänglighetstjänstens begäran måste deklareras i ditt meddelande med motivering.

Alternativt kan du välja att avpublicera appen.

Alla överträdelser spåras. Allvarliga eller upprepade överträdelser av något slag kommer att leda till uppsägning av ditt utvecklarkonto och utredning och eventuell uppsägning av relaterade Google-konton.

Om du har granskat policyn och anser att vi kan ha gjort fel, vänligen kontakta vår policysupportteam. En av mina kollegor kommer att återkomma till dig inom 2 arbetsdagar.

Hälsningar,

Google Plays granskningsteam

Läs mer


Varför tar Google bort tillgänglighetstjänster från Play Butik?

Medan användningen av tillgänglighetstjänster är känd för att orsaka en hel del eftersläpning, den verkliga anledningen till att Google börjar slå ner på dessa appar är sannolikt relaterad till det växande problemet med utnyttjande som drar fördel av a11y. Även om apparna som jag nämnde ovan använder a11y för fördelaktiga syften, kan de lätt utnyttjas av illvilliga utvecklare för illvilliga syften. Till exempel en tillgänglighetstjänst kan användas för att implementera en keylogger, ransomware-attack eller nätfiske.

Googles ansträngningar för att skydda användare från skadliga tillgänglighetstjänster har mestadels kretsat kring avslöjande. Aktiverar för närvarande en tillgänglighetstjänst som registrerar sig för vissa evenemang som t.ex TYPE_VIEW_TEXT_CHANGED kommer att resultera i en varningsdialogruta om att appen kan stjäla dina lösenord. Du kanske tror att ett sådant meddelande skulle vara effektivt för att förhindra användare från att oansvarigt ge appar fritt. Det har dock funnits många dokumenterade fall av appar som lurat användare att bevilja a11y. Vissa attacker går ännu längre, såsom Utnyttja kappa och dolk och Toast Message Overlay attacker som socialt konstruerar användaren att bevilja a11y genom att felaktigt framställa vad det är de interagerar med på skärmen.

Attacker som dessa är effektiva på de allra flesta Android-enheter. Google har gjort stora framsteg för att förhindra överlagring eller toast-meddelandeattacker (som kan ses i AOSP om du söker efter a11y), men saker och ting har kommit till den punkt där Google beslutat att det är bättre att begränsa användningen av tillgänglighetstjänster helt. Det är vettigt, men det riktigt suger eftersom detta drag kommer att döda funktionaliteten hos många innovativa appar.


Vad kan utvecklare göra?

Tyvärr, där är inte mycket utvecklare kan göra som svar på dessa förändringar. Utvecklare kan antingen följa Googles krav genom att ta bort deras tillgänglighetstjänst eller riskera att deras app tas bort och att deras konto eventuellt avslutas. Att helt enkelt lägga till ett avslöjande för varför deras app använder a11y skulle bara fungera om deras app var legitimt inriktad på att hjälpa användare med funktionshinder, vilket inte beskriver de flesta appar som för närvarande använder a11y.

Att omstrukturera appar för att inte längre använda en tillgänglighetstjänst är möjligt för vissa, men inte alla, apparna vi har nämnt. Lösenordshanterare som LastPass kan migrera till Autofill Framework, men bara om användaren kör Android 8.0 Oreo och senare. Om en app använder a11y för att övervaka när andra appar är öppna, kan den appen istället skrivas med en pollingtjänst som använder UsageStats API. Appar som Tasker kan överleva en sådan förändring. Andra som Button Mapper och AutoInput har ingen tur – utan root finns det inget bra sätt att fånga upp KeyEvents.

Även om vi inser faran med att tillåta en skadlig app åtkomst till tillgänglighets-API: erna, är det synd att se några riktigt användbara appar kastreras av Google. Vi hoppas att policyn som Google lagt upp är omvänd, eller så hävdar de helt enkelt att den tolkades fel. Som det ser ut är formuleringen i e-postmeddelandet ganska tydlig - följ våra riktlinjer eller gå ut från Play Butik. Det är en dyster påminnelse om att Google har all makt över vilka appar som hör hemma i Play Butik, och de kan dra ut mattan under dig när som helst.


Uppdatering 1: Förvirrande utvecklardokumentation

Googles utvecklardokument för bygga en tillgänglighetstjänst verkar motsäga detta nya fokus från Google Play Store-teamet. Sidan har följande lydelse när detta skrivs:

En tillgänglighetstjänst är en applikation som tillhandahåller förbättringar av användargränssnittet för att hjälpa användare med funktionshinder, eller som tillfälligtvis inte kan interagera fullt ut med en enhet. Till exempel kan användare som kör bil, tar hand om ett litet barn eller deltar i en mycket högljudd fest behöva ytterligare eller alternativ gränssnittsfeedback.

Dessutom, om man jämför formuleringen på sidan med en arkiverad version av sidan från juli, kommer du att upptäcka att anteckningen om att bygga tillgänglighetstjänster endast för att hjälpa användare med funktionshinder inte existerar.

Tack João Dias för att du tog kontakt med denna information.