Android-concepten (voor webontwikkelaars)

Joyce Toh
Joyce Toh

Als u een webontwikkelaar bent die nieuw is bij Android en Google Play, zijn er enkele details waar u rekening mee moet houden. Er bestaan ​​al veel bronnen en documentatie hiervoor (dankzij het Android-team), maar hier zullen we enkele belangrijke concepten belichten en hoe deze verband houden met Bubblewrap.

Upload versus ondertekeningssleutel

Als u van plan bent Bubblewrap te gebruiken om een ​​Android App Bundle (AAB) te genereren (Opmerking: vanaf augustus 2021 vereist Google Play dat alle nieuwe apps het Android App Bundle-formaat gebruiken ) of APK om te uploaden en te publiceren naar Google Play, U moet uw app ondertekenen met een ondertekeningssleutel. Google Play biedt u twee opties om dit aan te pakken:

  • Play App Signing (sterk aanbevolen) : Google beheert en beschermt de ondertekeningssleutel van uw app voor u. Het gebruikt het om uw APK's te ondertekenen voor distributie. Play App Signing gebruikt twee sleutels. De 'app-ondertekeningssleutel' die Google voor u beheert en de 'uploadsleutel' die u bewaart en privé voor u moet blijven. Je gebruikt de uploadsleutel om je app te ondertekenen voor uploaden naar de Play Console. Met dit systeem kunt u uw uploadsleutel opnieuw instellen als deze ooit verloren raakt of in gevaar komt, door contact op te nemen met het Play-ondersteuningsteam . Momenteel kunt u met Google Play uw app uploaden als AAB of APK:
    • Android App Bundle (AAB): Wanneer u een AAB uploadt naar de Play Console, stelt u het bouwen en genereren van APK's uit naar de Google Play Store. Wanneer een gebruiker uw app downloadt en installeert, distribueert Google Play deze als ondertekende APK. Daarom zal de ondertekening van de APK's ook door Google Play moeten worden gedaan. Als u uw app als AAB uploadt naar de Play Console, moet u dus standaard Play App Signing gebruiken.
    • APK: Bij APK's heb je de keuze om je aan te melden voor Play App Signing. Het wordt ten zeerste aanbevolen om u aan te melden voor Play App Signing, omdat dit de veiligheid van uw ondertekeningssleutel verhoogt. Zoals eerder opgemerkt vereist Google Play binnenkort dat alle nieuwe apps in het AAB-formaat worden geüpload, dus we raden aan dat te doen in plaats van APK's te uploaden.
  • Beheer uw eigen ondertekeningssleutel : als u ervoor kiest uw eigen sleutel te beheren en u niet aanmeldt voor Play App Signing, bent u volledig verantwoordelijk voor de ondertekeningssleutel van uw app. In tegenstelling tot Play App Signing is het niet mogelijk om deze te resetten als je de sleutel kwijtraakt. Als u de ondertekeningssleutel van uw app kwijtraakt, verliest u dus ook de mogelijkheid om uw app te updaten.

Wanneer u tijdens de bubblewrap init installatie bij het gedeelte "Sleutelinformatie ondertekenen (5/5)" komt, wordt u gevraagd een "Sleutelopslaglocatie" en "Sleutelnaam" in te voeren, of de standaardwaarden te gebruiken. De standaardsleutelopslaglocatie is het bestand android.keystore in uw projectmap en de standaardsleutelnaam is android . Als Bubblewrap op de locatie geen bestaande sleutelopslag met die sleutelnaam vindt, wordt er een voor u gemaakt en wordt u ook om wachtwoorden gevraagd. Noteer de wachtwoorden die u hebt ingevoerd, want u hebt ze nodig tijdens het bouwproces ( bubblewrap build ), waarbij de sleutel wordt gebruikt om uw app te ondertekenen. Als u zich aanmeldt voor Play App Signing, wordt de ondertekeningssleutel die Bubblewrap heeft gegenereerd en gebruikt om uw app te ondertekenen de 'uploadsleutel'. Of u er nu voor kiest om de door Bubblewrap gegenereerde sleutel te gebruiken als uw ondertekenings- of uploadsleutel, u moet de sleutel bewaken en privé houden. We raden u af om het aan versiebeheer toe te wijzen. Beperk in plaats daarvan het aantal personen dat er toegang toe heeft.

Digital Asset Links zijn nodig om de relatie tussen uw website en uw Android-app aan te geven. Om ervoor te zorgen dat uw door Bubblewrap gegenereerde Android-app correct wordt geverifieerd en wordt gestart als een vertrouwde webactiviteit (in plaats van een aangepast Chrome-tabblad), moet u de juiste sleutel toevoegen aan uw assetlinks.json bestand. Upload het vervolgens naar uw website op .well-known/assetlinks.json (ten opzichte van de root). Uw assetlinks.json -bestand moet deze indeling volgen:

[{
 "relation": ["delegate_permission/common.handle_all_urls"],
 "target": {
   "namespace": "android_app",
   "package_name": "com.your.package_name",
   "sha256_cert_fingerprints": [
     "XX:XX:XX:..."
   ]
 }
}]

Verkrijg de vingerafdruk van het SHA256-certificaat

Om het assetlinks.json bestand te maken, heeft u de SHA 256-certificaatvingerafdruk nodig die is gekoppeld aan de ondertekeningssleutel van uw app. Het belangrijkste om op te merken is dat de vingerafdrukken die aan uw ondertekenings- en uploadsleutels zijn gekoppeld, anders zullen zijn. Het is belangrijk om dit onderscheid in gedachten te houden, vooral als u ziet dat uw app wordt gestart als een aangepast Chrome-tabblad (met de browserbalk zichtbaar). Dan heeft uw assetlinks.json bestand waarschijnlijk niet de vingerafdruk die overeenkomt met de juiste sleutel.

Het is handig om zowel de vingerafdruk van uw handtekening als die van het uploadcertificaat in uw assetlinks.json te hebben, zodat u eenvoudiger lokaal fouten in uw app kunt opsporen. Zie Meer sleutels toevoegen hieronder voor meer informatie over hoe u beide sleutels in het bestand assetlinks.json kunt hebben.

Er zijn een aantal verschillende manieren om de vingerafdruk te verkrijgen, die in de volgende secties worden beschreven. Ze zouden u allemaal dezelfde vingerafdrukken moeten geven, dus kies gerust de methode die het handigst is.

Via Playconsole

Afhankelijk van of u zich wel of niet aanmeldt voor Play App Signing, beschikt u mogelijk over één of twee sleutels. Om de juiste SHA256-vingerafdruk voor elke sleutel op te halen:

  1. Ga naar de Play Console
  2. Selecteer de app waarin u geïnteresseerd bent
  3. Ga in het navigatiemenu aan de linkerkant onder Release naar Instellingen -> App-integriteit .
  4. Kopieer de SHA256 voor de juiste sleutel:

Haal de juiste SHA256-certificaatvingerafdruk op voor uw ondertekenings- of uploadsleutel

  • Ondertekeningssleutel : Kopieer de SHA256-vingerafdruk voor het "App-ondertekeningssleutelcertificaat" . Deze vingerafdruk komt overeen met uw app als u deze downloadt vanuit de Google Play Store, aangezien Google Play uw app distribueert, ondertekend met de ondertekeningssleutel.

  • Uploadsleutel : Kopieer de SHA256-vingerafdruk voor het "Uploadsleutelcertificaat" . Deze vingerafdruk komt overeen met uw app als u deze lokaal installeert (bijvoorbeeld via ADB via USB). Die APK (op uw lokale computer) is gebouwd door Bubblewrap en daarom ondertekend met de sleutel die deze ook voor u heeft gemaakt (tijdens de init installatie). Houd er rekening mee dat dit mogelijk de ondertekeningssleutel is voor uw lokaal geïnstalleerde app, maar dat dit in werkelijkheid de 'uploadsleutel' wordt zodra u uw app via Play publiceert.

Via keytool

keytool is een tool voor sleutel- en certificaatbeheer. U kunt keytool gebruiken om de SHA 256-vingerafdruk te extraheren die is gekoppeld aan de gegenereerde APK of AAB Bubblewrap. Houd er rekening mee dat deze vingerafdruk voor de lokale ondertekeningssleutel is. Als u uw app uploadt naar Play en u aanmeldt voor Play App Signing, wordt deze sleutel de 'uploadsleutel'.

keytool -printcert -jarfile [path to APK or AAB] | grep SHA256

Een andere manier om het juiste Digital Asset Links-bestand voor uw app te krijgen, is door de Asset Link Tool te gebruiken:

  1. Installeer de Asset Link Tool vanuit de Play Store.
  2. Download op hetzelfde apparaat uw app uit de Google Play Store of installeer deze lokaal.
  3. Open de Asset Link Tool-app en u krijgt een lijst met alle applicaties die op uw apparaat zijn geïnstalleerd, op pakketnaam. Filter de lijst op de applicatie-ID die u eerder tijdens bubblewrap init hebt gekozen en klik op dat item.
  4. U ziet een pagina met de handtekening van uw app en een gegenereerde Digital Asset Link. Klik onderaan op de knop Kopiëren of Delen om het bestand naar wens te exporteren (bijvoorbeeld opslaan in Google Keep, e-mailen naar uzelf).

Hetzelfde idee is van toepassing als voorheen bij het ondertekenen of uploaden van sleutels. Als u uw app vanuit de Google Play Store heeft geïnstalleerd, krijgt u met de Asset Link Tool de vingerafdruk voor de ondertekeningssleutel van uw app. Als u de app rechtstreeks vanaf uw lokale computer hebt geïnstalleerd, wordt de vingerafdruk voor de sleutel Bubblewrap gegenereerd.

Nu je het hebt geüpload, zorg je ervoor dat je toegang hebt tot je assetlinkbestand in een browser. Controleer of https://example.com/.well-known/assetlinks.json wordt omgezet naar het bestand dat u zojuist hebt geüpload.

Op Jekyll gebaseerde websites

Als uw website is gegenereerd door Jekyll (zoals GitHub Pages), moet u een configuratieregel toevoegen zodat de map .well-known in de uitvoer wordt opgenomen. GitHub help biedt meer informatie over dit onderwerp . Maak een bestand met de naam _config.yml in de hoofdmap van uw site (of voeg het toe als het al bestaat) en voer het volgende in:

# Folders with dotfiles are ignored by default.
include: [.well-known]

Meer sleutels toevoegen

Een Digital Asset Link-bestand kan meer dan één app bevatten, en voor elke app kan het meer dan één sleutel bevatten. Als u bijvoorbeeld een tweede sleutel wilt toevoegen, gebruikt u gewoon de Asset Link Tool om de sleutel te bepalen en deze als tweede invoer toe te voegen. De code in Chrome die deze JSON parseert is behoorlijk streng, dus zorg ervoor dat je niet per ongeluk een extra komma aan het einde van de lijst toevoegt.

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
},{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
}]

Probleemoplossen

Chrome registreert de reden dat de verificatie van Digital Asset Links mislukt en u kunt de logboeken op een Android-apparaat bekijken met adb logcat . Als u op Linux/Mac ontwikkelt, kunt u de relevante logboeken van een aangesloten apparaat bekijken met:

> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links

Als u bijvoorbeeld het bericht Statement failure matching fingerprint. , moet u de Asset Link Tool gebruiken om de handtekening van uw app te bekijken en ervoor te zorgen dat deze overeenkomt met die in uw assetlinks.json -bestand.