Creare un'app di Lista di Voci abilitata a Do in iOS con Siri Integration

Grazie alla gestione delle attività senza mani, gli sviluppatori iOS possono creare un'esperienza di lista molto più accessibile ed efficiente. Siri, assistente vocale intelligente di Apple, fornisce un quadro robusto per integrare i comandi vocali direttamente nella tua app. Questa guida ti accompagna attraverso ogni passo della costruzione di un'app di lista vocale abilitata a fare, dall'impostazione iniziale del progetto all'elaborazione avanzata di metodi di gestione e distribuzione delle migliori pratiche.

Comprendere SiriKit e il suo ruolo nella gestione delle attività

SiriKit è un framework che permette alla tua app di estendere la sua funzionalità a Siri. Invece di costruire un'interfaccia vocale separata, definisci le azioni che gli utenti possono eseguire attraverso comandi vocali, e Siri gestisce il riconoscimento vocale e l'elaborazione di linguaggio naturale.

Il framework utilizza intents[] – oggetti che rappresentano le azioni dell'utente. La tua app definisce gli intenti personalizzati per le operazioni specifiche che supporta. Quando un utente parla un comando come "Hey Siri, aggiungi latte alla mia lista di acquisti in MyToDoApp," Siri corrisponde alla frase al tuo intento, estrae i parametri (come il nome dell'attività e l'identificatore dell'elenco degli elenchi), e consegna l'intento alla tua app.

I vantaggi principali dell'utilizzo di SiriKit includono:

  • Funzionamento senza mani:[] Gli utenti possono gestire le attività durante la guida, la cottura, o l'esercizio.
  • Aumentata accessibilità:[ Il controllo vocale aiuta gli utenti con disabilità motorie o visive.
  • Consistenza con le interazioni vocali del sistema:[ La tua app sembra un cittadino iOS di prima classe.
  • Integrazione breve:[] Gli utenti possono creare collegamenti personalizzati Siri per azioni frequentemente utilizzate.

SiriKit vs. altre soluzioni vocali

Si può chiedere se utilizzare SiriKit, riconoscimento vocale personalizzato (tramite il framework Speech), o un servizio di terze parti come Google Speech-to-Text. SiriKit è l'approccio consigliato per integrare con l'assistente del sistema perché non richiede alcuna registrazione audio separata UI, nessun riconoscimento vocale, e funziona attraverso i dispositivi Apple.

Impostazione del progetto per l'integrazione dei siri

La creazione di un'app con voce attivata inizia con la configurazione standard del progetto Xcode. Dovrai anche abilitare la capacità Siri e aggiungere un'estensione Intents per gestire le richieste anche quando l'applicazione non è in esecuzione.

Passo 1: Creare un nuovo progetto Xcode

Avvia Xcode e crea un nuovo progetto utilizzando il modello App] (iOS). Dare al vostro progetto un nome, come [VoiceTodo], e garantire SwiftUI o UIKit è selezionato in base alle vostre preferenze.

Fase 2: Abilitare la Capabilità Siri

Nella scheda ]]Signing & Capabilities[]], fare clic sul pulsante [+ Capability[]]] e cercare []]]Siri[]]]. Aggiungi la capacità e assicura che la casella di controllo sia selezionata.

Passo 3: Aggiungere un'estensione degli intenti

Per consentire a Siri di gestire gli intenzioni anche quando la tua app è in background o non è stata lanciata, è necessario un Intenzioni estensione]]. Vai a File > Nuovo > Target, selezionare ]Intenzioni estensione]

Passo 4: Creare un file di definizione degli intents

Nel vostro obiettivo principale app, creare un nuovo file utilizzando il []Intents Definition[] modello (fondato sotto Modelli di risorse).

Per garantire che il file di definizione sia disponibile per entrambi gli obiettivi, selezionare il file [[]TodoIntents.intentdefinition[] nel navigatore di progetto e, nell'ispettore file, aggiungere sia la tua app principale che l'estensione degli intents al [Target Membership lista.

Definizione di intenzioni personalizzate per le operazioni di To-Do

Con il file di definizione degli intents pronto, è ora possibile creare gli intenzioni specifiche che alimentano i comandi vocali. Per un'applicazione di base da fare lista, si desidera almeno tre intenzioni: AddTaskIntent, ]RemoveTaskIntent, e [FLTIn:4]Mostra[

Creare l'Intent AddTask

  1. Apri TodoIntents.intentdefinition[]. Cliccate sul [+] nella parte inferiore sinistra della tela e selezionate New Intent].
  2. Nomina l'intento .
  3. In Parametri[[]], aggiungere un nuovo parametro [[]] di tipo [String[[]]]].
  4. Impostare il parametro Nome di riproduzione[] (ad esempio, “Nome di rischio”) e Prompt[ (ad esempio, “Quale compito dovrei aggiungere?”).
  5. Nella sezione Risposta[[]], scegli [[]] Successo[] e definisci un modello di risposta come “Aggiungi {{taskName}} alla tua lista di cose da fare.”
  6. Assicurarsi Custom Class[]] è controllato e il nome della classe è .

Creazione di RemoveTaskIntent

Ripetere il processo per un ] con un parametro . La risposta potrebbe essere “Rimovibile {{taskName}}” o “{taskName}} non è trovato.” Si può anche aggiungere un Failure] tipo di risposta per quando l'attività non esiste.

Creare il ShowTasksIntent

Per , potresti non aver bisogno di parametri. Invece, affidati alla risposta per contenere un elenco di compiti. Nella sezione di risposta, aggiungi un [Content[]] proprietà di tipo [String]]]. Usare un modello di risposta come "Hai {{count}} compiti: {{content}:[8] .

Generando le classi intenzionali

Dopo aver definito tutti gli intenti, costruire il tuo progetto. Xcode genererà automaticamente classi Swift per ogni intento e la sua risposta. Queste classi vivono nella cartella DerivedData[] ma sono visibili nell'editor.

Implementazione di Intent Handling nella tua App e Estensione

Ora che gli intenti sono definiti, è necessario scrivere il codice che li gestisce quando Siri invoca la tua app.

Gestione degli Intenti nell'estensione degli Intenti

L'obiettivo di estensione degli Intents include un file predefinito []. Aprirlo e sostituire il suo contenuto con una classe che si conformi ai protocolli di gestione degli intenti generati.

import Intents

class IntentHandler: INExtension, AddTaskIntentHandling, RemoveTaskIntentHandling, ShowTasksIntentHandling {

 override func handler(for intent: INIntent) -> Any? {
 return self
 }

 // MARK: - Add Task
 func handle(intent: AddTaskIntent, completion: @escaping (AddTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(AddTaskIntentResponse.failure(taskName: "unknown"))
 return
 }
 // Persist the task to your data store (Core Data, UserDefaults, etc.)
 // For simplicity, we'll assume a shared data manager
 TaskDataManager.shared.addTask(taskName: taskName, listName: intent.listName ?? "Default")
 completion(AddTaskIntentResponse.success(taskName: taskName))
 }

 func resolveTaskName(for intent: AddTaskIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
 if let taskName = intent.taskName, !taskName.isEmpty {
 completion(.success(with: taskName))
 } else {
 // Prompt user for a task name
 completion(.needsValue())
 }
 }

 // MARK: - Remove Task
 func handle(intent: RemoveTaskIntent, completion: @escaping (RemoveTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(.failure(taskName: "unknown"))
 return
 }
 let removed = TaskDataManager.shared.removeTask(taskName: taskName)
 if removed {
 completion(.success(taskName: taskName))
 } else {
 completion(.notFound(taskName: taskName))
 }
 }

 // MARK: - Show Tasks
 func handle(intent: ShowTasksIntent, completion: @escaping (ShowTasksIntentResponse) -> Void) {
 let tasks = TaskDataManager.shared.allTasks()
 let taskList = tasks.map { $0.name }.joined(separator: ", ")
 let count = tasks.count
 let response = ShowTasksIntentResponse.success(count: count, content: taskList)
 completion(response)
 }
}

Data Store condiviso

Poiché l'estensione degli intent funziona in un processo separato, non è possibile accedere direttamente al modello di dati principale della vostra app. È necessario utilizzare un contenitore condiviso (App Group) per memorizzare le attività in una posizione comune come un'estensione condivisa UserDefaults]]] suite o un core Data store che vive nella directory principale del gruppo App.

Gestione degli Intenti nell'App principale

Quando la tua app è più frontale e l'utente attiva un collegamento Siri, potresti anche voler gestire gli intenti direttamente nell'app principale (senza estensione). Puoi conformare il delegato o la scena dell'app agli stessi protocolli di intenti. Tuttavia, per la maggior parte dei casi, l'estensione è sufficiente perché funziona indipendentemente dal fatto che l'app sia in primo piano.

Funzionalità in attesa: Conferma, Indo e Parametri

Per rendere robusta la tua lista di messaggi abilitati alla voce, aggiungi supporto per le finestre di dialogo e la risoluzione dei parametri.

Metodi di risoluzione

Per ogni parametro, è possibile implementare un metodo [] che convalida o chiede chiarimenti. Ad esempio, se l'utente dice “Aggiungi le uova” senza specificare quale lista, il metodo può richiedere: “Quale lista desideri aggiungere le uova a?” Se hai solo un elenco, risolvi automaticamente a quella lista.

Risposte di conferma

Si può lasciare che Siri chieda all'utente di confermare un'azione prima di eseguirla. Questo è utile per operazioni distruttive come la rimozione dei compiti. Nella classe di risposta d'intento, aggiungere un [Conferma[] tipo di risposta. Quando si tratta dell'intento, è possibile restituire una risposta di conferma che include i dettagli.

URL Gestione per il collegamento profondo

Dopo aver eseguito un'azione, si potrebbe desiderare di aprire la tua app per mostrare l'elenco aggiornato. Il tuo gestore di intenti può chiamare [ se disponibile, o la tua applicazione principale può rispondere a schemi URL.

Testare la tua App abilitata alla voce

Testare l'integrazione Siri richiede una configurazione, perché i comandi parlati non possono essere simulati direttamente.

Utilizzo del Siri Simulator in Xcode

Eseguire l'applicazione principale su un simulatore, quindi interrompere l'applicazione. Successivamente, eseguire il target di estensione Intents utilizzando uno schema configurato per il simulatore. Xcode lancerà un'interfaccia Siri simulata dove è possibile digitare il comando.

Test con un dispositivo reale

Per un riconoscimento accurato delle vostre specifiche intenzioni, provate su un vero dispositivo iOS che esegue iOS 14 o versioni successive. Dopo aver installato l'app, aprire Impostazioni > Siri & Search > MyToDoApp e garantire che gli intenti siano attivati.

Questioni comuni e debug

  • Intento non riconosciuto:[] Verificare che l’Intents Extension Info.plist include i nomi delle classi intente sotto IntentsSupported].
  • Data non condivisa:[ Assicurare che entrambi gli obiettivi appartengano allo stesso Gruppo App e che il percorso di data store è corretto.
  • Risponde non parlate:[] Utilizzare modelli di risposta che includono variabili; Siri le legge ad alta voce.
  • Parametro mancante:[] Metodi di risoluzione di implementazione per gestire input ambigui.

Ripartizione e considerazioni sull'App Store

Nel negozio di app Connect, aggiungere una nota nelle note di recensione che spiegano cosa fanno le vostre intenzioni e fornire comandi di prova. Apple probabilmente testa con un vero dispositivo, in modo da garantire che tutto funzioni correttamente.

Per massimizzare l'adozione degli utenti, prendere in considerazione le seguenti migliori pratiche:

  • A bordo degli utenti:[] Mostra un breve tutorial sui comandi vocali disponibili quando l'applicazione viene lanciata per la prima volta.
  • Supporto Scorciatoie:[] Permettere agli utenti di creare scorciatoie vocali personalizzate per compiti specifici (ad esempio, “Hey Siri, aggiungere generi alimentari”) via e .
  • Segui le tue intenzioni:[ Fornire richieste localizzate e modelli di risposta per le lingue diverse.
  • Esegui con grazia gli errori di Handle:[] Risponde sempre una risposta significativa, anche se il compito fallisce, per guidare l'utente.

Caratteristiche avanzate e passi successivi

Una volta che hai la lista di base attivata per fare-fare, puoi estenderla con:

  • Pasaggio della data di lingua naturale:[] Gli utenti dicono “Aggiungi il latte per domani” e impostano automaticamente una data dovuta usando .
  • Gruppo e tag di supporto:[] Aggiungi parametri per categorie come [] o .
  • Integrazione Inter-app:[]] Usa SiriKit [] Workout[, ]]Media], o altri domini se la tua app si espande oltre le liste di dominio.
  • Custom vocabolario:[] Fornire un vocabolario plist per formare Siri per riconoscere le frasi specifiche dell'app come “la mia lista di droghe” o “ compiti di lavoro”.

Conclusioni

Costruire un'app di list to-do con l'integrazione Siri è un modo pratico per migliorare la produttività e l'accessibilità degli utenti. Definindo gli intenti personalizzati, implementando i gestori in un'estensione dedicata, e utilizzando un data store condiviso, è possibile creare un'esperienza senza mani senza soluzione di continuità. I passaggi delineati in questa guida - dalla configurazione del progetto alla prova e alla presentazione - dare una solida base.

Per ulteriori dettagli, fare riferimento al funzionario di Apple [] Documentazione di SiriKit e la [ Guida di abbreviazioni[]] Se siete nuovi allo sviluppo di iOS, anche rivedere ]