Market e Tools: Utility per la personalizzazione di applicazioni Android
Codemotion Rome 2014: Codelab "Android & Internet of Things with Google Cloud Messaging and AppEngine"
1. ROME 11-12 april 2014ROME 11-12 april 2014
Android & Internet of Things with Google
Cloud Messaging and AppEngine
GDG Roma L-AB
Antonino Orlando
Simone Pulcini e il GDG Roma L-AB
2. ROME 11-12 april 2014
Chi siamo: GDG Roma L-AB
http://goo.gl/QG40Os http://goo.gl/6QRlP9
http://goo.gl/cEF2Yn
Il nostro prossimo evento:
3. ROME 11-12 april 2014
• orlando.antonino@gmail.com
• http://it.linkedin.com/in/orlan
doantonino
• https://plus.google.com/+Anto
ninoOrlando
Chi siamo: Antonino Orlando
4. ROME 11-12 april 2014
• simone.pulcini@gmail.com
• http://www.linkedin.com/i
n/simonepulcini
• https://plus.google.com/+S
imonePulcini
Chi siamo: Simone Pulcini
5. ROME 11-12 april 2014
NFC
• RFID (Radio Frequency Identification)
• permette una comunicazione bidirezionale:
entro un raggio di 4 cm
• opera alla frequenza di 13,56 MHz e può
raggiungere una velocità di trasmissione
massima di 424 kbit/s.
6. ROME 11-12 april 2014
Google Cloud Messaging
1) Invio un messaggio a gcm
2) GCM inoltre al device
7. ROME 11-12 april 2014
Workflow del lab
1) Il dispositivo rileva un tag
2) il dispositivo notifica l'evento
al nostro backend
3) il backend chiede l'invio della
notifica a GCM
4) GCM inoltra la notifica
all'utente
8. ROME 11-12 april 2014
Stack software e sorgenti
• ADT Bundle più Plug-in Eclipse per GAE
• Google Play Services (da Android SDK Extras)
• Android Support Library (da Android SDK
Extras)
• github.com/orlando-antonino/GdGLAb_IoT-
AppEngine_TODO.git
• github.com/orlando-antonino/SendByNFC.git
• github.com/spulci/codemotion2014/tree/master/Co
demotionIOTLabBackend
9. ROME 11-12 april 2014
• All'interno del progetto
possiamo trovare i passi di
sviluppo usando la view
“tasks” di eclipse
• Abbiamo un tempo definito
per eseguire ogni “todo”
• siamo qui per sviluppare
insieme... fate domande
Lab How-to
10. ROME 11-12 april 2014
• Richiamiamo il metodo
all'interno dell'activity per
richiedere un
registrationID al server
GCM
• http://developer.android.com/
reference/com/google/androi
d/gms/gcm/GoogleCloudMess
aging.html
Step 1: registration ID
11. ROME 11-12 april 2014
• Inseriamo nelle S.P.:
1. property_reg_id
2. property_app_version
• recuperiamo dalle S.P. il
registrationID memorizzato
precedentemente:
1. property_reg_id
http://developer.android.com/referen
ce/android/content/SharedPreferenc
es.html
Step 2: Shared Preferences
12. ROME 11-12 april 2014
• inseriamo il codice necessario a
richiedere il registrationID al GCM
server
• richiamiamo il metodo all'interno
dell'activity per memorizzare
localmente il registrationID
• inviamo il registrationID al
backend AppEngine
http://developer.android.com/reference/co
m/google/android/gms/gcm/GoogleCloudM
essaging.html
Step 3: GCM
13. ROME 11-12 april 2014
• Entity: lightweight
persistence domain object
• Annotazioni JPA usate:
@Entity, @Id,
@GeneratedValue
• https://developers.google.com/a
ppengine/docs/java/datastore/jp
a/overview-dn2?hl=it
Step 4: creazione di un Entity Bean
14. ROME 11-12 april 2014
• Pattern DAO
• Diversi servizi già realizzati
• Il servizio da realizzare rende
persistente un ClientBean
• https://developers.google.co
m/appengine/docs/java/data
store/jpa/overview-dn2?hl=it
Step 5: servizio addClientBean
15. ROME 11-12 april 2014
• Esponiamo un servizio sul
web in modo da poterlo
chiamare da remoto (dal
client android)
• Annotazioni: @Api,
@ApiMethod (con attributi)
• https://developers.google.co
m/appengine/docs/java/endp
oints/
Step 6: creazione Cloud Endpoint
16. ROME 11-12 april 2014
• Radice progetto (tasto
destro): Google -> Generate
Cloud Endpoint Client
Library
• Innestiamo il codice nel
client Android sistemando i
jar generati e chiamando le
API (lo abbiamo fatto noi
per voi)
Step 7: generiamo e integriamo… (1/2)
17. ROME 11-12 april 2014
Step 7: generiamo e integriamo… (2/2)
• riempiamo la segnatura remota per l'operazione
addclient che prende un ClientBean popolato dal suo
registrationId e lo memorizza sul datastore
invocando il metodo remoto
• lanciamo l'operazione remota di cui abbiamo
preparato la segnatura di cui sopra: viene aperta una
connessione HTTP e viene effettuata la chiamata
18. ROME 11-12 april 2014
E per finire….GCM server side
• GCM può essere interrogato via HTTP o XMPP
• Lato server in HTTP abbiamo usato
l’implementazione del progetto
http://code.google.com/p/gcm/source/brows
e/#git%2Fgcm-server
• I formati della message request e altra
documentazione:
https://developer.android.com/google/gcm/ht
tp.html