Ottimizzazione dei contenuti contestuali per l'assistente

Android 6.0 Marshmallow introduce un nuovo modo per gli utenti di interagire con le app tramite app dell'assistente, come l'Assistente Google. L'assistente è una finestra di primo livello che gli utenti possono visualizzare per ottenere azioni contestualmente pertinenti per l'attività corrente. Queste azioni potrebbero includere link diretti ad altre app sul dispositivo.

Gli utenti attivano l'assistente premendo a lungo il pulsante Home o pronunciando una frase chiave. Di conseguenza, il sistema apre una finestra di primo livello che mostra le azioni contestualmente pertinenti.

Un'app dell'assistente, come l'Assistente Google, implementa la finestra di overlay dell'assistente tramite una funzione chiamata Now Ovunque, che funziona con la funzionalità a livello di piattaforma Android. Il sistema consente all'utente di selezionare un'app dell'assistente che ottiene informazioni contestuali dalla tua app utilizzando l'API Assist di Android.

Questa guida spiega in che modo le app per Android utilizzano l'API Assist di Android per migliorare l'esperienza utente dell'assistente. Per scoprire come creare un'app multimediale che consenta all'assistente di avviare e controllare, visita la pagina Assistente Google e app multimediali.

Usare gli assistenti

La figura 1 illustra una tipica interazione dell'utente con l'assistente. Quando l'utente preme a lungo il pulsante Home, i callback dell'API Assist vengono richiamati nell'app source (passaggio 1). L'assistente esegue il rendering della finestra overlay (passaggi 2 e 3), quindi l'utente seleziona l'azione da eseguire. L'assistente esegue l'azione selezionata, ad esempio attiva un intent con un link diretto all'app del ristorante (destinazione) (passaggio 4).

Figura 1. Esempio di interazione con l'assistente con la funzionalità Now Ovunque dell'app Google

Gli utenti possono configurare l'assistente selezionando Impostazioni > App > App predefinite > Assistenza e input vocale. Gli utenti possono modificare le opzioni di sistema, come l'accesso ai contenuti sullo schermo come testo e l'accesso a uno screenshot, come mostrato nella Figura 2.

Figura 2. Impostazioni di assistenza e input vocale

App di origine

Per assicurarti che l'app funzioni con l'assistente come fonte di informazioni per l'utente, devi seguire solo le best practice di accessibilità. Questa sezione descrive come fornire informazioni aggiuntive per contribuire a migliorare l'esperienza utente con l'assistente, nonché scenari che richiedono una gestione speciale, come le viste personalizzate.

Condividi informazioni aggiuntive con l'assistente

Oltre al testo e allo screenshot, la tua app può condividere altre informazioni con l'assistente. Ad esempio, la tua app di musica può scegliere di trasmettere le informazioni attuali dell'album in modo che l'assistente possa suggerire azioni più intelligenti, personalizzate in base all'attività corrente. Tieni presente che le API Assist non forniscono controlli multimediali. Per aggiungere controlli multimediali, visita la pagina App Assistente Google e contenuti multimediali.

Per fornire ulteriori informazioni all'assistente, la tua app fornisce il contesto globale dell'applicazione registrando un listener di app e fornisce informazioni specifiche per le attività con callback di attività, come mostrato nella Figura 3:

Figura 3. Diagramma della sequenza del ciclo di vita dell'API Assist

Per fornire un contesto globale dell'applicazione, l'app crea un'implementazione di Application.OnProvideAssistDataListener e la registra utilizzando registerOnProvideAssistDataListener(). Per fornire informazioni contestuali specifiche per l'attività, l'attività sostituisce onProvideAssistData() e onProvideAssistContent(). I due metodi di attività vengono chiamati dopo che è stato richiamato il callback globale facoltativo. Poiché i callback vengono eseguiti sul thread principale, devono essere completati promptly. I callback vengono attivati solo quando l'attività è in esecuzione.

Fornire contesto

Quando l'utente attiva l'assistente, onProvideAssistData() viene chiamato per creare un intent ACTION_ASSIST completo con tutto il contesto dell'applicazione corrente rappresentato come istanza di AssistStructure. Puoi eseguire l'override di questo metodo per inserire tutto ciò che ti piace nel bundle in modo che venga visualizzato nella parte EXTRA_ASSIST_CONTEXT dell'intent indiretto.

Descrizione dei contenuti

La tua app può implementare onProvideAssistContent() per migliorare l'esperienza utente dell'assistente fornendo riferimenti correlati ai contenuti correlati all'attività corrente. Puoi descrivere i contenuti dell'app utilizzando il vocabolario comune definito da Schema.org tramite un oggetto JSON-LD. Nell'esempio riportato di seguito, un'app di musica fornisce dati strutturati per descrivere l'album musicale che l'utente sta visualizzando attualmente:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

Puoi anche migliorare l'esperienza utente con implementazioni personalizzate di onProvideAssistContent(), che possono offrire i seguenti vantaggi:

Nota: è probabile che le app che utilizzano un'implementazione di selezione del testo personalizzata debbano implementare onProvideAssistContent() e chiamare setClipData().

Implementazione predefinita

Se non vengono implementati né il callback onProvideAssistData() né il callback onProvideAssistContent(), il sistema procede comunque e passa le informazioni raccolte automaticamente all'assistente a meno che la finestra corrente non sia contrassegnata come protetta. Come mostrato nella Figura 3, il sistema utilizza le implementazioni predefinite di onProvideStructure() e onProvideVirtualStructure() per raccogliere testo e visualizzare informazioni sulla gerarchia. Se la vista implementa un disegno di testo personalizzato, sostituisci onProvideStructure() per fornire all'assistente il testo mostrato all'utente chiamando setText(CharSequence).

Nella maggior parte dei casi, l'implementazione del supporto per l'accessibilità consente all'assistente di ottenere le informazioni di cui ha bisogno. Per implementare il supporto per l'accessibilità, segui le best practice descritte in Rendere accessibili le applicazioni, tra cui le seguenti:

Sono escluse le visualizzazioni dagli assistenti

Per gestire le informazioni sensibili, la tua app può escludere la visualizzazione corrente dall'assistente impostando il parametro di layout FLAG_SECURE di WindowManager. Devi impostare FLAG_SECURE in modo esplicito per ogni finestra creata dall'attività, incluse le finestre di dialogo. La tua app può anche utilizzare setSecure() per escludere una piattaforma dall'assistente. Non esiste un meccanismo globale (a livello di app) per escludere tutte le visualizzazioni dall'assistente. Tieni presente che FLAG_SECURE non causa l'interruzione dell'attivazione dei callback dell'API Assist. L'attività che utilizza FLAG_SECURE può comunque fornire esplicitamente informazioni a un'app dell'assistente utilizzando i callback descritti in precedenza in questa guida.

Nota. Per gli account aziendali (Android for Work), l'amministratore può disattivare la raccolta dei dati dell'assistente per il profilo di lavoro utilizzando il metodo setScreenCaptureDisabled() dell'API DevicePolicyManager.

Interazioni vocali

I callback dell'API Assist sono attivati anche al rilevamento delle frasi chiave. Per ulteriori informazioni, consulta la documentazione relativa alle azioni vocali.

Considerazioni sull'ordine Z

Un assistente utilizza una finestra overlay leggera visualizzata sopra l'attività corrente. Poiché l'utente può attivare l'assistente in qualsiasi momento, non creare finestre di avviso di sistema permanenti che interferiscono con la finestra overlay, come mostrato nella Figura 4.

Figura 4. Ordine Z livello assistito

Se la tua app utilizza finestre di avviso di sistema, rimuovile tempestivamente perché lasciarle sullo schermo compromette l'esperienza utente.

App di destinazione

Le app dell'assistente in genere sfruttano i link diretti per trovare app di destinazione. Per rendere la tua app una potenziale app di destinazione, valuta la possibilità di aggiungere il supporto dei link diretti. La corrispondenza tra il contesto corrente dell'utente e i link diretti o altre potenziali azioni visualizzate nella finestra overlay (mostrata nel passaggio 3 nella Figura 1) è specifica per l'implementazione dell'Assistente Google. Ad esempio, l'app Assistente Google utilizza i link diretti e i link alle app per indirizzare il traffico alle app di destinazione.

Implementazione del tuo assistente

Potresti voler implementare il tuo assistente. Come mostrato nella Figura 2, l'utente può selezionare l'app dell'assistente attiva. L'app dell'assistente deve fornire un'implementazione di VoiceInteractionSessionService e VoiceInteractionSession, come mostrato in questo VoiceInteraction esempio. Richiede inoltre l'autorizzazione BIND_VOICE_INTERACTION. L'assistente può quindi ricevere la gerarchia del testo e delle visualizzazioni rappresentata come un'istanza di AssistStructure in onHandleAssist(). Riceve lo screenshot tramite onHandleScreenshot().