Instant aplikacije za Android 101: što su i kako rade

Instant aplikacije za Android novi su cool način konzumiranja izvornih aplikacija bez prethodne instalacije. Preuzimaju se i pokreću samo dijelovi aplikacije, što korisnicima daje prirodan izgled i osjećaj u nekoliko sekundi.

Kako rade?

Prije svega, nemojte ih miješati s progresivnim web aplikacijama gdje ikona pokretača otvara web aplikaciju putem preglednika Chrome. Instant aplikacija zapravo će biti instalirana na vaš telefon, ali bez potrebe za traženjem u Trgovini Play.

Web-URL-ovi aktivirat će Trgovinu Google Play na vašem telefonu i dohvatiti samo dio aplikacije koji je povezan sa zatraženim URL-om. Ostatak aplikacije nije preuzet. Na taj način korisnici mogu brzo uživati ​​u izvornom iskustvu vaše Android aplikacije.

Koja je pozadina?

Pa, svoj Android projekt morate podijeliti na nekoliko modula. Jedan od njih je osnovni modul s osnovnim kodom koji se koristi u svim ostalim modulima (API veza, baza podataka, zajedničke postavke itd.). Drugi, svojstveni moduli, sadrže određene funkcionalnosti i aktivnosti kojima se može pristupiti putem povezanih URL-ova.

Recimo da imate web aplikaciju s popisom proizvoda i jednom stranicom proizvoda. Na primjer, možete povezati //example.domain/products da biste pokrenuli ProductsListActivity i //example.domain/products/12 da biste pokrenuli ProductActivity.

Da bi ih učinili dostupnima kao aktivnosti trenutne aplikacije, moraju biti spakirani u pojedinačne module značajki i moraju imati pridružene poveznice aplikacija definirane u njihovim manifestnim modulima. Nazvat ćemo ih Moduli proizvoda i Popisa proizvoda.

Sada, kada korisnik pokuša otvoriti //example.domain/products/12 , počet će se preuzimati i Product i Base moduli, a ProductActivity će se pokrenuti.

Što su veze do aplikacija i kako su definirane?

Vjerojatno ste čuli za duboke veze. Oni su definirani u manifestu aplikacije i bit će registrirani na OS. Kad korisnik pokuša otvoriti takvu vezu, OS će tražiti od korisnika odabir između otvaranja veze u web pregledniku ili u vašoj aplikaciji. Međutim, to nije dovoljno za instant aplikacije, trebate ići korak dalje - poveznice aplikacija. Morate uključiti svojstvo autoVerify = "true" .

Vaša će aplikacija provjeriti jesu li veze koje ste naveli stvarno povezane s vašom domenom. Da biste to učinili , morate uključiti datoteku activlinks.json u sljedeću mapu korijena domene:

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

Također, primijetite svojstvo android: order = ”100 ″ . To je zapravo prioritet u ovom slučaju. Ako imate popis proizvoda i pojedinačni proizvod koji odgovaraju istom putu (/ products and / products / 10) , pokrenuće se pojedinačna aktivnost proizvoda ako postoji put nakon puta / products . Ako nije, tada se pokreće aktivnost popisa proizvoda.

Vrlo je važno to definirati. Ako postoje dvije aktivnosti koje odgovaraju istom putu, Trgovina Play neće znati koji dio aplikacije treba dohvatiti.

Povežite svoju aplikaciju sa svojom domenom

Assetlinks.json će morati sadržavati vaše SHA256 ključeva hash vrijednosti. Polje relacije postavljeno je na zadanu vrijednost u nastavku, a ciljni objekt treba ispuniti podacima specifičnim za aplikaciju i vašim hashom SHA256 pohrane ključeva.

[{ "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"] } }]

Kada autoVerify = true učini svoju čaroliju, sve povezane poveznice aplikacija izravno će pokrenuti vašu aplikaciju. Ako nemate instaliranu aplikaciju, instant aplikacija će se umjesto nje preuzeti.

Evo primjera demo aplikacije koju smo nedavno napravili. Kada se klikne na povezanu vezu, otvara se zaslon poput ovog i nudi upotrebu trenutačne aplikacije. Imajte na umu kako se brzo aplikacija otvara, a na Oreo je to još brže.

Kako definirati trenutne module Androida?

Za trenutnu aplikaciju vaš će se projekt sastojati od najmanje tri različita modula. Za to morate koristiti Android Studio 3.0. Ako svoju aplikaciju izrađujete od nule, postoji opcija za omogućavanje podrške trenutne aplikacije za vaš projekt.

Svi sljedeći moduli bit će automatski inicijalizirani. Ako mijenjate stariju aplikaciju, morat ćete razbiti stari modul aplikacije u jedan osnovni modul i nekoliko modula značajki. Također ćete trebati izraditi aplikaciju i modul instant aplikacije koje ćete koristiti za izradu APK-ova redovnih i instant aplikacija.

Modul aplikacije

Prvo, morate stvoriti modul aplikacije koji definira ovisnosti za sve ostale module (osnovni + moduli značajke). U datoteci build.gradle ovog modula trebat ćete definirati sljedeće:

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

Osnovni modul

U ovom modulu definirat ćete sljedeće izjave ovisnosti. Također, pobrinite se da je ovdje primijenjen dodatak 'com.android.feature' .

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') }

Imajte na umu da ovdje izrazi prevođenja postaju API izrazi za redovite ovisnosti koje smo prije koristili. Aplikacijski i značajni projekti definirani su odvojeno.

Modul značajke

Ovaj će modul imati slijedeću postavku, također s primijenjenim dodatkom com.android.feature .

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

Morate navesti koji je modul vaš osnovni modul i uključiti ga u izjavu o projektu implementacije. Dalje, možete uključiti ovisnosti koje su potrebne samo za ovaj određeni modul. Na primjer, ako koristite knjižnicu animacija koja se ne koristi ni u jednom drugom modulu.

Modul trenutne aplikacije

Napokon, sada postoji dodatak com.android.instantapp koji se uključuje u datoteku build.gradle za instantapp modul.

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

U ovom ćemo modulu definirati koji će se moduli graditi kao trenutne aplikacije. Rezultat izgradnje instantapp modula je zip datoteka s APK-ovima trenutne aplikacije koju možete zasebno prenijeti u Google Play Store u upravitelju izdanja Instant Apps za Android. Tim se APK-ovima rukuje slično kao i sa uobičajenim, oni imaju vlastitu povijest uvođenja i verzije.

To je to! Prilično je jednostavno započeti razvoj trenutnih aplikacija za Android. Ali, uvijek postoji ali!

Koji su bili izazovi instant aplikacija za Android?

First of all, the Instant Apps are not enabled by default for now. If you want to try it, you need to check your phone settings under Google account and enable the Instant Apps setting.

Next, we found that it’s extremely important to specify app links data in the following format:

 ...   

Both http and https schemes need to be defined as shown in this code snippet. Any other way would cause a link verification failure and the app wouldn’t be linked properly.

Also, there is a recommendation to include the following code snippet into one of the activities in your app manifest. This annotates which activity should be launched in case the Instant app is launched from the Settings or a system launcher.

The official documentation states that the Google Search would offer Instant app annotation by default (small thunder icon), but we had problems with it. For our demo app, this was not the case. Google Search results didn’t annotate our demo links as Instant apps and the links led to the web page. Only if we tried to open the associated link from another app, like Gmail, the whole instant app process was triggered and the instant app was launched. Have you encountered any similar problems?

Conclusion

When first announced two years ago, I was very enthusiastic about Android Instant Apps. They respond to the problem of users having to search for the apps on the Store and wait till they’re downloaded to start using them. Web apps are much more accessible in that regard and the ease of discovery is much better.

Instant apps come really close to filling this gap between web and native mobile apps. They already act very well and I think that they will become more popular with time. The main problems we encountered was a rather small community and the lack of proper documentation, but the situation on that matter is also getting better.

We would love to hear from you if you’ve tried using them or had any challenges implementing them!

Originally published at www.bornfight.com.