de Tomislav Smrečki

Android Instant Apps 101 ce sunt si cum functioneaza
Fotografie de rawpixel pe Unsplash

Aplicațiile instantanee Android sunt o nouă modalitate de a consuma aplicații native fără instalare prealabilă. Doar părți ale aplicației sunt descărcate și lansate, oferind utilizatorilor un aspect nativ în câteva secunde.

Cum funcționează?

În primul rând, nu le confundați cu Progresive aplicații web în care o pictogramă de lansare deschide o aplicație web prin browserul Chrome. O aplicație instantanee va fi instalată de fapt pe telefonul dvs., dar fără a fi nevoie să o căutați în Play Store.

Adresele URL web vor declanșa Magazinul Google Play pe telefonul dvs. și vor prelua doar partea din aplicație asociată cu adresa URL solicitată. Restul aplicației nu este descărcat. Astfel, utilizatorii se pot bucura rapid de experiența nativă a aplicației dvs. Android.

Care este fundalul?

Ei bine, trebuie să vă împărțiți proiectul Android în câteva module. Unul dintre ele este un modul de bază cu codul esențial care este utilizat în toate celelalte module (conexiune API, bază de date, preferințe partajate etc.). Celelalte module de caracteristici conțin funcționalități și activități specifice care pot fi accesate prin adresele URL asociate.

Să presupunem că aveți o aplicație web cu o listă de produse și o singură pagină a produsului. De exemplu, puteți conecta https: //example.domain/products pentru a lansa ProductsListActivity și https: //example.domain/products/12 pentru a lansa ProductActivity.

Pentru a le face accesibile ca activități de aplicații instantanee, acestea trebuie să fie împachetate în module de caracteristici individuale și trebuie să aibă asociate linkuri de aplicații definite în manifestele modulelor lor. Le vom numi module de produse și liste de produse.

Acum, când un utilizator încearcă să deschidă https: //example.domain/products/12, atât produsul, cât și modulele de bază vor începe să se descarce, iar ProductActivity va fi lansată.

Probabil ați auzit de legături profunde. Acestea sunt definite în manifestul aplicației și vor fi înregistrate în sistemul de operare. Când un utilizator încearcă să deschidă un astfel de link, sistemul de operare îi va cere utilizatorului să aleagă între deschiderea linkului într-un browser web sau în aplicația dvs. Cu toate acestea, acest lucru nu este suficient pentru aplicațiile Instant, trebuie să faceți un pas mai departe – Linkuri pentru aplicații. Trebuie să includeți autoVerify = ”true” proprietate.

<activity android:name=".ProductActivity"> <intent-filter android:autoVerify="true" android:order="100"> 
<action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> 
<data android:scheme="http"      android:host="example.domain"       android:pathPrefix="/products" /> <data android:scheme="https"/> 
</intent-filter> </activity>

Aplicația dvs. va fi verifica dacă linkurile pe care le-ați specificat sunt într-adevăr asociate cu domeniul dvs. Pentru aceasta, trebuie să includeți fișierul assetlinks.json fișier în următorul folder al rădăcinii domeniului dvs.:

https: //example.domain/.well-known/assetlinks.json.

De asemenea, observați android: order = ”100 ″ proprietate. Aceasta este de fapt o prioritate în acest caz. Dacă aveți o listă de produse și un singur produs care corespund aceleiași căi (/ produse și / produse / 10), activitatea unică a produsului va fi lansată dacă există un ID după /produse cale. Dacă nu, atunci se lansează activitatea din lista de produse.

Este foarte important să definim acest lucru. Dacă există două activități care corespund aceleiași căi, Magazinul Play nu va ști ce parte a aplicației trebuie preluată.

Asociați aplicația cu domeniul dvs.

assetlinks.json va trebui să conțină hash-urile dvs. pentru magazinul de chei SHA256. Câmpul de relație este setat la valoarea implicită de mai jos, iar obiectul țintă trebuie să fie completat cu date specifice aplicației și hash-ul dvs. SHA256 al magaziei de chei.

[{   "relation": ["delegate_permission/common.handle_all_urls"],  "target": {   "namespace": "android_app",   "package_name": "com.example.app",   "sha256_cert_fingerprints":["00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"]   } }]

Când autoVerify = adevărat își face magia, toate linkurile de aplicații asociate vor lansa direct aplicația dvs. Dacă nu aveți aplicația instalată, aplicația instantanee va fi descărcată în schimb.

Iată un exemplu de aplicație demonstrativă pe care am făcut-o recent. Când faceți clic pe linkul asociat, se deschide un astfel de ecran și vă oferă să folosiți în schimb aplicația instantanee. Rețineți cât de repede se deschide aplicația, iar pe Oreo este și mai rapid.

Cum se definesc modulele instantanee Android?

Pentru o aplicație instantanee, proiectul dvs. va consta din cel puțin trei module diferite. Pentru aceasta, trebuie să utilizați Android Studio 3.0. Dacă vă creați aplicația de la zero, există o opțiune pentru a activa suportul pentru aplicația instantanee pentru proiectul dvs.

Toate următoarele module vor fi inițializate automat. Dacă modificați o aplicație mai veche, va trebui să împărțiți vechiul modul de aplicație într-un singur modul de bază și câteva module de caracteristici. De asemenea, va trebui să creați o aplicație și un modul de aplicație instantanee, pe care le veți utiliza pentru a crea atât APK-uri de aplicații obișnuite cât și instantanee.

Modulul aplicației

În primul rând, trebuie să creați un modul de aplicație care să definească dependențele pentru toate celelalte module (module de bază + caracteristică). În fișierul build.gradle al acestui modul, va trebui să definiți următoarele:

apply plugin: 'com.android.application' ...
dependencies {   implementation project(':product')   implementation project(':productlist')   implementation project(':base') }

Modulul de bază

În acest modul, veți defini următoarele instrucțiuni de dependență. De asemenea, asigurați-vă că „com.android.feature” pluginul este aplicat aici.

apply plugin: 'com.android.feature' android {  baseFeature true   ... } 
dependencies {   api 'com.android.support:appcompat-v7:26.0.1'   api 'com.android.support.constraint:constraint-layout:1.0.2'  implementation 'com.google.firebase:firebase-appindexing:11.0.4'  application project(':app')   feature project(':product')   feature project(':productlist') }

Rețineți că aici, instrucțiunile de compilare devin instrucțiuni API pentru dependențele obișnuite pe care le-am folosit anterior. Proiectul aplicației și proiectele de caracteristici sunt definite separat.

Modulul de funcții

Acest modul va avea următoarea setare, de asemenea, cu com.android.feature plugin aplicat.

apply plugin: 'com.android.feature' ... dependencies {   implementation project(':base')   ... }

Trebuie să specificați care este modulul de bază și să îl includeți în declarația de implementare a proiectului. Apoi, puteți include dependențele care sunt necesare numai pentru acest modul specific. De exemplu, dacă utilizați o bibliotecă de animație care nu este utilizată în niciunul dintre celelalte module.

Modul de aplicație instantanee

În cele din urmă, acum există un com.android.instantapp plugin pentru a fi inclus în build.gradle fișier pentru modulul instantapp.

apply plugin: 'com.android.instantapp' dependencies {   implementation project(':product')   implementation project(':productlist')   implementation project(':base') }

În acest modul, vom defini ce module vor fi construite ca aplicații instantanee. Rezultatul construirii modulului instantapp este un fișier zip cu aplicațiile APK instantanee pe care le puteți încărca separat în Google Play Store în Android Instant Apps release manager. Aceste APK-uri sunt gestionate în mod similar cu cele obișnuite, au propriul lor istoric de lansare și versiune.

Asta este! Este destul de simplu să începeți să dezvoltați aplicații instantanee Android. Dar, există întotdeauna un dar!

Care au fost provocările Android Instant Apps?

În primul rând, aplicațiile instantanee nu sunt activate în mod implicit pentru moment. Dacă doriți să îl încercați, trebuie să verificați setările telefonului în contul Google și să activați setarea Instant Apps.

Apoi, am constatat că este extrem de important să specificați datele legăturilor de aplicații în următorul format:

<intent-filter android:autoVerify="true"> ... <data android:scheme="http"   android:host="example.domain"   android:pathPrefix="/products" /> <data android:scheme="https"/> </intent-filter>

Atât schemele http, cât și https trebuie definite așa cum se arată în acest fragment de cod. Orice alt mod ar provoca o eroare de verificare a linkului, iar aplicația nu ar fi conectată corect.

De asemenea, există o recomandare de a include următorul fragment de cod într-una dintre activitățile din manifestul aplicației. Aceasta adnotează ce activitate ar trebui lansată în cazul în care aplicația Instant este lansată din Setări sau un lansator de sistem.

<meta-data  android:name="default-url" android:value="https://example.domain" />

Documentația oficială precizează că Căutarea Google ar oferi implicit adnotarea aplicației Instantanee (pictogramă tunet mic), dar am avut probleme cu aceasta. Pentru aplicația noastră demonstrativă, nu a fost cazul. Rezultatele Căutării Google nu au adnotat legăturile noastre demo ca aplicații Instant și link-urile care au condus la pagina web. Doar dacă am încercat să deschidem linkul asociat dintr-o altă aplicație, cum ar fi Gmail, întregul proces de aplicație instantanee a fost declanșat și aplicația instantanee a fost lansată. Ați întâmpinat probleme similare?

Concluzie

Când am fost anunțat acum doi ani, eram foarte entuziasmat de Android Instant Apps. Ei răspund la problema faptului că utilizatorii trebuie să caute aplicațiile din Magazin și așteaptă până când sunt descărcați pentru a începe să le folosească. Aplicațiile web sunt mult mai accesibile în acest sens, iar ușurința descoperirii este mult mai bună.

Aplicațiile instantanee sunt aproape de a umple acest gol între web și aplicațiile mobile native. Ei acționează deja foarte bine și cred că vor deveni mai populari cu timpul. Principalele probleme pe care le-am întâmpinat au fost o comunitate destul de mică și lipsa unei documentații adecvate, dar situația în această privință se îmbunătățește și ea.

Ne-ar plăcea să aflăm de la dvs. dacă ați încercat să le folosiți sau ați avut vreo provocare să le implementați!

Publicat inițial la www.bornfight.com.