Magic Kinder Protocollo di comunicazione Master App contenuti in
Transcript
Magic Kinder Protocollo di comunicazione Master App contenuti in
Magic Kinder Protocollo di comunicazione Master App contenuti in HTML5 Le componenti Il progetto prevede due componenti fondamentali che dovranno essere realizzate in maniera tale da condividere una parte dei dati e comunicarsi reciprocamente le interazioni che avvengono in maniera da poter sincronizzare alcune funzionalità. Le due parti sono l’applicazione nativa, installata sul telefono dell’utente dallo store che si occuperà di gestire i vari addons, e l’applicazione html, che visualizzerà i contenuti aggiuntivi. La struttura dati Il descrittore Il descrittore è un file json contenente i dati dell’intera applicazione, esso è un oggetto contenente tutte le informazioni necessarie ad ottimizzare il flusso di dati tra le due componenti. I dati del descrittore conterranno le proprietà fondamentali per il protocollo, alle quali potranno esserne aggiunte altre al fine di semplificare e standardizzare la gestione di alcuni elementi, come ad esempio testi e sfondi, della parte html. L’oggetto Descriptor Il descrittore ha due proprietà fondamentali: ● contentType: proprietà di tipo stringa che indica se il pacchetto è una storia o un gioco ● homepage: identificativo di tipo Object dello step di scena della home page secondo la struttura { scene:”idscena”,step:”idstep” } ● langDirection: proprietà di tipo stringa valorizzata “ltr” o “rtl” ● scenes: array di oggetti Scene ● sounds: array di oggetti Sound L’oggetto Scene La scena è un oggetto contenente le proprietà: ● id: identificativo di tipo stringa ● steps: array di oggetti Step L’oggetto Step Lo step è l’oggetto fondamentale della riproduzione in fase di riproduzione della storia e contiene le informazioni riguardanti la visualizzazione dei pulsanti e la riproduzione degli speakerati, con la seguente struttura: ● id: identificativo di tipo stringa ● buttons: oggetto di tipo Buttons, contenente le seguenti proprietà: ○ prev: booleano, ne gestisce la visibilità ○ next: booleano, ne gestisce la visibilità ● speech: path locale dell’mp3 di tipo stringa nullable. Per funzionare correttamente tutti gli speech devono avere nomi univoci. ● firstSpeech: indica se lo step contiene il primo speech del contenuto, campo usato in fase di registrazione audio dall’applicazione per nascondere il tasto prev ● speechDuration: indica il tempo di registrazione per il determinato step, indicato in secondi L’oggetto Sound L’oggetto Sound contiene i riferimenti agli effetti sonori o di sottofondo da utilizzare in maniera interattiva o sincronizzata durante la navigazione del contenuto html per avviare ai limiti di relativi alla riproduzione degli stessi da parte della tecnologia HTML. La struttura è: ● id: identificativo di tipo stringa ● path: path locale dell’mp3 di tipo stringa Esempio di descrittore base { “contentType”:”story”, “langDirection”: “rtl”|”ltl”, “homepage”:{ “scene”:”scene0”, “step”:”init” }, "scenes":[ { "id":"scene0", "steps":[ { "id":"init", "buttons":{ "prev":false, "next":false } }, { "id":"inside", "buttons":{ "prev":false, "next":true }, “firstSpeech”:true "speech":"path/to/speech.mp3", “speechDuration”:15 } ] }, { "id":"scene1", "steps":[ { "id":"init", "buttons":{ "prev":true, "next":false }, "speech":"path/to/speech.mp3", “speechDuration”:15 } ] } ], "sounds":[ { "id":"lose", "path":"fx/lose.mp3" } ] } Sintesi dei flussi Le applicazioni sono sviluppate in maniera tale che possa esservi un dialogo continuo tra la parte nativa e quella html, nello specifico l’applicazione nativa è in grado di trasmettere attraverso chiamate javascript alcuni eventi ed i dati associati alla parte html, mentre la parte html è in grado di fare lo stesso tramite redirect ad url prestabiliti che vengono intercettati ed analizzati. URL Intercettate ● http://contentupdate/{idscena}/{stepscena} utilizzato per comunicare all’app nativa la posizione corrente della storia, nonché permettere alla stessa di interrogare i relativi dati contenuti nel descrittore e far partire lo speech collegato ● http://contentshowbuttons viene utilizzato per comunicare all’applicazione quando deve mostrare i bottoni (back, prev e next) ● http://contentaudio/{audioId} utilizzato per comunicare all’app nativa la necessità di eseguire un audio, accetta due parametri: ○ http://contentaudio/{audioId}/loop per eseguire musiche di sottofondo in grado di andare in loop ○ http://contentaudio/{audioId}/stop per interrompere l’esecuzione di un suono precedentemente avviato ● http://contentpostroll/ utilizzato per comunicare all’app il termine dell’esecuzione del contenuto corrente e richiedere la visualizzazione del contenuto nativo di chiusura, in caso di registrazione audio l’applicazione mostrerà un popup che invita l’utente a tornare alla home. Chiamate javascript ● buttonPressed(buttonId): funzione generalista eseguita dall’applicazione nativa alla pressione dei pulsanti di interfaccia, il parametro buttonId indica il pulsante premuto e può essere valorizzato secondo il protocollo corrente: prev, next, back, listen, read o record. ● speechComplete(): indica all’applicazione html il completamento della riproduzione di uno speakerato in maniera tale da poter eseguire delle azioni sincronizzate. ● startRecording() e stopRecording() per la sincronizzazione dell’effetto di blink durante la registrazione Modalità di contenuto Il comportamento generale dell’applicazione si articola su 2 modalità di contenuto: Play e Record. La modalità Play a sua volta può essere eseguita in modalità Listen (speakerato originale o utente) o Read. L’applicazione di default parte in modalità PlayListen. Play Funzionalità gestite dall’applicazione nativa: ● Intercettazione dell’url “contentupdate” al fine dell’ottenimento dell’id dello step di scena corrente e dei relativi dati ● Visualizzazione dei pulsanti left e right, comunicazione della loro pressione alla parte html tramite funzione javascript “buttonPressed” ● Esecuzione eventuale dello speakerato utente o locale ● Verifica se lo step corrente è la homepage confrontando l’id con il valore contenuto nella proprietà “homepage” del descrittore. ● Se il contentType è “story” e lo step corrente è la homepage: ○ Visualizzazione dei 3 pulsanti listen, read, record ○ Passaggio della selezione alla parte html tramite javascript “buttonPressed” ○ Cambio modalità in base al pulsante premuto ● In ogni caso, se lo step corrente è la homepage: ○ Il pulsante back chiude l’applicazione html ● Se invece lo step corrente non è la homepage: ○ Il pulsante back esegue la funzione “buttonPressed” ● Gestione del sonoro eventuale tramite intercettazione dell’url “contentaudio” Funzionalità gestite dall’applicazione html: ● Grafiche, sfondi, testi, animazioni, numeri di pagina, contenuti ed effetti vari ● Intercettazione della chiamata “buttonPressed” e conseguenti azioni ● Comunicazione all’app nativa dello stato corrente tramite l’URL “contentupdate” ● Comunicazione all’app nativa della conclusione della storia tramite l’URL “contentpostroll” ● Comunicazione all’app nativa della necessità di visualizzare i bottoni (back, prev, next) tramite l’URL “contentshowbuttons” ● Richiesta di riproduzione audio tramite l’URL “contentaudio” Record Funzionalità gestite dall’applicazione nativa: ● Intercettazione dell’url “contentupdate” al fine dell’ottenimento dell’id dello step di scena corrente e dei relativi dati, con conseguente: ○ Visualizzazione dei pulsanti prev e next, comunicazione della loro pressione alla parte html tramite funzione javascript “buttonPressed” ○ Ottenimento del path locale dello speakerato ed utilizzo dello stesso come id ● Gestione delle funzionalità di registrazione e riascolto degli speakerati utente ● Chiamate alle funzioni “startRecording” e “stopRecording” per la sincronizzazione dell’effetto blink Funzionalità gestite dall’applicazione html5: ● Gestione della navigazione in maniera tale da considerare esclusivamente gli step di scena comprensivi di speakerato, provvedendo a visualizzare l’effettiva numerazione degli stessi e garantire il corretto funzionamento dei pulsanti prev e next ● Visualizzazione dello sfondo blurato, del testo in sovraimpressione, dei numeri di speakerato corrente e totali, effetto blink in fase di registrazione sincronizzato con le due funzioni di cui sopra