Mirror API – Notifica e mappe

Di - 30 April 2013 - in
Post image for Mirror API – Notifica e mappe

Nello scorso articolo abbiamo visto come, su Google Glass, un’applicazione può inviare card da mostrare sul dispositivo dell’utente. Per realizzare un’app interattiva è però necessario anche il vice versa: il dispositivo, in base alle azioni dell’utente, deve poter comunicare con il web service che fa da applicazione.

Abbiamo cosí introdotto i menu all’interno delle card, dicendo che servono ad inviare notifiche all’applicazione. Le notifiche, che in questo articolo analizzeremo, sono proprio il sistema grazie al quale i Google Glass sono in grado di comunicare con le nostre applicazioni.

Per ottenere notifiche dalla timeline dell’utente, sarà necessario iscriversi ad essa, segnalando all’endpoint /mirror/v1/subscriptions l’URL da utilizzare come endpoint dell’applicazione. Tale endpoint, per ovvi motivi di sicurezza, deve essere raggiungibile via https. Un esempio di richiesta di iscrizione alle notifiche (ovviamente solo a quelle legate a item della nostra applicazione, o condivisi con essa) è:

POST /mirror/v1/subscriptions HTTP/1.1
Authorization: Bearer auth token
Content-Type: application/json
Content-Length: length

{
  "collection": "timeline"
  "userToken": "harold_penguin",
  "operation": ["UPDATE", "INSERT", "DELETE"],
  "callbackUrl": "https://example.com/notify/callback"
}

In risposta si otterranno i dati dell’iscrizione.

Una notifica non è altro che una richiesta di tipo POST inviata dalla Mirror API all’endpoint della nostra applicazione. Il corpo della richiesta è in JSON, e contiene un attributo userActions.type che corrisponde sostanzialmente all’azione (menuItems.action) associata alla voce di menu che l’utente ha selezionato.

Se tale azione è CUSTOM, il tipo di azione personalizzato sarà scritto in userActions.payload.

Ecco un esempio di JSON di richiesta:

{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "verifyToken": "hash_casuale_per_verifica_referer",
  "userActions": [
    {
      "type": "",
      "payload": ""
    }
  ]
}

Il sistema attenderà per dieci secondi una risposta, prima di terminare la connessione. In caso di operazioni lunghe, quindi, si consiglia di rispondere immediatamente con un 200 OK, per poi gestire in altro modo le situazioni di errore. In caso di restituzione di un codice di errore, il sistema ritenta l’invio.

Il parametro itemId contiene l’ID dell’oggetto al quale la notifica si riferisce. Se l’azione è DELETE, ad esempio, conterrà l’ID della card eliminata. Se l’azione si riferisce a file allegati, come avviene per l’azione SHARE, sarà l’ID dell’oggetto che contiene l’allegato. Se invece ci si riferirà a un messaggio inviato, come per l’azione REPLY, sarà presente l’ID della card risposta (che a sua volta deve contenere l’attributo inReplyTo con l’ID della card alla quale si risponde).

Un tipo di notifica molto particolare è la notifica di posizione. Iscrivendosi alle notifiche di posizione (con la medesima richiesta che si fa per quelle di timeline, ma specificando “locations” nell’attributo collection) riceveremo ogni dieci minuti una notifica che ci avverte dell’aggionamento delle informazioni sulla posizione dell’utente. La notifica avrà questa forma:

{
  "collection": "locations",
  "itemId": "latest",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "verifyToken": "hash_casuale_per_verifica_referer"
}

L’apparato di notifica è insomma molto ben progettato, e apre davvero a molte possibilità, tanto nella condivisione di contenuti (argomento che analizzeremo bene nel prossimo articolo) quanto nella semplice creazione di contenuti interattivi basati sulla posizione attuale dell’utente.

Leave a Reply

Lorenzo Breda Articolo scritto da

Studente di Informatica a Roma, si occupa di programmazione web sopratutto lato server, e di accessibilità del web. Utilizza e ama Debian GNU/Linux, e si interessa di fisica, fumetto, trekking e fotografia (gli ultimi due possibilmente abbinati).
Collabora con Googlab da aprile 2012.

Contatta l'autore

Previous post:

Next post: