Webnézetek biztosítása Chrome Custom Tabs

Plaid segítségével felhatalmazza a fintech tér újítóit azáltal, hogy egységes API-n keresztül hozzáférést biztosít számukra a pénzügyi adatokhoz. Annak érdekében, hogy a végfelhasználók összekapcsolják banki adataikat a fintech alkalmazásokkal, a Plaid kifejlesztett egy linket, egy drop-in modult, amely kezeli a hitelesítő adatok érvényesítését, a többtényezős hitelesítést és a hibakezelést minden támogatott bank számára.

az Android fejlesztőknek korábban meg kellett nyitniuk a Link URL-eket a Webnézetekben. Minden alkalmazás, amely használni akarta a linket, sok fejlesztői erőfeszítést igényelt, és szabványosítás nélkül bizonyos implementációkban hiba volt. A fejlesztői élmény javítása érdekében nemrégiben kiadtunk egy SDK-t, amely megkönnyíti a WebView integrálását bármely alkalmazásba, néhány sornyi kóddal.

ezenkívül a Webnézetek nem teljesen biztonságosak a végfelhasználók számára, akik érzékeny információkat visznek be a Linkfolyamatba. Annak érdekében, hogy az SDK-t a lehető legbiztonságosabbá tegyük, az Android WebViews helyett a Chrome Egyéni lapjaival valósítottuk meg. Ebben a cikkben elmagyarázzuk, miért hoztuk meg ezt a döntést, és hogyan oldottuk meg az út során felmerült technikai problémákat.

opcióink kiértékelése

SDK-ként a kódunk más fejlesztők alkalmazásaiban fut, és cserébe azok alkalmazási folyamataiban. A Link webalkalmazás WebView-ban történő futtatásához engedélyezni kell a Javascriptet. Ez megnyitja az ajtót más alkalmazások számára rosszindulatú kódok futtatásához, például visszahívások regisztrálásához, amelyek megpróbálják elfogni a felhasználóneveket és a jelszavakat. Ezenkívül egy rosszindulatú alkalmazás megnyithat egy másik weboldalt, amely adathalász kísérlet során utánozza a Linkfolyamatot.

amikor olyan megoldást kerestünk, amely könnyen integrálható a fejlesztők számára, intuitív a végfelhasználók számára és biztonságos, számos lehetőséget értékeltünk:

  1. natív linkfolyamat létrehozása: mivel a natív Linkfolyamatok egy másik alkalmazás folyamatában is futnának, a hozzáértő fejlesztők a reflection segítségével megtalálhatják a bemeneti EditText-eket, és a WebView-ban a Javascript-hez hasonló módon regisztrálhatják a visszahívásokat.

  2. külön hitelesítő alkalmazás létrehozása: Ez natív sandboxos élményt nyújtana, és ideális élmény lenne a végfelhasználók számára; azonban sok felhasználó nem szeretne letölteni egy extra alkalmazást a Play Áruházból. Ez azt jelenti, hogy tartalék megoldásra lenne szükségünk azoknak a felhasználóknak, akik megtagadják az alkalmazás letöltését.

  3. link megnyitása külön böngészőablakban: ez egy sandboxos, biztonságos megoldás lenne. Szinte minden felhasználó rendelkezik böngészővel, de az alkalmazásról a böngészőre való váltás észrevehető késést okozna, különösen az alacsony kategóriájú eszközökön.

  4. a Chrome Egyéni lapjainak használata: Ezt a megoldást választottuk, mivel a fent említett hátrányok egyike sem volt.

választásunk: Chrome Custom Tabs

a Chrome custom tabs (CCT) a Chrome böngésző része, amely integrálódik az Android keretrendszerrel, hogy az alkalmazások könnyű folyamatban nyissák meg a webhelyeket. A CCT gyorsabban nyílik meg, mint egy böngésző, és ha a bemelegítő híváson keresztül előre betöltődik, potenciálisan még gyorsabb, mint egy WebView. Bár továbbra is Javascript-et futtat, a saját folyamatában van, amely megakadályozza az alkalmazások rosszindulatú kód futtatását. Ezenkívül a CCT felhasználói felület tartalmaz egy műveletsávot, amely megmutatja a betöltött oldal URL-jét, valamint a biztonságos oldalak SSL-ellenőrző zár ikonját. Ez megnyugtatja a felhasználókat, hogy a megfelelő oldal jelenik meg.

alt

bár nem minden felhasználó telepítette a Chrome-ot, a túlnyomó többség igen. Azok számára, akik nem, a fent leírt böngésző tartalék módszert használjuk (3.lehetőség); egy kódsor hozzáadása mellett ingyenesen megkapjuk a tartalékot a CCT-től. Mint korábban megjegyeztük, a böngésző tartalék késése miatt nem ideális felhasználói élmény, de fenntartja a Plaid által megkövetelt magas szintű biztonságot.

a CCT megoldás kifejlesztése során számos komplikációba ütköztünk és kezeltünk:

  • eseményadatok beszerzése

  • a végeredmény lekérése

  • a CCT tevékenység ellenőrzése & folyamat

eseményadatok lekérése

amikor egy felhasználó a Link képernyői között navigál, átirányítás történik, és az adatok az URL-paraméterekben kerülnek a fejlesztők rendelkezésére.

alt

ez az átirányítási információ értékes a fejlesztők számára, mivel segít megérteni a felhasználói viselkedést. Mivel a CCT a saját folyamatában fut, és nem nyújt átirányítási visszahívást, ezek az információk általában nem érhetők el, ami a biztonságos SDK-t kevésbé működőképessé tenné a fejlesztők számára, mint az egyedi WebView-implementációik.

hogy ezeket az információkat a CCT-től biztosítsuk, ehelyett az átirányítási eseményeket rögzítettük a kiszolgálón egy Redis adattárban. Amikor az SDK megnyitja a linket, bootstrap hívást kezdeményez a szervereinkre, amelyek megadják az általunk választott felhasználónkénti csatorna azonosítót és egy titkos kulcsot. Az SDK ezután létrehoz egy alkalmazás hatókörűmunkaobjektumot, amely RX intervallumfolyam segítségével lekérdezi a kiszolgálót. Minden lekérdezési hívásnál megadjuk a szervernek a csatorna azonosítóját, a titkos kulcsot és az utolsó esemény UUID-jét (vagy null), hogy megkapja a legfrissebb eseményeket.

1
2
3
4
5
6
7
8
9
10
11
12

megfigyelhető.intervallum (intervallum, időegység.Másodperc)
.subscribeOn (ütemezők.számítás())
.observeOn (AndroidSchedulers.mainThread())
.flatMapSingle (makeNetworkCall())
.feliratkozás(
{
// üzenetek kezelése
},
{
// hibák kezelése
})

az Android keretrendszer megölhet bármilyen folyamatot, beleértve a Plaid SDK-ját használó alkalmazást is. Mivel a munkavállaló objektum az alkalmazáshoz van kötve, ez a munkavállaló leállítását eredményezné. Ha a felhasználó folytatja a folyamatot, (sikeresen vagy sikertelenül) az SDK utolsó hívást kezdeményez a csatornára, és megkapja a fennmaradó eseményeket. Az események csak akkor vesznek el, ha a felhasználó megszakítja az áramlást, és az erő megöli az alkalmazást.

a végeredmény lekérése

az eseményadatok klienseknek történő továbbításához hasonlóan a Link az URL-t használja annak jelzésére, hogy a felhasználó befejezte a folyamatot. A vonatkozó URL tartalmazza a szükséges adatokat, például a nyilvános kulcsot vagy a hibakódot.

mivel nem tudjuk elérni az URL-t CCT-vel, a végeredményt Redis-ben tároltuk ugyanazzal a csatornaazonosítóval. Bár ez azt jelenti, hogy a közvélemény-kutató munkatársunk tudná, mikor fejeződött be a Link, nem lenne garancia arra, hogy a munkavállaló még mindig életben lesz. Még ha életben is lenne, előfordulhat, hogy a felhasználónak meg kell várnia a következő lekérdezési hívásig az eredmény kézbesítését, ami hosszú pár másodperc lehet.

az eredmény időben történő kézbesítésének biztosítása érdekében mély linket használunk az SDK újbóli megnyitásához. A mély link az alkalmazás alkalmazásazonosítójával jön létre, amelyet társítani kell az ügyfél titkához, és engedélyezőlistára kell tenni a fejlesztői irányítópulton. Ez, valamint az a tény, hogy egy eszközön csak egy alkalmazásnak lehet ugyanaz az alkalmazásazonosítója, biztosítja, hogy más alkalmazások ne fogják el az átirányítást. A Link webalkalmazás ezután létrehoz egy szándékú URI-t, amelyet a Linkfolyamat végén indítanak el.

1
2

szándék: / / átirányítás/ # szándék; séma=kockás; csomag=$Csomagnév; vége;

az SDK tartalmaz egy intent szűrőt az URI kezelésére, így az alkalmazás újra megnyílik, és azonnal hívást kezdeményez közvetlenül a csatornára.

1
2
3
4
5
6
7
8
9
10
11

<intent-filter>
<action android: name= " android.szándék.felvétel.Nézet" />
<kategória android: name= " android.szándék.kategória.Alapértelmezett" />
<kategória android: name= " android.szándék.kategória.Böngészhető" />
<adatok
android:host= "átirányítás"
android:rendszer= "kockás" />
</intent-filter>

Controlling CCT

CCT hiányzik interfészek az alkalmazás:

  • hallgassa meg, amikor a felhasználó bezárja a tevékenységet

  • észleli, ha a felhasználó rákattintott a “Megnyitás a böngészőben” opcióra

  • kényszeríteni, hogy zárja be

sikeresen megoldottuk ezeket a hiányosságokat.

először is, hogy meghallgassuk, amikor a felhasználó bezárja a tevékenységet, megnyitjuk a CCT-t a startActivityForResult használatával, és átadunk egy kérési kódot. Ha a felhasználó bezárja a CCT-t a system back gomb bal felső sarkában található X segítségével, akkor az onActivityResult visszahívás az általunk megadott kérési kóddal és a tevékenység eredménykódjával indul.RESULT_CANCELED. Az adatok szándék nem tartalmaz semmilyen információt, de tudjuk, hogy egy utolsó hívást a csatorna, hogy a fennmaradó események. Ezután átadjuk őket az ügyfélalkalmazásnak, és visszaadunk egy LinkCancellation objektumot, jelezve, hogy a linket a Felhasználó szándékosan zárta le.

ezután a potenciális aggodalomra ad okot annak észlelése, amikor a felhasználó rákattintott a “Megnyitás a böngészőben” gombra, az, hogy a felhasználó ezután egy külön alkalmazásban, nevezetesen a böngészőben átmehet a teljes folyamaton. Ez számunkra nem jelent problémát, mert a közvélemény-kutatás és a szándékrendszer továbbra is ugyanúgy működik, és még mindig megkaphatjuk a szükséges adatokat.

végül, amikor a Felhasználó sikeresen befejezi a folyamatot, és az eredménykoncepció elindul, a CCT folyamat nyitva marad, és a felhasználó feladatlistájában marad. Ez a fantom folyamat nemcsak pazarló lenne, hanem zavaró is lehet A felhasználó számára, amikor megnyomja a “legutóbbi feladatok” rendszergombot. Ezért szükségünk van arra, hogy kényszerítsük a CCT bezárását, amikor az áramlás befejeződött.

ehhez az OpenId AppAuth for Android könyvtárban látható mintát használtuk. Ahelyett, hogy az eredményt a linket megnyitó tevékenységben kezelnénk, a szándékszűrőt külön tevékenységre helyezzük. Ez a második tevékenység kezeli az összes átirányítást a webalkalmazásból, amelyek a következők: sikeres befejezések, az áramlást lezáró hibák, oAuth vagy App-to-App átirányítások és általános rendszerhibák. A tevékenység ezután átadja az adatokat a nyitó tevékenységnek egy szándék használatával a szándékkal.FLAG_ACTIVITY_SINGLE_TOP és Intent.FLAG_ACTIVITY_CLEAR_TOP zászlók. Együtt használva mindent megtisztítanak a kötegen a nyitó tevékenység felett, beleértve a CCT-t is.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

val intent = Intent (tevékenység, LinkActivity:: osztály.java)
amikor (állapot) {
átirányításra kerül.ChromeCustomTabsComplete -> {
szándék.putExtra (LINK_CHROME_CUSTOM_TABS_COMPLETE_REDIRECT, igaz)
szándék.putExtra(LINK_RESULT_CODE, state.resultCode)
intent.putExtra(LINK_RESULT, state.result)
}
is RedirectState.UserInitiatedChromeCustomTabsViewClose -> {
intent.putExtra(LINK_CHROME_CUSTOM_TABS_USER_CLOSE_REDIRECT, true)
}
is RedirectState.OAuth -> {
intent.putExtra(LINK_OAUTH_REDIRECT, true)
intent.putExtra(LINK_OAUTH_STATE_ID, state.oauthStateId)
}
is RedirectState.RedirectError ->
intent.putExtra (LINK_REDIRECT_ERROR, igaz)
}
szándék.flags = szándék.FLAG_ACTIVITY_SINGLE_TOP vagy szándék.FLAG_ACTIVITY_CLEAR_TOP
visszatérési szándék

alt

záró gondolatok a CCT-ről

annak érdekében, hogy biztonságos, homokozós élményt nyújtson, amely nem érhető el a WebView-kben vagy a natív folyamatokban, a CCT életképes megoldás. Könnyen integrálható a fejlesztők számára, és jobb felhasználói élményt nyújt, mint a böngészőablakok megnyitása a könnyű természetének és sebességének köszönhetően.

a CCT sandboxos jellege és korlátozott API-ja azt jelenti, hogy nincs hátránya. Az URL-átirányítások meghallgatása, a végső eredmények elérése és a CCT-folyamat ellenőrzése mind megkövetelte tőlünk, hogy kreatív megoldásokkal álljunk elő. Ezek a megoldások az Android beépített funkcióinak, különösen az intent keretrendszer megértésére támaszkodtak.

a fejlesztők és a fogyasztók számára nyújtott előnyök megérte a szükséges erőfeszítést, és javasoljuk a CCT használatát más alkalmazásokban és SDK-kban a gyors és biztonságos integráció érdekében. Ezenkívül az itt megadott tippeket felhasználhatja a felhasználói (és fejlesztői) élmény javítására.

ha olyan egyedi problémák megoldása érdekli, amelyeket Fejlesztők ezrei és fogyasztók milliói fognak használni, látogasson el Karrier oldalunkra.

You might also like

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.