Slide 1

Slide 1 text

Szabad-e? – Futásidejű engedélykérés Androidon Gerlei Balázs

Slide 2

Slide 2 text

Szabad-e? – Futásidejű engedélykérés Androidon

Slide 3

Slide 3 text

Engedélyek kezelése Android 6.0 előtti verziókon • Manifestben kell deklarálnunk a szükséges engedélyeket • Az alkalmazáshoz szükséges engedélyek listáját telepítéskor (és frissítéskor) látja a felhasználó • Telepítéssel minden engedély megadásra kerül • Ha telepítve van az alkalmazás, akkor megkapott minden engedélyt, hisz visszavonni sem lehet azokat

Slide 4

Slide 4 text

• Minimális fejlesztői munka • Ha telepítve van az alkalmazás, akkor biztosan meg van adva minden engedély Engedélyek kezelése Android 6.0 előtti verziókon • Felhasználók számára sokszor félelmetes mennyiségű engedély telepítéskor és frissítéskor, emiatt hezitálás • Engedélykérést nem lehet jól megmagyarázni • Mindent vagy semmit: ha a felhasználó letölti az alkalmazást, meg kell adnia az összes engedélyt, és később sem változtathat • Sokszor nehezen érthető engedélyek, kontextus hiánya Előnyök Hátrányok

Slide 5

Slide 5 text

Engedélyek kezelése Android 6.0 és újabb verziókon • Target SDK 23 felett lép életbe az új rendszer • Manifestben ugyanúgy deklarálnunk kell a szükséges engedélyeket • Installáláskor és telepítéskor nincs engedélylista • Veszélytelennek ítélt engedélyeket alapból megkapunk, kérni sem kell • Potenciálisan veszélyesnek ítélt engedélyeket futásidőben kell kérnünk • A felhasználótól valójában 9 engedély csoport valamelyikére kérünk engedélyt • De kódból mi ettől még az egyes engedélyeket kérjük el • Ne is alapozzunk arra, hogy ha valamelyik engedély megvan egy csoportból, akkor a többi is megvan

Slide 6

Slide 6 text

Engedélyek kezelése Android 6.0 és újabb verziókon • Lehet egyszerre több engedélyt is kérni, a rendszer ekkor több lépésből álló dialógusba összevonja a kéréseket • 4-5-nél lehetőleg ne kérjünk egyszerre többet • A rendszer által feldobott engedélykérő dialógust nem módosíthatjuk, de az első megtagadást követő engedélykérés előtt megjeleníthetünk magyarázatot • A felhasználó később is visszavonhatja az engedélyeket (azaz a csoportokat) • Ha egyszer már megtagadta az engedélyt a felhasználó, de újra kérjük, lehetősége van egy „Ne is kérd többet” opciót beállítani

Slide 7

Slide 7 text

Engedélyek kezelése Android 6.0 és újabb verziókon • Lehet egyszerre több engedélyt is kérni, a rendszer ekkor több lépésből álló dialógusba összevonja a kéréseket • 4-5-nél lehetőleg ne kérjünk egyszerre többet • A rendszer által feldobott engedélykérő dialógust nem módosíthatjuk, de az első megtagadást követő engedélykérés előtt megjeleníthetünk magyarázatot • A felhasználó később is visszavonhatja az engedélyeket (azaz a csoportokat) • Ha egyszer már megtagadta az engedélyt a felhasználó, de újra kérjük, lehetősége van egy „Ne is kérd többet” opciót beállítani

Slide 8

Slide 8 text

Engedélyek kezelése Android 6.0 és újabb verziókon • Lehet egyszerre több engedélyt is kérni, a rendszer ekkor több lépésből álló dialógusba összevonja a kéréseket • 4-5-nél lehetőleg ne kérjünk egyszerre többet • A rendszer által feldobott engedélykérő dialógust nem módosíthatjuk, de az első megtagadást követő engedélykérés előtt megjeleníthetünk magyarázatot • A felhasználó később is visszavonhatja az engedélyeket (azaz a csoportokat) • Ha egyszer már megtagadta az engedélyt a felhasználó, de újra kérjük, lehetősége van egy „Ne is kérd többet” opciót beállítani

Slide 9

Slide 9 text

Engedélyek kezelése Android 6.0 és újabb verziókon 1. Magyarázzuk meg előre 2. Kérjünk engedélyt előre 3. Magyarázzuk meg a kontextusában 4. Kérjünk engedélyt a kontextusában Kritikus Funkció Másodlagos Funkció Szükséges engedély nem egyértelmű Szükséges engedély egyértelmű

Slide 10

Slide 10 text

Engedélyek kezelése Android 6.0 és újabb verziókon // Engedély meglétének ellenőrzése int Context#checkSelfPermission(String); // Engedély elkérése int Activity/Fragment#requestPermissions(String[], int); // Engedélykérés eredményének kezelése void Activity/Fragment#onRequestPermissionsResult(int, String[], int[]) // Magyarázat szükségességének ellenőrzése boolean Activtiy/Fragment#shouldShowRequestPermissionRationale(String); // Annak ellenőrzése, hogy egy Device Policy nem gátolja-e meg az engedély megszerzését boolean PackageManager#isPermissionRevokedByPolicy(String, String);

Slide 11

Slide 11 text

Engedélyek kezelése Android 6.0 és újabb verziókon // Engedély meglétének ellenőrzése int Context#checkSelfPermission(String); // Engedély elkérése int Activity/Fragment#requestPermissions(String[], int); // Engedélykérés eredményének kezelése void Activity/Fragment#onRequestPermissionsResult(int, String[], int[]) // Magyarázat szükségességének ellenőrzése boolean Activtiy/Fragment#shouldShowRequestPermissionRationale(String); // Annak ellenőrzése, hogy egy Device Policy nem gátolja-e meg az engedély megszerzését boolean PackageManager#isPermissionRevokedByPolicy(String, String); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Engedélykérés és eredmény lekezelése } Vagy használjuk a Support Library-s megfelelőket

Slide 12

Slide 12 text

• Súrlódásmentes telepítés és frissítés • Megmagyarázhatjuk, miért van szükségünk egy engedélyre • Van lehetőség használni az alkalmazást akkor is, ha valamely engedélyeket nem kap meg • Engedélykérés kontextusban Engedélyek kezelése Android 6.0 és újabb verziókon • Megnövekedett fejlesztői és UX dizájner munka • Alaposan át kell gondolni, mire és mikor kérjünk engedélyt • Néhány API híváshoz nehezen megmagyarázható engedélyek szükségesek • Magyarázatot alapból csak az első elutasítás után mutathatunk Előnyök Hátrányok

Slide 13

Slide 13 text

That’s all folks ? Nem éppen…

Slide 14

Slide 14 text

1. Biztosan szükségünk van az engedélyre? 2. Mennyire kritikus az engedély az alkalmazás működéséhez? 3. Mennyire egyértelmű az engedély szükségessége? 4. Melyek azok a pontok ahol először szükség van az engedélyre? 5. Hogyan kezeljük, ha megtagadásra kerül az engedély? Engedélykérés implementálása

Slide 15

Slide 15 text

Engedélykérés implementálása • Ne tartsuk 22-esen a target sdk-t • Ha tudjuk, kerüljük el az engedélykérést • Kérjük minél egyértelműbb helyen az engedélyeket, lehetőleg ne rögtön az induláskor • Használjunk library-t • hotchemi/PermissionsDispatcher • https://github.com/hotchemi/PermissionsDispatcher • Vonjuk be a dizájnereket (UX szempontból is!) • Válasszuk a megfelelő komponenseket és flow-t az engedély kérésére és a szükségesség magyarázására

Slide 16

Slide 16 text

DEMO

Slide 17

Slide 17 text

Képernyőfedvény (Screen Overlay) • Más alkalmazások felé rajzolni képes alkalmazásokat jelent • Pl. Facebook chatheads • Az Android meg akarja akadályozni hogy egy ilyen komponenst tartalmazó alkalmazás átveréssel rávehesse a felhasználót hogy megadjon neki engedélyeket • Fejlesztői oldalról ezt sajnos nem tudjuk detektálni, a felhasználónak kell megoldania

Slide 18

Slide 18 text

• AutSoft blog (várható cikk a témában) https://blog.autsoft.hu/ • Mother, May I? (Android Dev Summit 2015) https://youtu.be/5xVh-7ywKpE • Asking For Permission (Android Developers) https://youtu.be/iZqDdvhTZj0 • Runtime Permissions in Android 6.0 Marshmallow https://youtu.be/C8lUdPVSzDk • Everything every Android Developer must know about new Android's Runtime Permission http://bit.ly/2ggUJ6x Köszönöm a figyelmet!