Wat zijn Android Instant-apps?

Telkens wanneer u een Android-app vrijgeeft, heeft u op zijn minst een idee van wat u met deze app wilt bereiken. 

Deze doelen kunnen heel specifiek zijn, zoals het genereren van een bepaald aantal advertentie-inkomsten in het eerste kwartaal, of ze kunnen algemener zijn, zoals een hoge beoordeling krijgen op Google Play.

Wat er nog meer op uw verlanglijstje staat, uw app voor zoveel mogelijk gebruikers laten verschijnen altijd ergens in die lijst zal verschijnen - en Android Instant Apps is een nieuwe functie die u daarbij kan helpen.

Instant-apps bieden u een geheel nieuwe manier om gebruikers te bereiken die uw app momenteel niet op hun apparaat hebben geïnstalleerd, door uw app vindbaar en toegankelijk te maken vanaf elke locatie die URL's ondersteunt, inclusief e-mails, zoekresultaten van Google, berichten op sociale media platforms, YouTube-opmerkingen en forums.

In feite kunt u met Instant Apps elk van de functies van uw app scheiden in een zelfstandige module. Gebruikers kunnen vervolgens onmiddellijk een van deze modules voor instant-apps laden door op een URL te tikken die u aan deze specifieke module hebt toegewezen, en zonder je app op elk gewenst moment moet installeren.

In deze driedelige serie laat ik je zien hoe je instant-app-ondersteuning kunt toevoegen aan je Android-projecten. Aan het einde van deze serie hebt u een toepassing gemaakt die bestaat uit twee afzonderlijke instantiemodule voor instant-apps, die u kunt starten en testen op elk compatibel Android-apparaat.. 

Wat we gaan dekken

In dit eerste bericht zal ik me concentreren op wat Instant-apps zijn, hoe ze werken en waarom je om ze moet geven. Om u een directe ervaring met Instant Apps te bieden, zullen we de projectcreatie-wizard van Android Studio gebruiken om een ​​app te genereren die vooraf is geconfigureerd met ondersteuning voor Instant-apps, zodat u alle verschillende Instant App-componenten kunt bekijken dan alleen maar over ze te lezen.

Hoewel het maken van een app die vooraf is geconfigureerd met Instant App-ondersteuning de snelste en eenvoudigste manier is om deze functie te gebruiken, is het in werkelijkheid veel waarschijnlijker dat u instant-app-ondersteuning toevoegt aan een bestaand project. Dus in deel twee laat ik u zien hoe precies dat te doen. Ik zal een app leveren die u kunt downloaden van GitHub en vervolgens door het stapsgewijze proces van het opnieuw configureren van dit project leiden om Instant-apps te ondersteunen.

Het laatste stukje van de puzzel is het maken van een veelzijdige Instant-app, dus in deel drie laat ik zien hoe je een tweede functiemodule toevoegt aan je applicatie en hoe je Android-app-links gebruikt om deze module aan een andere URL te koppelen.. 

Wat zijn Instant-apps?

Een van de beste manieren om Instant Apps te beschrijven, is door een voorbeeld te bekijken van wanneer u ze zou kunnen gebruiken.  

Stel je voor dat een vriend je een link naar een kattenvideo heeft gestuurd die ze je beloven te gaan doen liefde, maar als je op de link tikt, wordt het duidelijk dat je een app moet downloaden voordat je deze specifieke video kunt bekijken.  

Ongeacht of u de app uiteindelijk downloadt of de link negeert en het risico loopt de beste kattenvideo te missen die internet te bieden heeft, dit is een slechte gebruikerservaring - en het is een scenario dat veel Android-gebruikers kennen. 

De meesten van ons hebben de ervaring gehad om een ​​app te installeren om een ​​eenmalige taak te voltooien. U kunt bijvoorbeeld een app downloaden om een ​​e-mailbijlage te bekijken die iemand u heeft gestuurd, om een ​​aankoop op een specifieke website te voltooien of om een ​​pakket te traceren dat momenteel op weg is naar uw adres.

Stel nu ons katvideoscenario opnieuw voor, maar deze keer heeft de ontwikkelaar van de app alle code en bronnen die nodig zijn om video-inhoud te spelen in zijn eigen instant-app-functiemodule geplaatst en deze module toegewezen aan de www.example.com/video URL. Deze keer wanneer u op www.example.com/video/cat-video tikt, erkent Google Play dat deze URL is gekoppeld aan een instant-appmodule en alle code en bronnen ophaalt die u nodig hebt om deze video af te spelen. Het eindresultaat? Je kunt 20 seconden spelen van een kat die in een doos speelt zonder iets te hoeven installeren, wat een veel betere gebruikerservaring.  

Waarom zou ik beginnen met het gebruik van de instant-app-functie?

Zoals u zult zien in het volgende bericht in deze serie, kan het toevoegen van Instant App-ondersteuning aan een bestaand project een ontmoedigend proces zijn, waarbij u vaak de manier moet veranderen waarop uw toepassing is gestructureerd.

Omdat het herstructureren van een project geen besluit is dat je ooit licht zou moeten nemen, ga ik in deze sectie je helpen beslissen of al die tijd en moeite echt de moeite waard is, door alle belangrijke voordelen te dekken van het toevoegen van Instant App-ondersteuning aan je projecten:

  • Het verwijdert een barrière tussen uw app en nieuwe gebruikers. Het installeren van een applicatie via Google Play is geen bijzonder moeilijk of tijdrovend proces, maar het is nog steeds de grootste barrière tussen uw app en potentiële nieuwe gebruikers. Ongeacht hoeveel tijd je besteedt aan het maken van een aantrekkelijke Google Play-pagina waar de meeste gebruikers voor moeten klauteren Installeren knop, sommige mensen zullen altijd drop-out tijdens de installatie. 
  • Het helpt u nieuwe gebruikers te bereiken. Hoewel u uw app altijd op verschillende locaties op internet heeft kunnen promoten, zoals uw eigen website, blog of sociale media, heeft het verbinden met nieuwe gebruikers er eerder op vertrouwd dat ze de Google Play-pagina van uw app ooit hebben bezocht (met de zeldzame uitzondering van gebruikers die hun apps sideloaden). Instant-apps verwijderen deze afhankelijkheid van de Google Play-pagina van uw app door uw app direct toegankelijk te maken vanaf elke locatie die URL's ondersteunt, waardoor u bijna onbeperkte mogelijkheden hebt om verbinding te maken met nieuwe gebruikers. 
  • Het zorgt ervoor dat gedeelde inhoud de best mogelijke advertentie voor uw app is. Een gebruiker die de inhoud van uw app deelt, is een van de meest effectieve manieren om een ​​nieuw publiek te bereiken, dus u wilt een goede eerste indruk maken! Voorheen was het moeilijk om een ​​consistente ervaring te bieden aan gebruikers die uw app niet op hun apparaat hebben geïnstalleerd, maar met instant-apps kunt u een naadloze, native-ervaring garanderen voor iedereen.
  • Helpt gebruikers toegang te krijgen tot uw app, zelfs in het kader van internetbeperkingen. Hoewel de berichtgeving over het internet voortdurend verbetert, kunt u nog steeds af en toe moeite hebben om een ​​snel en betrouwbaar netwerk te vinden, of misschien nadert u uw maandelijkse gegevens en maakt u zich zorgen over extra kosten. Wanneer u worstelt met een trage of inconsistente internetverbinding, kan het downloaden van een volledige app een tijdrovend en frustrerend proces zijn en wanneer u uw gegevensoverdracht dreigt te overschrijden, kan het downloaden van een nieuwe app voldoende zijn om Bijkomende kosten. Alle instant-app-modules moet 4 MB of minder zijn, dus zelfs als het downloaden van een hele app uit de vraag is, is toegang tot een instant-appmodule nog steeds een haalbare optie. 
  • Vergroot de aantrekkingskracht van locatie- en tijdgevoelige apps. Hoewel apps die zijn ontworpen voor een specifieke locatie of evenement geen nieuw concept zijn, vraagt ​​u zich af: hoe waarschijnlijk ben ik dat ik een app installeer waarvan ik weet dat ik deze slechts gedurende een beperkte periode kan gebruiken, of in een bepaalde locatie? Instant-apps kunnen de aantrekkelijkheid van tijd- en locatiegevoelige apps vergroten, doordat de gebruiker via één tik op de URL toegang heeft tot alle belangrijkste functies van uw app. 

Beperkingen en beperkingen

Voordat we onze instant-reis van de app starten, is het de moeite waard om op te merken dat er momenteel een paar dingen zijn die instant-apps zijn kan niet do:

  • Toegang tot apparaat-ID's zoals IMEI- en MAC-adressen.
  • Gebruik achtergrondservices.
  • Voer achtergrondmeldingen uit. 
  • Toegang tot de externe opslag van het apparaat.
  • Krijg toegang tot de lijst met apps die op het apparaat van de gebruiker zijn geïnstalleerd, tenzij die apps specifiek zichtbaar zijn voor instant-apps.

Bovendien moet uw aanvraag: 

  • U kunt gratis downloaden van de Google Play Store.
  • Gebruik het nieuwe toestemmingsmodel dat is geïntroduceerd in Android 6.0 (API-niveau 23). Aangezien de gebruiker geen instant-app installeert, is er geen mogelijkheid om vooraf machtigingen aan te vragen. Als de module (s) voor de instant-app-functie toegang moeten hebben tot gevoelige apparaatmogelijkheden of gebruikersinformatie, moet u deze rechten tijdens runtime aanvragen. 
  • Ondersteun app-links. Dit is het mechanisme dat u zult gebruiken om elk van uw instant-appmodules toe te wijzen aan een specifieke URL. Ik zal App Links in het volgende bericht in detail bespreken. 

Als uw app tot slot deel uitmaakt van het Designed for Families-programma, kunt u deze niet als instant-app aanbieden. 

Uw ontwikkelingsomgeving instellen

Voordat u uw eerste project met directe app-ondersteuning kunt maken, moet u het volgende of een hogere geïnstalleerd hebben:

  • Android Studio 3.0 Preview
  • Android SDK 6.0
  • Android SDK Build Tools 26.x
  • Android SDK Tools 25.x
  • Android SDK Platform Tools 25.x

Je moet ook zorgen dat je de nieuwste versies van de Android Support Library en Android Repository hebt, dus open de SDK Manager van Android Studio en installeer eventuele beschikbare updates. 

Zodra u al het bovenstaande heeft geïnstalleerd, kunt u de SDK voor Instant Apps-ontwikkeling downloaden: 

  • Open de SDK Manager en selecteer de SDK Tools tab. 
  • kiezen Instant Apps Development SDK.
  • Klik Van toepassing zijn.

Momenteel kunt u alleen instant-apps testen op een Nexus 5X, Nexus 6P, Pixel, Pixel XL of een Galaxy S7 met Android 6.0 of hoger. Als u echter geen van deze apparaten bezit, kunt u een Android Virtual Device (AVD) maken dat een van deze apparaten emuleert, met enkele voorwaarden: de AVD moet een x86-afbeelding gebruiken en deze moet de Google API's bevatten.

Omdat ik geen van deze apparaten bezit, ga ik een AVD maken die een pixel emuleert: 

  • Start de AVD Manager.
  • Klik op de Maak een virtueel apparaat ... knop.
  • kiezen Pixel, en klik vervolgens op volgende.
  • Selecteer de x86 Afbeeldingen tab. 
  • Selecteer een systeemkopie waarop Android 6.0 wordt uitgevoerd en bevat bijvoorbeeld de Google API's Marshmallow / 23 / x86 / Android 6.0 (Google API's).
  • Klik volgende.
  • Geef uw AVD een naam en klik op Af hebben.
  • Start uw AVD.

Ten slotte moet u zich aanmelden bij een Google-account op uw AVD:

  • Schakel over naar uw AVD en open het opstartprogramma van het apparaat.
  • Selecteer de Google app.
  • Voer een Gmail-adres en wachtwoord in. Dit kan uw echte account zijn of een account dat u uitsluitend heeft gemaakt om uw Android-projecten te testen. 

Uw eerste instant-app maken 

In Android Studio 3.0 Preview 1 en hoger is het maken van een project met ingebouwde Instant App-ondersteuning net zo eenvoudig als het selecteren van een selectievakje, dus in plaats van alleen de functies van Instant-apps te beschrijven, gaan we een Instant-app-project maken en vervolgens uitgeven de rest van dit artikel krijgt wat ervaring uit de eerste hand met zijn verschillende componenten. 

Houd er rekening mee dat dit project geen app-links bevat, dus u kunt de Instant App-componenten niet testen op uw AVD (dit zullen we in deel twee in detail bekijken).

Om uw project te maken:

  • Start de wizard voor het maken van projecten door te selecteren Bestand> Nieuw> Nieuw project ... via de Android Studio-werkbalk of door te klikken op Start een nieuw Android Studio-project van Android Studio's Welkom scherm. 
  • Geef uw project een naam en klik volgende
  • Stel de Minimale SDK naar Android 6.0 (Marshmallow). 
  • Selecteer de Ondersteuning voor Android Instant-apps opnemen selectievakje en klik op volgende
  • Om de zaken eenvoudig te houden, accepteert u de standaardmoduulnaam (voorzien zijn van) en klik vervolgens op volgende.
  • kiezen Basisactiviteit en klik vervolgens op volgende.
  • Accepteer op het volgende scherm alle standaardwaarden en klik vervolgens op Af hebben.

Meteen kunnen we zien dat dit project heel anders is gestructureerd dan je typische Android-project en dat het uit de volgende modules bestaat:

  • App. De installeerbare app-module, ook wel een APK-module genoemd. 
  • Baseren. De basismodule.
  • Voorzien zijn van. Hoewel dit specifieke project er maar één heeft, kan een applicatie uit meerdere featuremodules bestaan.
  • Instantapp. De instant-app-module. 

Met uitzondering van de featiemodule, elk project dat instant-apps ondersteunt moet hebben alle bovenstaande modules, dus laten we elk van deze modules in detail bekijken.  

1. Applicatiemodule

Het concept van een applicatiemodule is misschien niets nieuws, maar wanneer uw project instant-apps ondersteunt, ziet het Manifest van de applicatiemodule er veel leger uit dan u waarschijnlijk gewend bent: 

Er is een reden waarom dit bestand zo leeg is: wanneer je je project bouwt, de inhoud van alle andere Manifest-bestanden die zich in je hele basis functie en voorzien zijn van modules worden samengevoegd met dit bestand, dus het blijft niet voor altijd leeg! 

Als u deze modules opent build.gradle bestand, dan merk je twee nieuwe elementen: 

afhankelijkheden implementatieproject (': feature') implementatieproject (': base')

Hier verklaren we dat onze applicatiemodule een afhankelijkheid heeft van de voorzien zijn van module en baseren module. 

Wanneer u ondersteuning voor instant-apps aan een project toevoegt, scheidt u gerelateerde code en bronnen in featuremodules die onafhankelijk van de installeerbare toepassing kunnen functioneren. Deze modules vormen echter nog steeds delen van uw installeerbare app in plaats van afzonderlijke entiteiten. Daarom verklaart onze toepassingsmodule de functie- en basismodules als afhankelijkheden..

2. Base Feature-module

Elk instant-app-project moet een module met één basisfunctie bevatten, die de code en bronnen bevat die in alle modules van uw toepassing worden gebruikt. Bijvoorbeeld als u onze projecten opent base / res / mipmap map, dan zie je alle lanceer-iconen van de applicatie, die duidelijk in meerdere modules zullen worden gebruikt. 


Omdat het gemeenschappelijke code en bronnen bevat, allemaal van de kenmerkmodules van uw project is afhankelijk van deze module met enkelvoudige basisfunctie. 

Als u dit thema voortzet, bevat de basismeldingsmodule de Manifest-vermeldingen die in uw gehele project worden gebruikt. Bijvoorbeeld uw project base / src / main / AndroidManifest.xml bestand bevat de instellingen voor het pictogram, het thema en het label van uw toepassing: 

   

Het andere opvallende element is de basismodule build.gradle bestand, dat een paar nieuwe attributen bevat:

// Alle basisfuncties en "reguliere" functiemodules gebruiken de plugin com.android.feature in plaats van de plugin com.android.app // apply plugin: 'com.android.feature' android compileSdkVersion 26 buildToolsVersion "26.0.0 "// Specificeer dat dit de enige basisfunctie van het project is, gebruikmakend van de 'baseFeature true'-expressie // baseFeature true ... ... ... afhankelijkheden // Gebruik' applicatieproject 'om een ​​afhankelijkheid van de basismogelijkhedenmodule toe te voegen aan uw project installeerbare 'app' module // applicatie project (': app') // Gebruik 'feature project' om te verwijzen naar de feature module van ons project, toepasselijk genaamd 'feature' // feature project (': feature') 

Je zult ook merken dat dit bijzonder is build.gradle bestand ontbreekt een Applicatie ID attribuut, en (spoiler alert) vind je precies hetzelfde wanneer we onze feature-modules komen inspecteren build.gradle het dossier. Onze projecten Applicatie ID wordt gedeclareerd in de applicatiemodules build.gradle het dossier enkel en alleen.

De applicatie project (:app) regel in onze basismodules build.gradle bestand (zie hierboven) zorgt ervoor dat de single van het project Applicatie ID attribuut wordt overgezet allemaal van onze build.gradle bestanden, dit is waarom dit kenmerk ontbreekt in de rest van ons project. 

3. Feature-module

Wanneer u uiteindelijk Instant App-ondersteuning gaat toevoegen aan een bestaand project, is uw grootste taak het extraheren van elk van de functies van uw toepassing in zijn eigen functiemodule, omdat elke functiemodule de code en bronnen bevat die nodig zijn om deze functie te leveren enkel en alleen. 

Als je onze projecten opent voorzien zijn van module, dan zult u zien dat het de bevat Hoofdactiviteit klas, plus activity_main en content_main bronbestanden - in essentie alle componenten die zijn opgenomen in de Basisactiviteit sjabloon.  

Een module met een enkele functie kan uit meerdere activiteiten bestaan, maar elke module moet ten minste één activiteit hebben die is aangewezen als beginpunt voor deze module.. 

Elke startpuntactiviteit is toegewezen aan een specifieke URL, zodat wanneer de gebruiker op deze URL tikt, de bijbehorende activiteit wordt geladen en de gebruiker toegang heeft tot deze specifieke kenmerkmodule. 

U duidt de startpuntactiviteit van een module aan via het manifest van die module. In essentie moet u dit bestand openen en het volgende toevoegen aan de activiteit die u als uw startpunt wilt gebruiken: 

  • Een intent filter, met de CATEGORY_LAUNCHER en ACTION_MAIN intenties.
  • EEN element met alle informatie over de URL die u wilt toewijzen aan deze ingangspunt Activiteit. 
  • De android: autoVerify attribuut. Dit vertelt het systeem om te controleren of uw app toestemming heeft om op te treden als standaard handler voor deze specifieke URL. Dit is een belangrijk beveiligingsmechanisme dat eigenaren van websites helpt beschermen tegen kwaadwillende apps die hun URL's proberen te kapen.

Als u het manifestbestand van onze featiemodule opent, ziet u dat al deze code al aan ons is toegevoegd Hoofdactiviteit verklaring:

            

Het laatste bestand dat we in deze module gaan bekijken, is het build.gradle bestand, dat een paar regels opmerkelijke code bevat: 

// Nogmaals, we gebruiken com.android.feature plugin, in plaats van com.android.application // apply plugin: 'com.android.feature' android // Zoals eerder vermeld, ontbreekt in dit gedeelte een 'applicationID' attribute // ... ... ... dependencies implementatie fileTree (dir: 'libs', include: ['* .jar']) androidTestImplementation ('com.android.support.test.espresso: espresso-core: 2.2.2',  exclude group: 'com.android.support', module: 'support-annotaties') // Alle feature-modules hebben een afhankelijkheid van de base feature-module, die we hier verklaren // implementatieproject (': base') testImplementation 'junit: junit: 4.12' 

Omdat alle kenmerkmodules afhankelijk zijn van de basismeldingsmodule, is dit de eerste keer dat de gebruiker daarom vraagt ieder functie van uw toepassing ontvangen, ontvangen zij de basisfunctie-module plus de feature-module die ze proberen te openen. 

Merk op dat dit specifieke project weliswaar bestaat uit een module met basisfuncties en een functiemodule, als uw app slechts één functie heeft die u beschikbaar wilt stellen als een instant-app, dan is het mogelijk om een ​​project te maken dat bestaat uit een basismodule enkel en alleen. We zullen in deze serie kijken naar beide typen van Instant App-projecten. 

4. Instant App-module

De Instant App-module heeft een eenvoudig doel: het fungeert als een container die al uw featuremodules neemt en deze verandert in Instant App APK's.

Als u de module Instant-app van dit project opent, ziet u dat deze vrijwel leeg is, afgezien van a build.gradle bestand, dat simpelweg uw basiskenmerkmodule en uw featiemodule declareert als afhankelijkheden:

plug-in toepassen: 'com.android.instantapp' afhankelijkheden implementatieproject (': feature') implementatieproject (': base')

Uw app testen

Omdat dit project geen app-links bevat, kunnen we de instant-app-componenten niet testen, maar we kunnen dit project nog steeds uitvoeren als een installeerbare app. Dit lijkt misschien niet bijzonder spannend, maar als we bedenken dat het grootste deel van de code en bronnen van ons project zich bevinden in de instant-feature-module, is het belangrijk om te testen hoe ons project functioneert als een installeerbare applicatie. 

Start de AVD die we eerder hebben gemaakt of sluit een compatibele fysieke Android-smartphone of -tablet aan op uw ontwikkelingsmachine en selecteer vervolgens Uitvoeren> Uitvoeren ...> app van de Android Studio-werkbalk. 

Ondanks het feit dat al onze Hoofdactiviteit code bevindt zich in de feature-module, zodra onze app wordt geladen, ziet u de Hoofdactiviteitdrijvende actieknop (FAB) en Hallo Wereld bericht. Wat we hier zien, is dat onze toepassingsmodule code en bronnen neemt die zich bevinden in afzonderlijke Instant App-functies en basismodemodules, en deze combineren in een installeerbare app. 

Conclusie 

In deze zelfstudie hebben we op hoog niveau bekeken hoe Instant-apps werken en hebben we de verschillende redenen onderzocht waarom u Instant-app-ondersteuning wilt toevoegen aan uw Android-projecten.. 

In een ideale wereld zou je beslissing om Instant Apps te gaan verkennen perfect samenvallen met de start van een nieuw Android-project, maar helaas is een ontwikkelaar zelden handig! Het is veel waarschijnlijker dat u een bestaand project opnieuw moet configureren om Instant Apps te ondersteunen, wat niet het geval is heel zo eenvoudig als het selecteren van een selectievakje in de projectaanmaakwizard van Android Studio! 

In het volgende bericht gaan we dieper in op het toevoegen van instant-app-ondersteuning aan een bestaand project. Ik zal je ook laten zien hoe je app-links kunt implementeren, dus aan het einde van het volgende bericht heb je een volledig functionerende instant-app gemaakt die je kunt starten en testen op elk compatibel AVD- of Android-apparaat.. 

.