Android Instant Apps 101: mik ők és hogyan működnek

Az Android Instant Apps egy újszerű módszer a natív alkalmazások fogyasztására előzetes telepítés nélkül. Az alkalmazás csak egyes részeit tölti le és indítja el, így pár másodperc alatt natív megjelenést és érzetet kölcsönöz a felhasználóknak.

Hogyan működnek?

Először is, ne keverje össze őket a Progresszív Webalkalmazásokkal, ahol az indító ikon megnyit egy webalkalmazást a Chrome böngészőn keresztül. Az Azonnali alkalmazást valóban telepítik a telefonjára, de nem kell rákeresni a Play Áruházba.

A webes URL-ek aktiválják a Google Play Áruházat telefonján, és az alkalmazásnak csak azt a részét kapják le, amely társítva van a kért URL-hez. Az alkalmazás többi része nincs letöltve. Így a felhasználók gyorsan élvezhetik az Android alkalmazás natív élményét.

Mi a háttér?

Nos, el kell osztania az Android projektjét pár modulra. Az egyik egy alapmodul az alapvető kóddal, amelyet minden más modulban használnak (API kapcsolat, adatbázis, megosztott beállítások stb.). A másik funkciómodul speciális funkciókat és tevékenységeket tartalmaz, amelyekhez a társított URL-eken keresztül lehet hozzáférni.

Tegyük fel, hogy rendelkezik webalkalmazással, amely tartalmazza a termékek listáját és a termék egyetlen oldalát. Összekapcsolhatja például a //example.domain/products terméket a ProductListActivity elindításához, és //example.domain/products/12 a ProductActivity elindításához.

Ahhoz, hogy azonnali alkalmazástevékenységként hozzáférhetővé váljanak, egyedi funkciómodulokba kell csomagolni őket, és a moduljegyzékekben meg kell adni a társított alkalmazáslinkeket. Termék és terméklista moduloknak hívjuk őket.

Most, amikor a felhasználó megpróbálja megnyitni a //example.domain/products/12 fájlt , mind a Product, mind az Base modulok elkezdődnek a letöltésben, és elindul a ProductActivity.

Mik az alkalmazáslinkek és hogyan definiálják őket?

Valószínűleg hallott mély kapcsolatokról. Az alkalmazásjegyzékben vannak meghatározva, és regisztrálásra kerülnek az operációs rendszerben. Amikor a felhasználó megpróbálja megnyitni az ilyen linket, az operációs rendszer megkéri a felhasználót, hogy válasszon a link megnyitása között egy webböngészőben vagy az alkalmazásában. Ez azonban nem elegendő az azonnali alkalmazásokhoz, tovább kell lépnie - App Links. Be kell foglalnia az autoVerify = ”true” tulajdonságot.

Az alkalmazás ellenőrzi, hogy a megadott linkek valóban társítva vannak-e a domainjéhez. Ehhez be kell illesztenie az assetlinks.json fájlt a domaingyökér következő mappájába:

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

Figyelje meg az android: order = ”100” tulajdonságot is. Ez ebben az esetben tulajdonképpen prioritás. Ha van egy terméklista és egy termék, amely megfelel ugyanannak az útvonalnak (/ termékek és / termékek / 10) , akkor a termék egyetlen tevékenysége elindul, ha a / termékek elérési útja után van egy azonosító . Ha nem, akkor elindul a terméklista tevékenység.

Nagyon fontos ennek meghatározása. Ha két tevékenység felel meg ugyanarra az útvonalra, a Play Áruház nem tudja, hogy az alkalmazás mely részét kell letölteni.

Társítsa alkalmazását a domainjéhez

Az assetlinks.json- nak tartalmaznia kell az SHA256 kulcstároló kivonatait. A reláció mező az alábbi alapértelmezett értékre van állítva, és a célobjektumot ki kell tölteni alkalmazásspecifikus adatokkal és a kulcstároló SHA256 kivonatával.

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

Amikor az autoVerify = true varázslatot tesz, az összes társított alkalmazáslink közvetlenül elindítja az alkalmazást. Ha még nincs telepítve az alkalmazás, akkor az azonnali alkalmazás kerül letöltésre.

Íme egy példa egy demo alkalmazásra, amelyet nemrégiben készítettünk. Ha a társított linkre kattint, megnyílik egy ilyen képernyő, amely felajánlja az azonnali alkalmazás használatát. Vegye figyelembe, hogy az alkalmazás milyen gyorsan nyílik meg, és az Oreo-n még gyorsabb.

Hogyan definiálható az Android Instant modulok?

Azonnali alkalmazás esetében a projekt legalább három különböző modulból áll. Ehhez az Android Studio 3.0 szoftvert kell használnia. Ha a semmiből hozza létre alkalmazását, lehetősége van engedélyezni az Azonnali alkalmazás támogatását a projektjéhez.

A következő modulok mindegyike automatikusan inicializálódik. Ha egy régebbi alkalmazást módosít, akkor fel kell bontania a régi alkalmazásmodult egyetlen alapmodulra és pár funkciómodulra. Ezenkívül létre kell hoznia egy alkalmazást és egy azonnali alkalmazás modult, amelyek segítségével mind a szokásos, mind az azonnali alkalmazás APK-kat fel fog építeni.

App modul

Először létre kell hoznia egy alkalmazás modult, amely meghatározza az összes többi modul (alap + szolgáltatás modulok) függőségét. A modul build.gradle fájljában a következőket kell megadnia:

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

Alapmodul

Ebben a modulban a következő függőségi utasításokat határozza meg. Győződjön meg arról is, hogy a 'com.android.feature' plugint itt alkalmazta-e.

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

Vegye figyelembe, hogy itt a fordítási utasítások API-utasításokká válnak a korábban használt szokásos függőségekhez. Az alkalmazási és a funkciós projekteket külön határozzák meg.

Feature Module

Ennek a modulnak a következő beállítása lesz, a com.android.feature plugin alkalmazásával is.

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

Meg kell adnia, melyik modul az alapmodulja, és hozzá kell adnia a megvalósítási projekt kimutatásához. Ezután felveheti azokat a függőségeket, amelyek csak ehhez a modulhoz szükségesek. Például, ha olyan animációs könyvtárat használ, amelyet egyik modul sem használ.

Azonnali alkalmazás modul

Finally, now there’s a com.android.instantapp plugin to be included in the build.gradle file for the instantapp module.

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

In this module, we will define which modules will be built as instant apps. The result of the instantapp module build is a zip file with the instant app APKs which you can upload separately to Google Play Store in the Android Instant Apps release manager. These APKs are handled similarly as the regular ones, they have their own rollout history and versioning.

That’s it! It’s fairly simple to start developing Android Instant Apps. But, there’s always a but!

What were the Android Instant Apps’ challenges?

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.