Ottimizzazione dei contenuti contestuali per l'assistente

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

Gli utenti attivano l'assistente premendo a lungo il pulsante Home o dicendo keyphrase. In risposta, il sistema apre una finestra di primo livello che mostra azioni pertinenti.

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

Questa guida spiega in che modo le app per Android utilizzano l'API Assist di Android per migliorare l'assistente un'esperienza utente positiva. Per scoprire come creare un'app multimediale in modo che l'assistente possa avviarsi e controllare, vedi 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 sul pulsante Home, i callback dell'API Assist vengono richiamati nell'app di origine (passaggio 1). L'assistente esegue il rendering della finestra di overlay (passaggi 2 e 3), e l'utente seleziona l'azione da eseguire. L'assistente esegue l'azione selezionata, ad esempio attivare 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 di l'app Google

Gli utenti possono configurare l'assistente selezionando Impostazioni > App > App predefinite > Assist e input vocale. Gli utenti possono modificare le opzioni di sistema, ad esempio i contenuti della schermata sotto forma di testo e l'accesso a uno screenshot, come mostrato nella Figura 2.

Figura 2. Assist e impostazioni input vocale

App di origine

Per assicurarti che la tua app funzioni con l'assistente come fonte di informazioni per l'utente, devi solo seguire al meglio l'accessibilità pratiche. Questa sezione descrive come fornire informazioni aggiuntive per contribuire a migliorare l'esperienza utente con l'assistente, oltre agli 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 musica l'app può scegliere di trasmettere le informazioni correnti dell'album affinché l'assistente possa suggerire azioni più intelligenti in base all'attività in corso. Tieni presente che le API Assist non forniscono controlli multimediali. Per aggiungere i controlli multimediali, vedi Assistente Google e app multimediali.

Per fornire ulteriori informazioni all'assistente, l'app fornisce contesto globale dell'applicazione registrando un listener di app e fornisce informazioni specifiche per le attività con callback delle attività, come illustrato in 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 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 l'impostazione viene richiamato. Poiché i callback vengono eseguiti sul thread principale, dovrebbero completa rapidamente. I callback vengono richiamati solo quando l'attività è in esecuzione.

Fornire contesto

Quando l'utente attiva l'assistente, onProvideAssistData() viene chiamato per creare un ACTION_ASSIST Intento con tutto il contesto applicazione attuale rappresentata come un'istanza di AssistStructure. Puoi sostituire questo metodo per posizionare qualsiasi elemento desiderato nel bundle venga visualizzato EXTRA_ASSIST_CONTEXT parte dell'intent indiretto.

Descrizione dei contenuti

La tua app può implementare onProvideAssistContent() per migliorare l'esperienza utente con l'assistente, fornendo riferimenti relativi ai contenuti in relazione all'attività corrente. Per descrivere i contenuti dell'app, puoi utilizzare 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 di cui l'utente è attualmente visualizzazione:

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 per implementare onProvideAssistContent() e chiama setClipData().

Implementazione predefinita

Se né il onProvideAssistData() né il onProvideAssistContent() viene implementato, il sistema procede comunque informazioni raccolte automaticamente all'assistente, a meno che l'attuale è contrassegnata come sicura. Come mostrato nella figura 3, il sistema utilizza le implementazioni predefinite di onProvideStructure() e onProvideVirtualStructure() per raccogliere testo e visualizzare informazioni gerarchiche. Se la visualizzazione implementa modelli disegno di testo, sostituisci onProvideStructure() per fornire l'assistente con il testo mostrato all'utente chiamando il numero setText(CharSequence).

Nella maggior parte dei casi, l'implementazione del supporto per l'accessibilità consente un assistente per ottenere le informazioni di cui ha bisogno. Per implementare il supporto per l'accessibilità, osservare le best practice descritte in Rendere le applicazioni Accessibile, inclusi:

Esclusione delle visualizzazioni provenienti 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ò usare anche setSecure() da escludere una piattaforma dall'assistente. Non esiste meccanismo globale (a livello di app) per escludere tutte le visualizzazioni dall'assistente. Nota che FLAG_SECURE non causa l'interruzione dei callback dell'API Assist viene attivato. L'attività che utilizza FLAG_SECURE può comunque fornire informazioni a un'app di assistenza tramite i callback descritti in precedenza 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 API Assist vengono richiamati frase chiave il rilevamento. Per ulteriori informazioni, consulta Voce Azioni.

Considerazioni sull'ordine Z

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

Figura 4. Ordine Z livello assistenza

Se la tua app utilizza di avviso di sistema, rimuovile tempestivamente perché rimangono nella schermo peggiora l'esperienza utente.

App di destinazione

Le app dell'assistente in genere sfruttano i link diretti per trovare le app di destinazione. Per rendere una potenziale app di destinazione, ti consigliamo di aggiungere il supporto dei link diretti. La corrispondenza tra il contesto dell'utente corrente 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. Per Ad esempio, l'app Assistente Google utilizza i link diretti e i link alle app per: indirizzare il traffico verso le app di destinazione.

Implementare il proprio assistente

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