Concetti di Android (per sviluppatori web)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

Se sei uno sviluppatore web alle prime armi con Android e Google Play, ci sono alcuni dettagli che devi conoscere. Esistono già molte risorse e documentazione in merito (grazie al team di Android), ma qui evidenzieremo alcuni concetti importanti e il loro rapporto con Bubblewrap.

Chiave di caricamento e chiave di firma

Se prevedi di utilizzare Bubblewrap per generare un Android App Bundle (AAB) (nota: a partire da agosto 2021, Google Play richiederà a tutte le nuove app di utilizzare il formato Android App Bundle) o un APK per il caricamento e la pubblicazione su Google Play, dovrai firmare l'app con una chiave di firma. Google Play ti offre due opzioni per gestire questo problema:

  • Firma dell'app di Google Play (vivamente consigliata): Google gestirà e proteggerà automaticamente la chiave di firma della tua app. che utilizza per firmare gli APK da distribuire. La funzionalità di firma dell'app di Google Play utilizza due chiavi. La "chiave di firma dell'app" che verrà gestita da Google e la "chiave di caricamento" che dovrai conservare e che deve rimanere privata. La chiave di caricamento viene utilizzata per firmare l'app da caricare su Play Console. Questo sistema ti consente di reimpostare la chiave di caricamento in caso di smarrimento o compromissione della chiave contattando il team di assistenza di Google Play. Al momento, Google Play consente di caricare l'app come AAB o APK:
    • Android App Bundle (AAB): quando carichi un AAB su Play Console, rimandi la compilazione e la generazione degli APK al Google Play Store. Quando un utente scarica e installa la tua app, Google Play la distribuisce come APK firmato. Pertanto, la firma degli APK dovrà essere eseguita anche da Google Play. Pertanto, per impostazione predefinita, se carichi la tua app come AAB su Play Console, ti verrà richiesto di utilizzare la firma dell'app Google Play.
    • APK: con gli APK, hai la possibilità di attivare la funzionalità Firma dell'app di Google Play. Ti consigliamo vivamente di attivare la funzionalità Firma dell'app di Google Play perché aumenta la sicurezza della chiave di firma. Come indicato in precedenza, a breve Google Play richiederà che tutte le nuove app vengano caricate nel formato AAB, pertanto consigliamo di procedere in questo modo anziché caricare gli APK.
  • Gestisci la tua chiave di firma: se scegli di gestire la tua chiave e di non attivare la funzionalità Firma dell'app di Google Play, sei pienamente responsabile della chiave di firma della tua app. A differenza di quanto accade con la firma dell'app di Google Play, non è possibile reimpostarla se perdi la chiave. Pertanto, se perdi la chiave di firma dell'app, perdi anche la possibilità di aggiornarla.

Durante la configurazione di bubblewrap init, quando arrivi alla sezione "Informazioni sulla chiave di firma (5/5)", ti verrà chiesto di inserire una "Posizione del magazzino chiavi" e un "Nome della chiave" oppure di utilizzare i valori predefiniti. La posizione predefinita del magazzino delle chiavi è il file android.keystore nella directory del progetto e il nome della chiave predefinito è android. Se Bubblewrap non trova un archivio chiavi esistente con il nome della chiave nella directory, ne crea uno e ti chiede anche le password. Prendi nota delle password inserite, poiché ti serviranno durante il processo di compilazione (bubblewrap build), in cui verrà utilizzata la chiave per firmare l'app. Se attivi la funzionalità di firma dell'app di Google Play, la chiave di firma generata e utilizzata da Bubblewrap per firmare l'app diventa la "chiave di caricamento". Se scegli di utilizzare la chiave generata dal wrapping come chiave di firma o di caricamento, devi proteggere e mantenere privata la chiave. Sconsigliamo di eseguirne il commit nel controllo versione. Limita invece il numero di persone che possono accedervi.

Digital Asset Links è necessario per dichiarare la relazione tra il tuo sito web e la tua app per Android. Per assicurarti che la tua app per Android generata da Bubblewrap sia verificata e venga lanciata come Attività web attendibile (anziché come scheda personalizzata di Chrome), dovrai aggiungere la chiave appropriata al tuo file assetlinks.json. Caricalo sul tuo sito web all'indirizzo .well-known/assetlinks.json (rispetto alla directory principale). Il file assetlinks.json deve avere il seguente formato:

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

Ottenere l'impronta digitale del certificato SHA256

Per creare il file assetlinks.json, ti servirà l'impronta digitale del certificato SHA 256 associata alla chiave di firma della tua app. È importante notare che le impronte associate alle chiavi di firma e di caricamento saranno diverse. È importante tenere presente questa distinzione, soprattutto se noti che l'app si avvia come scheda personalizzata di Chrome (con la barra del browser visibile). In questo caso, è probabile che il file assetlinks.json non contenga l'impronta corrispondente alla chiave appropriata.

È utile avere sia l'impronta del certificato di firma sia quella del certificato di caricamento in assetlinks.json per eseguire più facilmente il debug dell'app localmente. Consulta la sezione Aggiunta di altre chiavi di seguito per ulteriori informazioni su come avere entrambe le chiavi nel file assetlinks.json.

Esistono due modi diversi per recuperare l'impronta, descritti in dettaglio nelle sezioni successive. Dovrebbero darti tutte le stesse impronte, quindi scegli il metodo più pratico.

Tramite Play Console

A seconda che tu attivi o meno la funzionalità Firma dell'app di Google Play, potresti avere una o due chiavi. Per recuperare l'impronta SHA256 appropriata per ogni chiave:

  1. Vai a Play Console.
  2. Seleziona l'app che ti interessa
  3. Nel menu di navigazione a sinistra, in Release, vai a Configurazione -> Integrità dell'app.
  4. Copia l'SHA256 per la chiave appropriata:

Recupera l'impronta digitale del certificato SHA256 appropriata per la tua chiave di firma o caricamento

  • Chiave di firma: copia l'impronta SHA256 nel campo "Certificato chiave di firma dell'app". Questo impronta corrisponderà alla tua app se la scarichi dal Google Play Store poiché Google Play distribuisce la tua app firmata con la chiave di firma.

  • Chiave di caricamento: copia l'impronta SHA256 per il "Certificato chiave di caricamento". Questo fingerprinting corrisponderà alla tua app se la installi localmente (ad esempio tramite ADB tramite USB). L'APK (sul tuo computer locale) è stato creato da Bubblewrap, pertanto è stato firmato anche dalla chiave che ha creato per te (durante la configurazione di init). Ricorda che questa potrebbe essere la chiave di firma per l'app installata in locale, ma in realtà diventa la "chiave di caricamento" una volta pubblicata l'app tramite Google Play.

Via keytool

keytool è uno strumento di gestione delle chiavi e dei certificati. Puoi utilizzare keytool per estrarre l'impronta SHA 256 associata al file APK o AAB Bubblewrap generato. Tieni presente che questa impronta è per la chiave di firma locale e se carichi la tua app su Google Play e attivi la funzionalità Firma dell'app di Google Play, questa chiave diventa la "chiave di caricamento".

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

Un altro modo per ottenere il file Digital Asset Links corretto per la tua app è utilizzare lo strumento Asset Link:

  1. Installa lo strumento Asset Link dal Play Store.
  2. Sullo stesso dispositivo, scarica l'app dal Google Play Store o installala localmente.
  3. Apri l'app Asset Link Tool e visualizzerai un elenco di tutte le applicazioni installate sul tuo dispositivo in base al nome del pacchetto. Filtra l'elenco in base all'ID applicazione scelto in precedenza durante il giorno bubblewrap init e fai clic sulla voce.
  4. Viene visualizzata una pagina che elenca la firma dell'app e un link a un asset digitale generato. Fai clic sui pulsanti Copia o Condividi in basso per esportarlo come preferisci (ad es. salvalo in Google Keep o inviatelo a te stesso via email).

Lo stesso vale per le chiavi di firma o di caricamento. Se hai installato l'app dal Google Play Store, lo strumento Asset Link ti fornirà l'impronta della chiave di firma dell'app. Se hai installato l'app direttamente dalla tua macchina locale, l'impronta è per la chiave generata da Bubblewrap.

Ora che lo hai caricato, assicurati di poter accedere al file del link agli asset in un browser. Verifica che https://example.com/.well-known/assetlinks.json rimandi al file che hai appena caricato.

Siti web basati su Jekyll

Se il tuo sito web viene generato da Jekyll (ad esempio GitHub Pages), devi aggiungere una riga di configurazione in modo che la directory .well-known sia inclusa nell'output. La guida di GitHub contiene ulteriori informazioni su questo argomento. Crea un file denominato _config.yml nella directory principale del tuo sito (o aggiungilo se esiste già) e inserisci:

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

Aggiunta di altre chiavi

Un file Digital Asset Link può contenere più di un'app e per ogni app può contenere più di una chiave. Ad esempio, per aggiungere una seconda chiave, utilizza lo strumento di collegamento degli asset per determinare la chiave e aggiungerla come seconda voce. Il codice in Chrome che analizza questo JSON è piuttosto rigoroso, quindi assicurati di non aggiungere accidentalmente un'altra virgola alla fine dell'elenco.

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

Risoluzione dei problemi

Chrome registra il motivo della mancata verifica di Digital Asset Links e puoi visualizzare i log su un dispositivo Android con adb logcat. Se stai sviluppando su Linux/Mac, puoi visualizzare i log pertinenti da un dispositivo connesso con:

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

Ad esempio, se visualizzi il messaggio Statement failure matching fingerprint., devi utilizzare lo strumento Asset Link per visualizzare la firma della tua app e assicurarti che corrisponda a quella nel file assetlinks.json.