In deze driedelige serie hebben we Android-instant-apps verkend, een nieuwe functie die een geheel nieuwe manier biedt om gebruikers te bereiken die uw app momenteel niet op hun apparaat hebben geïnstalleerd. Het werkt door uw app vindbaar en toegankelijk te maken vanaf elke locatie die URL's ondersteunt, inclusief e-mails, zoekresultaten van Google, berichten op social media-platforms, YouTube-opmerkingen en forums..
In het eerste bericht hebben we gekeken naar wat instant-apps zijn, hoe ze werken en de belangrijkste voordelen die ze beide Android-ontwikkelaars te bieden hebben en Android app-gebruikers. We hebben zelfs praktische ervaring opgedaan met instant-apps door de projectcreatie-wizard van Android Studio te gebruiken om snel en eenvoudig een project te genereren dat vooraf was geconfigureerd om Android-instant-apps te ondersteunen.
In het tweede bericht heb ik de downloadbare MyLocation-voorbeeldapp gebruikt om te laten zien hoe je een bestaand Android-project zou updaten om de instant-apps-functie te ondersteunen. Als je vanaf het begin mee hebt gevolgd, heb je op dit punt het MyLocation-project met succes opnieuw geconfigureerd om een enkele functiemodule op te nemen die kan worden uitgevoerd op elk Android Virtual Device (AVD) zonder je moet de volledige MyLocation-app installeren.
MyLocation bestaat momenteel echter alleen uit een module met een enkele basisfunctie en als het gaat om real-life Android-projecten, wilt u vaak meerdere functies aanbieden in instant-app-vorm. In dit laatste deel laat ik je zien hoe je meerdere featuremodules kunt toevoegen aan je Android-projecten door je door het proces te leiden van het toevoegen van een tweede functiemodule aan MyLocation en deze module vervolgens toe te wijzen aan een andere URL.
Om er zeker van te zijn dat u het maximale uit instant-apps haalt, rondt u deze serie af door enkele praktische tips voor instant-apps te bekijken.
Als u de tweede aflevering hebt voltooid, moet uw versie van het MyLocation-project momenteel worden onderverdeeld in de volgende modules:
MapsActivity
die onafhankelijk van de installeerbare app kan worden uitgevoerd en wordt gestart op het apparaat van de gebruiker wanneer deze toegang probeert te krijgen tot de www.example.com/maps URL.Als dit niet is hoe uw versie van MyLocation er momenteel uitziet, kunt u deze versie downloaden van GitHub.
Voordat we beginnen met het toevoegen van een tweede functiemodule aan MyLocation, zijn er een paar dingen waar je op moet letten.
Ten eerste was het op het moment van schrijven alleen mogelijk om instant-apps te ontwikkelen met behulp van de preview van Android Studio 3.0 en Canary builds. Wanneer u werkt met builds voor vroege toegang, moet u voorbereid zijn op het tegenkomen van bugs, ontbrekende functionaliteit en ander over het algemeen vreemd gedrag dat (hopelijk!) Al voor de stabiele release zal worden aangepakt. Het lijkt echter te werken met meerdere instant-app-functiemodules vooral temperamentvol in de build van Canary Studio 3.0 Canary.
Om het risico op problemen te verkleinen, moet je controleren of je de nieuwste versie van Canary hebt geïnstalleerd voordat je een module met een tweede functie aan het MyLocation-project toevoegt. Echter, als uw project doet ineens beginnen met het gooien van fouten of weigeren om te compileren, dan aan het eind van dit artikel vindt u een sectie Problemen oplossen die oplossingen en mogelijke oplossingen voor alle problemen die u waarschijnlijk tegenkomt bij het toevoegen van extra functie modules aan uw project..
Houd er ook rekening mee dat we in deze zelfstudie een aanvullende functiemodule gaan maken, deze module toewijzen aan een unieke URL en de module vervolgens testen op een Android Virtual Device (AVD). Dit is al een hele weg te behandelen, dus om ervoor te zorgen dat deze post niet te lang wordt, gaan we een module maken die eenvoudig een gebruikersinterface weergeeft en geen echte functionaliteit bevat. Er is echter geen reden waarom u deze module niet zou kunnen uitbreiden met uw eigen code en bronnen, als u een meer authentieke instant-apps-ervaring wilde.
De eerste stap om van MyLocation een instant-app met meerdere functies te maken, is door onze featuremodule te maken:
Mogelijk implementeren we geen echte functionaliteit in onze module mylocation-directions, maar we hebben nog steeds een visuele bevestiging nodig dat deze module correct is geladen, dus selecteer de sjabloon van uw keuze (ik kies voor Basisactiviteit) en klik vervolgens op volgende. Ik ga deze kenmerkmodule toewijzen aan www.example.com/directions, dus begin met invoeren example.com in de Instant-app URL-host veld. Open de Instant-app URL-routetype dropdown en selecteer een van beide Pad, pathPrefix, of pathPattern. Omdat ik wil dat deze module reageert op www.example.com/directions enkel en alleen, Ik ga selecteren Pad.
In de Instant-app URL-route, invoeren /routebeschrijving. Dit geeft ons onze volledige URL: example.com/directions. Verander de Activiteit naam naar DirectionsActivity
. Zorg ervoor dat de Lay-outnaam ingesteld op activity_directions, en klik vervolgens op Af hebben.
Zoals jij mei merkte al op dat een project dat de instant-apps-functie ondersteunt onvermijdelijk uit meerdere modules zal bestaan. Als deze modules samen gaan werken om meerdere verschillende Instant App APK's te maken, plus uw "normale" installeerbare APK, dan moeten ze op de hoogte zijn van elkaar, wat betekent dat u de nodige afhankelijkheden aan elke module moet toevoegen build.gradle
het dossier.
Wanneer u een featiemodule maakt via de Nieuw> Nieuwe module ... menu, Android Studio genereert een paar van deze afhankelijkheden voor u, maar genereert ze niet allemaal. En om zaken nog ingewikkelder te maken, moet u verschillende uitdrukkingen gebruiken, afhankelijk van het type module (s) waarmee u werkt.
Om u een overzicht te geven, moet u elke keer dat u een feature-module maakt, uw project laten weten dat:
implementatieproject
uitdrukking. functie project
uitdrukking.implementatieproject
uitdrukking. In dit gedeelte gaan we naar elk van deze afhankelijkheden, dus laten we beginnen met het doornemen van de afhankelijkheden die Android Studio nuttig automatisch voor u genereert.
implementatieproject (': mylocation-base')
De basismeldingsmodule van uw project bevat alle gemeenschappelijke code en bronnen die in uw project worden gebruikt, dus eventuele extra functiemodules die u maakt, zullen dat ook zijn allemaal afhankelijk van deze module met enkelvoudige basisfunctie.
Als u uw feature-modules opent (MyLocation-richtingen
) build.gradle
bestand, dan ziet u dat Android Studio de basismeldingsmodule (MyLocation-base
) als een afhankelijkheid:
afhankelijkheden ... implementatieproject (': mylocation-base')
Het maakt niet uit hoeveel aanvullende featuremodules u maakt, allemaal build.gradle
bestanden bevatten dezelfde verklaring: implementatieproject (': mylocation-base')
.
functieproject (": mylocatierichtingen")
Uw basismodule moet ook rekening houden met al uw aanvullende kenmerkmodules.
Als u uw MyLocation-base
module build.gradle
bestand, dan zult u zien dat Android Studio opnieuw het werk voor u heeft gedaan en heeft verklaard MyLocation-richtingen
als een afhankelijkheid:
dependencies ... feature project (": mylocation-directions")
Eventueel toegevoegde extra modules worden automatisch aan deze sectie toegevoegd, bijvoorbeeld:
dependencies ... feature project (": mylocation-directions") feature project (": mylocation-share") feature project (": mylocation-search")
Er zijn een paar afhankelijkheden die Android Studio momenteel niet automatisch genereert, dus u moet ze handmatig toevoegen.
implementatieproject (': mylocation-directions')
Instant-apps zijn zelfstandige componenten die onafhankelijk van de installeerbare app kunnen functioneren. In de context van onze MyLocation-app, betekent dit dat MyLocation-richtingen
kan zonder functioneren MyLocation-app
. Het tegenovergestelde is echter niet waar: MyLocation-app
kan niet functioneren zonder MyLocation-richtingen
.
De installeerbare APK moet bevatten allemaal van de modules van uw project, inclusief al uw modules voor instant-app-functies. Daarom moeten we de APK-module (MyLocation-app
) een heads-up over onze nieuwe feature-module (MyLocation-richtingen
).
Open de MyLocation-app
build.gradle bestand en wijs het naar de MyLocation-richtingen
module:
afhankelijkheden implementatieproject (': mylocation-base') // Voeg de volgende regel toe // implementatieproject (': mylocation-directions')
U moet deze stap herhalen voor elke functiemodule die u maakt, dus als u functiemodules blijft toevoegen, dan is de MyLocation-app
build.gradle
bestand kan er als volgt uitzien:
afhankelijkheden implementatieproject (': mylocation-base') implementatieproject (': mylocation-directions') implementatieproject (": mylocation-share") implementatieproject (": mylocation-search")
De instant-app-module is verantwoordelijk voor het transformeren van elk van de featuremodules van uw project naar een APK voor instant-apps, dus deze moet hiervan op de hoogte zijn elk functie-module die u maakt.
Open je MyLocation-instantapp
module build.gradle
bestand en verklaren MyLocation-base
als een afhankelijkheid met behulp van de implementatieproject
uitdrukking:
afhankelijkheden implementatieproject (': mylocation-base') implementatieproject (': mylocation-directions')
Hoewel we het hebben over projectafhankelijkheden, is er één belangrijke afhankelijkheid die we nog moeten toevoegen.
Een project dat instant-apps ondersteunt, hoeft dit alleen te declareren Applicatie ID
attribuut eenmaal, in de APK (app) -module. Echter, om zeker te zijn van deze single Applicatie ID
kenmerk wordt correct verspreid over al uw kenmerkmodules, u moet de APK-module toevoegen als een afhankelijkheid van de basismeldingsmodule.
Open je MyLocation-base
module build.gradle
bestand en voeg toe MyLocation-app
als een afhankelijkheid, met behulp van de applicatie project
uitdrukking:
afhankelijkheden ... // Voeg de volgende regel toe // toepassingsproject (": mijnlocatie-app")
In tegenstelling tot alle andere afhankelijkheden die we hebben besproken, hoeft u slechts eenmaal per project een afhankelijkheid van de APK-module aan te geven, en niet telkens wanneer u een featiemodule maakt.
Hoewel deze stap niet verplicht is, bevat onze featuremodule momenteel enkele onnodige bestanden en mappen, dus laten we de beste werkwijzen volgen en onze stroomlijnen MyLocation-richtingen
module:
MyLocation-richtingen
module. src / androidTest
directory.src / test
directory. Toen we deze kenmerkmodule maakten, hebben we wat informatie ingevoerd over de URL waaraan we deze module uiteindelijk willen toewijzen. De wizard voor het maken van modules van Android Studio kan echter geen volledige URL-toewijzing maken, dus u moet de. Openen App Links Assistant en voltooi dit proces handmatig:
U hebt nu twee functiemodules die zijn toegewezen aan verschillende URL's.
MyLocation-richtingen
moduleMomenteel is onze run-configuratie zo ingesteld dat de gebruiker tikt op de koppeling www.example.com/maps, die wordt gestart MapsActivity
, en bij uitbreiding onze MyLocation-base
module. Als we echter onze aanvullende functiemodule willen testen, moeten we de gebruiker simuleren door te tikken op www.example.com/directions, waarmee we onze DirectionsActivity
. Dit vereist dat we onze runtime-configuratie bijwerken:
Jouw DirectionsActivity
zou nu op uw AVD moeten verschijnen. Gefeliciteerd, je hebt zojuist een instant-app met meerdere voorzieningen gebouwd!
Worstelen met bugs en ander vreemd gedrag is allemaal onderdeel van het plezier van het werken met early access builds van Android Studio.
Als je Android Studio wordt gebouwd doet ga je gang en kun je niets fout zien met je project, dan is het mogelijk dat de fout bij Android Studio zelf ligt.
In deze sectie deel ik enkele oplossingen voor alle meest voorkomende Android Studio-fouten en -irrites die je kunt tegenkomen bij het maken van een instant-app met meerdere functies..
En voor het geval u een probleem tegenkomt dat hier niet wordt vermeld, deel ik ook een lijst met algemene oplossingen die u kunnen helpen om de problemen die u momenteel met Android Studio ondervindt, glad te strijken..
De eerste keer dat u probeert uw instant-app te testen op een AVD waarop Nougat wordt uitgevoerd, is het mogelijk dat de app niet kan worden geïmplementeerd. Als dit gebeurt, dan:
Als je de Betrouwbaarheidsprobleem met instant app-provisioningcache foutmelding bij het uitproberen van uw app, dan betekent dit dat u uw cache moet wissen:
Als Android Studio klaagt over aan AAPT2 gerelateerde problemen (zoals het weergeven van een AAPT2-koppeling mislukt foutbericht) kunt u deze problemen meestal oplossen door AAPT uit te schakelen.
Om AAPT uit te schakelen, open je de Gradle van je project scripts / gradle.properties
bestand en voeg de volgende tekst toe:
android.enableAapt2 = false
Dit is gemakkelijk het meest frustrerende en het vreemdste probleem dat je kunt tegenkomen bij het ontwikkelen van instant-apps.
In sommige builds van Android Studio 3.0, met behulp van de -
tekens in uw modulenamen kunnen plotseling een probleem worden zodra u meer functiemodules aan uw project toevoegt. Deze fout is bijzonder vreemd, omdat de -
karaktereigenschappen in veel van de instant-app-voorbeelden van Google, waaronder de instant-app-codelabs.
Als Android Studio wel begint te klagen over de android: splitName
kenmerk en controleer vervolgens of u de nieuwste versie van Android Studio 3.0 gebruikt. U kunt dit probleem mogelijk ook oplossen door uw project op te schonen en vervolgens opnieuw op te bouwen.
Als het probleem zich blijft voordoen, moet u mogelijk als laatste redmiddel enige tijd besteden aan het doorlopen van elk van uw modules en het verwijderen van de -
karakter.
Zodra u klaar bent met het testen van uw instant-app-project, zijn de volgende stappen het uitvoeren van een aantal alfa- en bètatests en vervolgens bent u klaar om uw app publiek te ontketenen!
Je kunt al deze taken uitvoeren via de Google Play Console en als je ooit een "gewone" installeerbare app hebt uitgebracht, moet dit proces heel vertrouwd aanvoelen:
U kunt vervolgens kiezen uit de volgende tracktypen, afhankelijk van of u uw app wilt testen of publiceren:
Wanneer u een project probeert te publiceren met directe app-ondersteuning, is het mogelijk dat u de volgende foutmelding krijgt:
Jouw site 'www.example.com"Is niet via het Digital Assets Link-protocol gekoppeld aan uw app.
Als dit gebeurt, controleer dan of:
assetlinks.json
) is publiekelijk beschikbaar en wordt niet beschermd door enige vorm van authenticatie, intern IP of firewall. Instant-apps zijn een geheel nieuwe manier om Android-apps te gebruiken, dus het is geen verrassing dat ze hun eigen best practices hebben.
In deze sectie gaan we ervoor zorgen dat u het maximale uit deze nieuwe functie haalt, door enkele praktische tips voor instant-apps te bekijken.
Het is niet zo ongewoon dat installeerbare apps de gebruiker vragen om een account te maken op het allereerste scherm. Als de gebruiker zich al heeft toegewijd om een app te installeren, zijn ze waarschijnlijk niet bang voor die app die vraagt om hun e-mailadres!
Instant-apps zijn echter een helemaal ander verhaal, omdat een gebruiker een Instant-app-module kan lanceren zonder het te weten iets over de gerelateerde applicatie. Stel je voor dat een vriend je een link heeft gestuurd met geen uitleg, en als je op die koppeling tikt, wordt er een instant-app gestart. U hebt geen idee wat deze app te bieden heeft of heeft gemaakt, maar vraagt meteen om uw e-mailadres - hoe waarschijnlijk bent u om deze informatie over te dragen?
Als uw instant-app een inlogervaring bevat, moet u proberen dit inlogdialoogvenster zo lang mogelijk te vertragen. Als u de gebruiker meer tijd geeft om de inhoud en functionaliteit van uw app te ervaren, neemt de kans toe dat deze een account maken wanneer daarom wordt gevraagd.
Zelfs als uw installeerbare app draait rond de gebruiker die een account aanmaakt, moet je toch proberen om je instant-appmodules te ontwerpen, zodat gebruikers de taak kunnen voltooien die hen heeft gevraagd om deze module te starten, voordat je hen vraagt een account aan te maken.
De meeste installeerbare apps hebben maar een paar toegangspunten: deze zijn meestal beperkt tot de eerste activiteit die de gebruiker te zien krijgt wanneer ze uw app starten en alle activiteiten die kunnen worden gestart met impliciete of expliciete intenties.
Instant-apps hebben ver meer toegangspunten, omdat elke kenmerkmodule ten minste één ingangspunt moet hebben en mogelijk meerdere toegangspunten kan hebben.
Wanneer u directe app-ondersteuning toevoegt aan uw app, is een van de belangrijkste beslissingen die u moet nemen, welke activiteit (of activiteiten) het beste toegangspunt voor elke module zou zijn. U moet uw toegangspunten zorgvuldig selecteren, aangezien elk toegangspunt bij voorkeur:
De gebruikersinterface, navigatie, functionaliteit en algehele look en feel van uw app moeten constant zijn voor al uw instant-appmodules en uw installeerbare APK. Als je iemand een apparaat hebt overhandigd waarvan je app al actief is, moeten ze niet kunnen vertellen of ze kijken naar het instant-exemplaar of de installeerbare vorm van je app.
Daarnaast moet elke gebruiker van een instant-app die de sprong wagen en uw app installeert, precies kunnen oppikken waar ze gebleven waren. U kunt bijvoorbeeld de opgeslagen app-status van uw instant-app naar uw installeerbare app overbrengen met behulp van cookies of lokale opslag.
Aangezien instant-apps op aanvraag worden geladen, heeft de grootte van het binaire bestand van de instant-app een enorme invloed op hoe gemakkelijk gebruikers toegang hebben tot uw app.
Het Android-team heeft een limiet van 4 MB opgelegd aan elk instant-app-onderdeel (dat is de grootte van de featiemodule plus de basismogelijkhedenmodule van uw project), maar u moet proberen uw modules zo mogelijk nog lichter te maken.
Als u moeite heeft om een bepaalde module te stroomlijnen, kijk dan kritisch naar wat u in die module hebt opgenomen, omdat het mogelijk kan zijn om een enkele module in meerdere kleinere, op zichzelf staande modules te herwerken..
Hoewel je nooit een instant-app moet ontwerpen die alleen maar verkeer naar je installeerbare app stuurt, zijn er twee soorten installatieaanwijzingen die je kunt gebruiken kan gebruik in uw instant-apps:
Impliciete installatieprompts zijn UI-elementen waarmee de gebruiker communiceert in de verwachting een bepaalde functie te activeren, maar alleen om een installatierprompt te zien.
Deze benadering doet denken aan het runtime-toestemmingsmodel van Android, omdat je hierdoor installatieaanwijzingen in de juiste context kunt plaatsen. Verkrijg de juiste context, en je zou het nooit moeten uitleggen waarom je geeft een specifieke installatie prompt weer. Bijvoorbeeld als de gebruiker een installatieprompt tegenkomt nadat hij op a heeft getikt Deel deze route met anderen knop, dan is het bericht duidelijk: als u toegang wilt tot deze functionaliteit, dan moet u de app installeren.
Gewoon niet laten meeslepen, tot het punt waarop uw instant-app zich als een advertentie voor uw installeerbare app begint te voelen. Uw gebruikers raken snel gefrustreerd als uw app ze voortdurend plaagt met functionaliteit waartoe ze geen toegang hebben, dus beperk uzelf tot een maximum van drie impliciete installatieaanwijzingen per instant-appmodule. Je moet ook goed overwegen waar u plaatst deze installatieprompts om te voorkomen dat de gebruiker meerdere prompts snel na elkaar tegenkomt.
uitdrukkelijk installatieaanwijzingen zijn gebruikersinterface-elementen die duidelijk een installatiedialoog zullen weergeven wanneer de gebruiker met hen communiceert, bijvoorbeeld een knop met "app installeren" die op de voorkant is aangebracht.
Alle expliciete installatieprompts zouden het Material Design "get app" -pictogram moeten gebruiken, en als u een ondersteunende tekst opneemt, kies dan zorgvuldig uw woorden om de indruk te wekken dat uw instant-app op een of andere manier een incomplete of kleinere versie van uw "echte" is app - dus vermijd dingen als waardeer nu op of installeer de volledige applicatie!
Traditioneel gezien is het bekijken van het totale aantal installaties een van de meest effectieve manieren om het succes van een app te meten. Echter, wanneer u toevoegen directe app-ondersteuning voor een project, u verwijderen de noodzaak voor gebruikers om die app te installeren, wat vereist dat je heroverweegt hoe je de prestaties van deze app meet.
In plaats van het tellen van installaties, wilt u mogelijk statistieken meten die betrekking hebben op niveaus van gebruikersbetrokkenheid, zoals hoeveel tijd gebruikers investeren in uw app, het totale aantal taken dat zij uitvoeren of hoeveel gebruikers herhaalbezoeken aan uw instant-app betalen modules.
<