Bentornati al 15esimo capitolo di WWDC16 in Pillole, l’ebook gratuito e in italiano in cui vengono messe in rassegna tutte le novità introdotte in Swift 3 nel corso dell’ultimo evento dedicato ai developers iOS.

Per ricevere gratuitamente l’intero libro digitale con i suoi 21 capitoli, date un’occhiata in fondo a questa pagina!

15.1 Il ciclo di vita di una intent con SiriKit

Il ciclo di vita di una Intent utilizzata per comunicare con SiriKit si suddivide in tre passi:

  1. Resolve – Quando interagiamo con SiriKit, dobbiamo risolvere ogni parametro di un intent, infatti si rischia di dover avere in input molti parametri per poter capire con precisione cosa vuole l’utente.
  2. Confirm – Un cambiamento di cui dobbiamo accertarci che possa servire per l’intent.
  3. Handle – Il più importante quando e effettuiamo l’azione richiesta dall’utente; la logica 
dell’applicazione che sta dietro la richiesta fatta a Siri per noi.

15.2 Resolve Intent

Nello step Resolve dobbiamo aiutare Siri a capire cosa ha detto l’utente e, ancora più importante, dobbiamo capire cosa intende l’utente quando inizia a chiedere qualcosa all’applicazione. Questa è una buona occasione per “influenzare” Siri ad avere il controllo della conversazione con l’utente che sta richiamando la nostra app.

Per fare questo, l’app deve provvedere a risposte che aiutano alla risoluzione della richiesta. Ci sono molte risposte possibili per ogni tipo di dato che Siri capisce. Riprendiamo l’esempio della scorsa volta, l’app UnicornPay:

Ecco cosa Siri recepisce dalle suddette parole:

  • Dominio: Pagamento
  • Intent: invioDenaro
  • App: UnicornPay
  • Destinatario: Gino
  • Importo: 25
  • Valuta: EURO


Per tutte queste informazioni sono possibili delle risposte da parte dell’app UnicornPay, visto che si tratta soltanto di input di sua pertinenza. Quindi già da tutti questi dati può effettuare un’operazione. In questi casi vuol dire che si può comunicare a Siri che si è capito qual è la richiesta e che si può provvedere a fornire un oggetto in risposta per risolvere la richiesta:

success(with: )

Ma non sempre è così: potrebbe anche essere che alcuni parametri importanti per effettuare l’operazione rendano ambigua l’effettiva richiesta. In questi casi conviene essere sicuri che l’utente voglia davvero un’azione piuttosto che un’altra. Allora è possibile chiedere conferma o meno di una specifica azione:

confirmationRequired(with: )

In questa domanda, “Intendi Gino Rossi” inviata a Siri per chiedere all’utente se è corretta la supposizione della nostra app Unicorn Pay, l’utente potrà rispondere Sì o No.

Se ci sono più persone che si chiamano Gino ma la nostra app, ad esempio, per questioni di statistiche calcola che si invia denaro solo a Gino Rossi, viene più comodo all’utente suggerirgli il Gino a cui invia denaro maggiormente e quindi si chiede per conferma, per evitare di inviare denaro invece al signo Gino Dispettino, un antipatico di prima categoria!

Se invece non avessi modo di capire che il preferito dell’utente è Gino Rossi ma avessi più persone che si chiamano Gino, conviene invece inviare un insieme di dari per indicare le possibili risposte all’utente:

disambiguation(with: )

Se invece non ci avesse inviato un dato, è possibile chiedere tramite Siri invece di definire l’input indispensabile mancante. Ad esempio, se si chiede ad UnicornPay tramite Siri di inviare denaro ma non si ritrova il nome della persona a cui inviare denaro. Questo è un dato importante! Allora si può chiedere all’utente di dare maggiori informazioni sull’azione richiesta:

needsMoreDetails(for: )

Nel caso invece avessimo bisogno di un valore specifico e sappiamo che non è stato dato (ad esempio, quanto denaro bisogna inviare) è possibile farlo considerando di essere nel dominio di pagamento, in maniera specifica:

needsValue

Nel caso invece avessimo capito bene quanto denaro vuole inviare e a chi ma non troviamo un corrispettivo, possiamo anche dire che non possiamo supportare l’azione per una determinata ragione, cioè nel nostro caso non riusciamo a trovare l’utente, dunque gli chiediamo di ripetere/cambiare destinatario:

unsupportedWithReason

Se la nostra app non richiede alcun parametro in input possiamo utilizzare invece l’apposita

notRequired

15.3 Confirm Intent

La conferma di un intent implica fornire a Siri il risultato atteso dell’intent scaturito dalla richiesta dell’utente. Si può avere così una conferma a lanciare la procedura logica che sta dietro all’azione formulata a valle della richiesta, fornendo una intent response che Siri mostrerà per poter proseguire con l’azione, come mostrato nell’esempio al WWDC del 2016:

In questo caso si sta inviando 85 dollari a Buttercup, ma noi vogliamo inviare 25 euro a Gino! Nel caso dell’app di pagamento avremo la nostra porzione di codice che andrà a controllare che il servizio sia disponibile per quell’utente, se l’utente è autenticato e se nel suo borsellino c’è denaro sufficiente per inviare 25 euro a Gino Rossi.

15.4 Handle Intent

Qui ci sarà la porzione di codice che riguarda la nostra app, con la chiamata al servizio di rete apposito per effettuare il pagamento. In questo caso Siri farà vedere la UI apposita di attesa per l’utente; non appena il servizio risponde sarà visualizzata la risposta di pagamento andata a buon fine.

In questa fase si dovrà quindi formulare una IntentResponse di questo tipo:

  • ResultCode: Success
  • Payee (destinatario): Gino Rossi
  • Amount (importo): 25
  • Currency (valuta): EUR

***

Per consultare la guida completa seguite il link (raccolta articoli completa).

Per ricevere l’intero ebook compila il seguente modulo con il tuo indirizzo mail!








NO COMMENTS

LEAVE A REPLY