Android Instant Apps 101: Was sie sind und wie sie funktionieren

Android Instant Apps sind eine coole neue Möglichkeit, native Apps ohne vorherige Installation zu nutzen. Nur Teile der App werden heruntergeladen und gestartet, sodass die Benutzer in wenigen Sekunden ein natives Erscheinungsbild erhalten.

Wie arbeiten Sie?

Verwechseln Sie sie zunächst nicht mit Progressive Web Apps, bei denen ein Startsymbol eine Web-App über den Chrome-Browser öffnet. Eine Sofort-App wird tatsächlich auf Ihrem Telefon installiert, ohne dass Sie im Play Store danach suchen müssen.

Web-URLs lösen den Google Play Store auf Ihrem Telefon aus und rufen nur den Teil der App ab, der der angeforderten URL zugeordnet ist. Der Rest der App wird nicht heruntergeladen. Auf diese Weise können Benutzer schnell die native Erfahrung Ihrer Android-Anwendung genießen.

Was ist der Hintergrund?

Nun, Sie müssen Ihr Android-Projekt in mehrere Module aufteilen. Eines davon ist ein Basismodul mit dem wesentlichen Code, der in allen anderen Modulen (API-Verbindung, Datenbank, gemeinsame Einstellungen usw.) verwendet wird. Die anderen Funktionsmodule enthalten bestimmte Funktionen und Aktivitäten, auf die über zugehörige URLs zugegriffen werden kann.

Angenommen, Sie haben eine Web-App mit einer Produktliste und einer einzelnen Seite des Produkts. Sie können beispielsweise //example.domain/products verknüpfen , um die ProductsListActivity zu starten, und //example.domain/products/12 , um die ProductActivity zu starten.

Um sie als sofortige App-Aktivitäten zugänglich zu machen, müssen sie in einzelne Funktionsmodule gepackt und in ihren Modulmanifesten zugeordnete App-Links definiert sein. Wir werden sie Produkt- und Produktlistenmodule nennen.

Wenn ein Benutzer versucht, //example.domain/products/12 zu öffnen , werden sowohl das Produkt- als auch das Basismodul heruntergeladen und die ProductActivity gestartet.

Was sind App-Links und wie sind sie definiert?

Sie haben wahrscheinlich von Deep Links gehört. Sie werden im App-Manifest definiert und beim Betriebssystem registriert. Wenn ein Benutzer versucht, einen solchen Link zu öffnen, fordert das Betriebssystem den Benutzer auf, zwischen dem Öffnen des Links in einem Webbrowser oder in Ihrer App zu wählen. Dies ist jedoch nicht genug für Instant-Apps. Sie müssen noch einen Schritt weiter gehen - App-Links. Sie müssen die Eigenschaft autoVerify = "true" einschließen .

Ihre App überprüft, ob die von Ihnen angegebenen Links wirklich mit Ihrer Domain verknüpft sind. Dazu müssen Sie die Datei assetlinks.json in den folgenden Ordner Ihres Domänenstamms aufnehmen:

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

Beachten Sie auch die Eigenschaft android: order = "100" . Dies ist in diesem Fall tatsächlich eine Priorität. Wenn Sie eine Produktliste und eine Produkt-Single haben, die demselben Pfad entsprechen (/ products und / products / 10) , wird die Produkt-Single-Aktivität gestartet, wenn nach dem Pfad / products eine ID steht . Wenn nicht, wird die Produktlistenaktivität gestartet.

Es ist sehr wichtig, dies zu definieren. Wenn zwei Aktivitäten demselben Pfad entsprechen, weiß der Play Store nicht, welcher Teil der App abgerufen werden soll.

Verknüpfen Sie Ihre App mit Ihrer Domain

Die Datei "Assetlinks.json " muss Ihre SHA256-Keystore-Hashes enthalten. Das Beziehungsfeld wird auf den folgenden Standardwert gesetzt, und das Zielobjekt muss mit app-spezifischen Daten und Ihrem SHA256-Hash des Schlüsselspeichers gefüllt werden.

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

Wenn autoVerify = true seine Wirkung entfaltet, werden alle zugehörigen App-Links Ihre App direkt starten. Wenn Sie die App nicht installiert haben, wird stattdessen die Sofort-App heruntergeladen.

Hier ist ein Beispiel für eine Demo-App, die wir kürzlich erstellt haben. Wenn Sie auf den zugehörigen Link klicken, wird ein Bildschirm wie dieser geöffnet, in dem Sie stattdessen die Sofort-App verwenden können. Beachten Sie, wie schnell die App geöffnet wird und auf Oreo sogar noch schneller.

Wie definiere ich Android Instant Module?

Für eine Sofort-App besteht Ihr Projekt aus mindestens drei verschiedenen Modulen. Sie müssen hierfür Android Studio 3.0 verwenden. Wenn Sie Ihre App von Grund auf neu erstellen, können Sie die Sofort-App-Unterstützung für Ihr Projekt aktivieren.

Alle folgenden Module werden automatisch initialisiert. Wenn Sie eine ältere App ändern, müssen Sie das alte App-Modul in ein einzelnes Basismodul und mehrere Funktionsmodule aufteilen. Außerdem müssen Sie eine App und ein Instant App-Modul erstellen, mit denen Sie sowohl reguläre als auch Instant App-APKs erstellen.

App-Modul

Zunächst müssen Sie ein App-Modul erstellen, das die Abhängigkeiten für alle anderen Module (Basis + Funktionsmodule) definiert. In der Datei build.gradle dieses Moduls müssen Sie Folgendes definieren:

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

Basismodul

In diesem Modul definieren Sie die folgenden Abhängigkeitsanweisungen. Stellen Sie außerdem sicher, dass das Plugin 'com.android.feature' hier angewendet wird.

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

Beachten Sie, dass hier die Kompilierungsanweisungen zu API-Anweisungen für die zuvor verwendeten regulären Abhängigkeiten werden. Das Anwendungsprojekt und die Feature-Projekte werden separat definiert.

Funktionsmodul

Dieses Modul hat die folgende Einstellung, auch wenn das Plugin com.android.feature angewendet wird.

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

Sie müssen angeben, welches Modul Ihr Basismodul ist, und es in die Implementierungsprojektanweisung aufnehmen. Als Nächstes können Sie die Abhängigkeiten angeben, die nur für dieses bestimmte Modul erforderlich sind. Zum Beispiel, wenn Sie eine Animationsbibliothek verwenden, die in keinem der anderen Module verwendet wird.

Instant App-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.