Collegamento di app in Android

Questa guida illustra in che modo Android 6.0 supporta il collegamento di app, una tecnica che consente alle app per dispositivi mobili di rispondere agli URL nei siti Web. Descrive il collegamento di app, come implementare il collegamento di app in un'applicazione Android 6.0 e come configurare un sito Web per concedere le autorizzazioni all'app per dispositivi mobili per un dominio.

Panoramica del collegamento di app

Le applicazioni per dispositivi mobili non vivono più in un silo: in molti casi sono componenti importanti delle loro aziende, insieme al loro sito Web. È consigliabile per le aziende connettere facilmente la propria presenza Web e le applicazioni per dispositivi mobili, con collegamenti in un sito Web che avvia applicazioni per dispositivi mobili e visualizzando contenuti pertinenti nell'app per dispositivi mobili. Il collegamento delle app (detto anche deep-linking) è una tecnica che consente a un dispositivo mobile di rispondere a un URI e avviare un'applicazione per dispositivi mobili corrispondente a tale URI.

Android gestisce il collegamento delle app tramite il sistema di finalità: quando l'utente fa clic su un collegamento in un browser per dispositivi mobili, il browser per dispositivi mobili invierà una finalità che Android delega a un'applicazione registrata. Ad esempio, facendo clic su un collegamento in un sito Web di cucina si apre un'app per dispositivi mobili associata a tale sito Web e viene visualizzata una ricetta specifica per l'utente. Se sono presenti più applicazioni registrate per gestire tale finalità, Android genererà ciò che è noto come finestra di dialogo di disambiguazione che chiederà a un utente quale applicazione selezionare l'applicazione che deve gestire la finalità, ad esempio:

Example screenshot of a disambiguation dialog

Android 6.0 migliora questa funzionalità usando la gestione automatica dei collegamenti. È possibile che Android registri automaticamente un'applicazione come gestore predefinito per un URI. L'app avvierà automaticamente e passerà direttamente all'attività pertinente. Il modo in cui Android 6.0 decide di gestire un clic URI dipende dai criteri seguenti:

  1. Un'app esistente è già associata all'URI : l'utente potrebbe aver già associato un'app esistente a un URI. In tal caso, Android continuerà a usare tale applicazione.
  2. Nessuna app esistente è associata all'URI, ma viene installata un'app di supporto: in questo scenario l'utente non ha specificato un'app esistente, quindi Android userà l'applicazione di supporto installata per gestire la richiesta.
  3. Nessuna app esistente è associata all'URI, ma molte app di supporto sono installate : poiché sono presenti più applicazioni che supportano l'URI, verrà visualizzata la finestra di dialogo di disambiguazione e l'utente deve selezionare l'app che gestirà l'URI.

Se l'utente non ha app installate che supportano l'URI e una viene successivamente installata, Android imposta tale applicazione come gestore predefinito per l'URI dopo aver verificato l'associazione con il sito Web associato all'URI.

Questa guida illustra come configurare un'applicazione Android 6.0 e come creare e pubblicare il file Collegamenti asset digitali per supportare il collegamento di app in Android 6.0.

Requisiti

Questa guida richiede Xamarin.Android 6.1 e un'applicazione destinata ad Android 6.0 (livello API 23) o versione successiva.

Il collegamento delle app è possibile nelle versioni precedenti di Android usando il pacchetto NuGet Rivets dall'archivio componenti Xamarin. Il pacchetto Rivets non è compatibile con il collegamento di app in Android 6.0; non supporta il collegamento di app Android 6.0.

Configurazione del collegamento di app in Android 6.0

La configurazione dei collegamenti app in Android 6.0 prevede due passaggi principali:

  1. Aggiunta di uno o più filtri finalità per l'URI del sito Web: i filtri finalità guidano Android in come gestire un URL facendo clic in un browser per dispositivi mobili.
  2. Pubblicazione di un file JSON di Collegamenti asset digitali nel sito Web : si tratta di un file caricato in un sito Web e usato da Android per verificare la relazione tra l'app per dispositivi mobili e il dominio del sito Web. Senza questo, Android non può installare l'app come handle predefinito per l'URI; l'utente deve farlo manualmente.

Configurazione del filtro finalità

È necessario configurare un filtro finalità che esegue il mapping di un URI (o di un set di URI) da un sito Web a un'attività in un'applicazione Android. In Xamarin.Android questa relazione viene stabilita adornando un'attività con IntentFilterAttribute. Il filtro finalità deve dichiarare le informazioni seguenti:

  • Intent.ActionView : registrerà il filtro finalità per rispondere alle richieste per visualizzare le informazioni
  • Categories: il filtro finalità deve registrare sia Intent.CategoryBrowsable che Intent.CategoryDefault per poter gestire correttamente l'URI Web.
  • DataScheme : il filtro finalità deve dichiarare http e/o https. Questi sono gli unici due schemi validi.
  • DataHost – Si tratta del dominio da cui provengono gli URI.
  • DataPathPrefix – Si tratta di un percorso facoltativo per le risorse nel sito Web.
  • AutoVerify : l'attributo autoVerify indica ad Android di verificare la relazione tra l'applicazione e il sito Web. Questo argomento verrà discusso più avanti.

Nell'esempio seguente viene illustrato come usare IntentFilterAttribute per gestire i collegamenti da https://www.recipe-app.com/recipes e da http://www.recipe-app.com/recipes:

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

Android verificherà ogni host identificato dai filtri delle finalità rispetto al file di asset digitali nel sito Web prima di registrare l'applicazione come gestore predefinito per un URI. Tutti i filtri di finalità devono superare la verifica prima che Android possa stabilire l'app come gestore predefinito.

Il collegamento di app android 6.0 richiede che Android verifichi l'associazione tra l'applicazione e il sito Web prima di impostare l'applicazione come gestore predefinito per l'URI. Questa verifica si verifica quando l'applicazione viene installata per la prima volta. Il file Digital Assets Links è un file JSON ospitato dai domini Web pertinenti.

Nota

L'attributo android:autoVerify deve essere impostato dal filtro finalità. In caso contrario, Android non eseguirà la verifica.

Il file viene inserito dal mdf del dominio nella posizione https://domain/.well-known/assetlinks.json.

Il file di asset digitali contiene i metadati necessari per Android per verificare l'associazione. Un file assetlinks.json include le coppie chiave-valore seguenti:

  • namespace : spazio dei nomi dell'applicazione Android.
  • package_name : nome del pacchetto dell'applicazione Android (dichiarato nel manifesto dell'applicazione).
  • sha256_cert_fingerprints : le impronte digitali SHA256 dell'applicazione firmata. Per altre informazioni su come ottenere l'impronta digitale SHA256 di un'applicazione, vedere la guida Alla ricerca della firma dell'archivio chiavi.

Il frammento di codice seguente è un esempio di assetlinks.json con una singola applicazione elencata:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.example",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

È possibile registrare più di un'impronta digitale SHA256 per supportare versioni o build diverse dell'applicazione. Questo file assetlinks.json successivo è un esempio di registrazione di più applicazioni:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.puppies.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   },
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.monkeys.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Il sito Web Google Digital Asset Links ha uno strumento online che può facilitare la creazione e il test del file asset digitali.

Dopo l'implementazione dei collegamenti app, i vari componenti devono essere testati per assicurarsi che funzionino come previsto.

È possibile verificare che il file asset digitali sia formattato correttamente e ospitato usando l'API Digital Asset Links di Google, come illustrato in questo esempio:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

Esistono due test che possono essere eseguiti per assicurarsi che i filtri delle finalità siano stati configurati correttamente e che l'app sia impostata come gestore predefinito per un URI:

  1. Il file di asset digitali è ospitato correttamente come descritto in precedenza. Il primo test invierà una finalità che Android deve reindirizzare all'applicazione per dispositivi mobili. L'applicazione Android deve avviare e visualizzare l'attività registrata per l'URL. Al prompt dei comandi digitare:

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. Visualizzare i criteri di gestione dei collegamenti esistenti per le applicazioni installate in un determinato dispositivo. Il comando seguente eseguirà il dump di un elenco dei criteri di collegamento per ogni utente nel dispositivo con le informazioni seguenti. Al prompt dei comandi digitare quanto segue:

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package : nome del pacchetto dell'applicazione.
    • Domain : i domini (separati da spazi) i cui collegamenti Web verranno gestiti dall'applicazione
    • Status : questo è lo stato di gestione dei collegamenti corrente per l'app. Un valore di indica sempre che l'applicazione ha android:autoVerify=true dichiarato e ha superato la verifica del sistema. È seguito da un numero esadecimale che rappresenta il record del sistema Android della preferenza.

    Ad esempio:

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

Riepilogo

Questa guida ha illustrato il funzionamento del collegamento delle app in Android 6.0. È stato quindi illustrato come configurare un'applicazione Android 6.0 per supportare e rispondere ai collegamenti alle app. Ha anche illustrato come testare il collegamento di app in un'applicazione Android.