SlideShare a Scribd company logo
1 of 43
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni




Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni




                                Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

                                                                                        Andrea Baccega

Founder DroidTech.it
Co-Founder Androidiani.com

@veke87
me@andreabaccega.com

                               Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

                                                                                         Dario Lipari

Android Apps: Modus Operandi, Swapper for root user
Manteiner Hobbybrew – http://hobbybrew.kenai.com

@azatoth77
dario.lipari@gmail.com

                                Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni



Un'applicazione modulare è un'applicazione che prevede più
componenti:

●Un ”Core”
●Più ”Plug-in”




Ognuna di queste componenti è un package differente.
●



                                 Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni


Android dispone di classi native per la comunicazione tra applicazioni
diverse e componenti della stessa applicazione:

Intent e BroadcastReceiver
●




Service e ContentProvider
●




                                Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

Un Intent è semplicemente l'esplicitazione di un'intenzione

●Vorrei avviare un'applicazione
●Vorrei passare da un'Activity ad un'altra all'interno della stessa

applicazione
●Vorrei comunicare il cambiamento di stato di un parametro (es:

notifica geolocalizzazione, cambio livello della batteria, ecc...)

                                 Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni



●Permette di passare dati attraverso l'utilizzo della classe Bundle e
all'implementazione di Parcelable e Serializable
●Viene propagato grazie ad un metodo dell'oggetto Context:

sendBroadcast() e tutti i suoi overload
●E' possibile specificare una “action” generica oppure esplicitare a

quale Activity o BroadcastReceiver verrà inviata


                                Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni



Come trasportare i dati da chi lancia l'intent a chi li riceve?

Grazie all'oggetto Bundle che è incapsulato all'interno della classe Intent.
Bundle accetta in input una coppia Key-Value, dove Key è una stringa che
rappresenta il nome del parametro e Value è un tipo nativo (String, int,
float, ecc...) oppure un oggetto che implementa Serializable o Parceable.


                                    Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

Parcelable (interfaccia specifica Android) è più indicato se i dati non
devono essere serializzati:

infatti il modo in cui Parcelable salva e recupera i dati può cambiare ad
ogni implementazione di Android e se l'oggetto Parcelable viene
serializzato (file o db) potrebbe non poter essere più recuperabile.

Serializable è meno performante, ma è indicato per la serializzazione.
                                  Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni




L'oggetto Bundle è molto flessibile e permette di contenere i dati in ogni
formato ;)

E' possibile utilizzare anche un oggetto JSON che può essere incapsulato
nell'oggetto Bundle in formato stringa.


                                   Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

Ecco il Manifest del BroadcastReceiver che riceve un intent:


<receiver android:name=”CheckReceiver”>
       <intent-filter>
              <action
android:name=”org.azasoft.mo.intent.QUERY_CONDITION”/>
       </intent-filter>
</receiver>




                                  Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

Ecco il codice che lancia un intent:


Intent intent = new Intent(“org.azasoft.mo.intent.QUERY_CONDITION”);

intent.setPackage(“org.azasoft.plugin.batterylevel”);

intent.putExtra(“json”,
_CurrentConditions.get(ConditionIndex).get_bundle());

_context.sendOrderedBroadcast(intent, null, myBroadcastReceiver,
null, Activity.RESULT_FIRST_USER, null, null);




                                        Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

Ecco il codice del BroadcastReceiver che riceve l'intent, ma sopratutto ne
riceve i dati:

JSONObject json = new
JSONObject(intent.getExtras().getString(“json”));
…
setResultCode(Activity.RESULT_OK);




                                  Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni



Un caso reale:

Modus Operandi permette di configurare Android sulla base di situazioni,
composte da condizioni da verificare e azioni da svolgere.

E' un'applicazione modulare che utilizza Intent, BroadcastReceiver,
AlarmManager, Thread e WakeLock per svolgere i suoi compiti.

                                  Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni



AlarmManager è utilizzato come Scheduler:

In questo modo ad intervalli regolari Modus Operandi può effettuare
il controllo di tutte le Situazioni inserite lanciando un intent per
ogni
Condizione da verificare ed uno per ogni Azione da svolgere.

                                Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni




Un Thread specifico è lanciato dal BroadcastReceiver che riceve
l'intent
di AlarmManager per effettuare il controllo delle Situazioni ed il lancio
delle Azioni associate.


                                 Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni




Una Condizione, come un'Azione, è composta da un BroadcastReceiver
e da un'Activity.

Il BroadcastReceiver serve per verificare la Condizione, l'Activity serve per
configurarla e passare al Core i dati che questo poi serializzerà su DB e li
ripasserà al BroadcastReceiver per verificarne lo stato quando
necessario.
                                   Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

                              Ci sono Condizioni                       Fals            Core lancia un intent
Start check                           da                               e                per ogni Azione da
Situazione                        verificare?                                                eseguire
                                          True
                            Core lancia Intent per
                           verificare la Condizione


                                La condizione è                         Fals                   Fine
                                  verificata?                           e                   Situazione

                                          Tru
                                          e
                            Passo alla condizione
                                 seguente


                          Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni


Tips

E' possibile usare PackageManager per verificare che il plugin che si sta
chiamando è davvero installato oppure no.
Questo evita eventuali problemi legati ad una disinstallazione successiva
di qualche plugin.



                                  Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Servizi




Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Servizi – Che Cosa sono?




Il Servizio è un componente dell’applicazione utilizzato per eseguire un’operazione di
●

maggiore durata ed è utilizzzato per la fornitura di funzionalità con altre applicazioni




                                       Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Servizi – Cosa Non sono?




                                 ●   Il Service NON è:
1.   Un processo separato
2.   Un Thread




                                     Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Servizi – I Due Tipi di Servizio




●Esistono due tipi di servizio:
•Locale


•Remoto




●   Noi tratteremo solamente il Remoto!




                                            Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Servizi – La Ricetta




●Quattro sono i componenti chiave:
•android.app.Service


•android.content.ServiceConnection


•Tag <service> sull’Android Manifest


•Android.os.Binder




                                          Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Servizi – AIDL Interface


●   AIDL : Android Interface Definition Language
●

Permette di definire l’interfaccia che condivideranno il client e il service tramite un
linguaggio molto vicino al JAVA.
●




                                                                                                                        ●   *IBinder è un interfaccia




                                          Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
funzionalità
                  I Servizi – Pro e Contro per la condivisione funzionalità



●
    PRO                                                CONTRO


    Performante                                        Adatto a pochi scenari

    Low Level *                                        Necessità di gestire la connessione remota



                                                                                                                      ●   *IBinder è un interfaccia




                                        Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I ContentProviders




Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Content Providers – Che Cosa Sono?




●I Content Provider servono ad incapsulare dati e renderli disponibili alle applicazioni
tramite l’interfaccia ContentResolver.
●Di solito i ContentProviders vengono costruiti sopra un Database.




                                       Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Content Providers – Cosa Permettono di Fare?




●Attraverso i Content providers è possibile:
•Condividere dati tra applicazioni


•Leggere dati


•Scrivere dati


•Notificare cambiamenti sui dati




                                       Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Content Providers – La ricetta




●I componenti chiave:
•Uri, UriMatcher


•ContentResolver


•Tag <provider> sull’Android Manifest


•Cursor




                                       Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
I Content Providers – Pro e Contro per la condivisione dati

    PRO                                                  CONTRO

●

    Molto Facile da implementare                         Non più facile se Datastore != SQLite



    Notifiche Push

    Sistema a Uri

    Gestione nativo delle permissions
                                                                                                                        ●   *IBinder è un interfaccia




                                          Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM




Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – Cosa è?


                      ●   Android Cloud to Device Messaging Framework

●Permette l’invio di messaggi leggeri dal proprio server alle proprie applicazioni Android.
●Non è disegnato per inviare grande mole dati bensi per notificare l’esistenza di nuovi dati




                                        Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
possibilità
                  AC2DM – Le possibilità del servizio




•   Veicolare una richiesta differente per ogni dispositivo
•   Inviare informazioni fino a 1024bytes
•   Consumi di batteria veramente ridotti
•   Real Time notifications
•   Zero Costi – Si! E’ gratuito ☺




                                       Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – La ricetta




•   Un Server ( che supporti chiamate HTTPS )
•   Una Web App
•   Un account Google abilitato
•   Piccole Modifiche all’app




                                     Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – La ricetta




•   Un Server ( che supporti chiamate HTTPS )
•   Una Web App
•   Un account Google abilitato
•   Piccole Modifiche all’app




                                     Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – Il funzionamento – La Registrazione
Applicazione Primo Avvio

             Start
         Applicazione

                                                                                                             Google
           Broadcast                                                                                         Servers
           Richiesta                                                  Google
         Registration_id                                             Receiver

                                                                                               Registration_id
         Registration
          Receiver



            Sender                                                                                            Web App



                                     Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – Il funzionamento – L’invio Dati

●Il Server effettua una richiesta in POST a https://android.apis.google.com/c2dm/send con le
seguenti chiavi (ad Es):




           Chiave                                         Valore

           registration_id                                xxxxxxxxx

           collapse_key                                   nuovo_utente

           data.nome                                      Mario Rossi

           data.email                                     mario.rossi@droidtech.it

           delay_while_idle                               x




                                              Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – Il funzionamento – L’invio dei Dati 2

                   Send msg ?                      Google
                                                   Servers
Server                    Ok!




                     Conversione
                          A                                GTALK
                        Intent

☺

                                Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – Il funzionamento – La ricezione


●Una volta che google invia il messaggio al cellulare, l’applicazione verrà svegliata da un
intent in broadcast contenente i seguenti campi extra




             Chiave                                     Valore

             nome                                       Mario Rossi

             email                                      Mario.rossi@droidtech.it




                                           Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – Possibili Scenari


●Esempi:
•Localizzazione Real-time


•Sync impostazioni WebApp+Android App Real-Time


•Notifiche Real Time



+∞
•




                                    Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AC2DM – Pro e Contro per la condivisione dati



    PRO                                                  CONTRO
●




    Free                                                 Integrazione su più fronti



    Veloce

    Multi Livello
                                                                                                                       ●   *IBinder è un interfaccia




                                         Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
AB – E questo è tutto gente




                     Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77

More Related Content

Similar to Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
QIRIS
 

Similar to Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni (20)

SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
 
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
 
Strategie per applicazioni web prima o meglio dell'app nativa
Strategie per applicazioni web prima o meglio dell'app nativaStrategie per applicazioni web prima o meglio dell'app nativa
Strategie per applicazioni web prima o meglio dell'app nativa
 
Cqrs and IoT: a match made in heaven
Cqrs and IoT: a match made in heavenCqrs and IoT: a match made in heaven
Cqrs and IoT: a match made in heaven
 
follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Ideare un app e farla fruttare: quanti modi? Quale scegliere?
Ideare un app e farla fruttare: quanti modi? Quale scegliere?Ideare un app e farla fruttare: quanti modi? Quale scegliere?
Ideare un app e farla fruttare: quanti modi? Quale scegliere?
 
Applicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneApplicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazione
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30
 
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
 
App di successo quali strumenti? e le performance?
App di successo quali strumenti? e le performance?App di successo quali strumenti? e le performance?
App di successo quali strumenti? e le performance?
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Xamarin.android
Xamarin.androidXamarin.android
Xamarin.android
 
Da A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveDa A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di Cognitive
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
 
L'App store per applicazioni Enterprise: La mobilità porta a porta
L'App store per applicazioni Enterprise: La mobilità porta a portaL'App store per applicazioni Enterprise: La mobilità porta a porta
L'App store per applicazioni Enterprise: La mobilità porta a porta
 

More from Codemotion

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

  • 1. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 2. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Andrea Baccega Founder DroidTech.it Co-Founder Androidiani.com @veke87 me@andreabaccega.com Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 3. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Dario Lipari Android Apps: Modus Operandi, Swapper for root user Manteiner Hobbybrew – http://hobbybrew.kenai.com @azatoth77 dario.lipari@gmail.com Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 4. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Un'applicazione modulare è un'applicazione che prevede più componenti: ●Un ”Core” ●Più ”Plug-in” Ognuna di queste componenti è un package differente. ● Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 5. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Android dispone di classi native per la comunicazione tra applicazioni diverse e componenti della stessa applicazione: Intent e BroadcastReceiver ● Service e ContentProvider ● Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 6. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Un Intent è semplicemente l'esplicitazione di un'intenzione ●Vorrei avviare un'applicazione ●Vorrei passare da un'Activity ad un'altra all'interno della stessa applicazione ●Vorrei comunicare il cambiamento di stato di un parametro (es: notifica geolocalizzazione, cambio livello della batteria, ecc...) Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 7. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni ●Permette di passare dati attraverso l'utilizzo della classe Bundle e all'implementazione di Parcelable e Serializable ●Viene propagato grazie ad un metodo dell'oggetto Context: sendBroadcast() e tutti i suoi overload ●E' possibile specificare una “action” generica oppure esplicitare a quale Activity o BroadcastReceiver verrà inviata Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 8. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Come trasportare i dati da chi lancia l'intent a chi li riceve? Grazie all'oggetto Bundle che è incapsulato all'interno della classe Intent. Bundle accetta in input una coppia Key-Value, dove Key è una stringa che rappresenta il nome del parametro e Value è un tipo nativo (String, int, float, ecc...) oppure un oggetto che implementa Serializable o Parceable. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 9. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Parcelable (interfaccia specifica Android) è più indicato se i dati non devono essere serializzati: infatti il modo in cui Parcelable salva e recupera i dati può cambiare ad ogni implementazione di Android e se l'oggetto Parcelable viene serializzato (file o db) potrebbe non poter essere più recuperabile. Serializable è meno performante, ma è indicato per la serializzazione. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 10. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni L'oggetto Bundle è molto flessibile e permette di contenere i dati in ogni formato ;) E' possibile utilizzare anche un oggetto JSON che può essere incapsulato nell'oggetto Bundle in formato stringa. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 11. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Ecco il Manifest del BroadcastReceiver che riceve un intent: <receiver android:name=”CheckReceiver”> <intent-filter> <action android:name=”org.azasoft.mo.intent.QUERY_CONDITION”/> </intent-filter> </receiver> Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 12. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Ecco il codice che lancia un intent: Intent intent = new Intent(“org.azasoft.mo.intent.QUERY_CONDITION”); intent.setPackage(“org.azasoft.plugin.batterylevel”); intent.putExtra(“json”, _CurrentConditions.get(ConditionIndex).get_bundle()); _context.sendOrderedBroadcast(intent, null, myBroadcastReceiver, null, Activity.RESULT_FIRST_USER, null, null); Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 13. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Ecco il codice del BroadcastReceiver che riceve l'intent, ma sopratutto ne riceve i dati: JSONObject json = new JSONObject(intent.getExtras().getString(“json”)); … setResultCode(Activity.RESULT_OK); Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 14. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Un caso reale: Modus Operandi permette di configurare Android sulla base di situazioni, composte da condizioni da verificare e azioni da svolgere. E' un'applicazione modulare che utilizza Intent, BroadcastReceiver, AlarmManager, Thread e WakeLock per svolgere i suoi compiti. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 15. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni AlarmManager è utilizzato come Scheduler: In questo modo ad intervalli regolari Modus Operandi può effettuare il controllo di tutte le Situazioni inserite lanciando un intent per ogni Condizione da verificare ed uno per ogni Azione da svolgere. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 16. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Un Thread specifico è lanciato dal BroadcastReceiver che riceve l'intent di AlarmManager per effettuare il controllo delle Situazioni ed il lancio delle Azioni associate. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 17. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Una Condizione, come un'Azione, è composta da un BroadcastReceiver e da un'Activity. Il BroadcastReceiver serve per verificare la Condizione, l'Activity serve per configurarla e passare al Core i dati che questo poi serializzerà su DB e li ripasserà al BroadcastReceiver per verificarne lo stato quando necessario. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 18. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Ci sono Condizioni Fals Core lancia un intent Start check da e per ogni Azione da Situazione verificare? eseguire True Core lancia Intent per verificare la Condizione La condizione è Fals Fine verificata? e Situazione Tru e Passo alla condizione seguente Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 19. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Tips E' possibile usare PackageManager per verificare che il plugin che si sta chiamando è davvero installato oppure no. Questo evita eventuali problemi legati ad una disinstallazione successiva di qualche plugin. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 20. I Servizi Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 21. I Servizi – Che Cosa sono? Il Servizio è un componente dell’applicazione utilizzato per eseguire un’operazione di ● maggiore durata ed è utilizzzato per la fornitura di funzionalità con altre applicazioni Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 22. I Servizi – Cosa Non sono? ● Il Service NON è: 1. Un processo separato 2. Un Thread Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 23. I Servizi – I Due Tipi di Servizio ●Esistono due tipi di servizio: •Locale •Remoto ● Noi tratteremo solamente il Remoto! Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 24. I Servizi – La Ricetta ●Quattro sono i componenti chiave: •android.app.Service •android.content.ServiceConnection •Tag <service> sull’Android Manifest •Android.os.Binder Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 25. I Servizi – AIDL Interface ● AIDL : Android Interface Definition Language ● Permette di definire l’interfaccia che condivideranno il client e il service tramite un linguaggio molto vicino al JAVA. ● ● *IBinder è un interfaccia Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 26. funzionalità I Servizi – Pro e Contro per la condivisione funzionalità ● PRO CONTRO Performante Adatto a pochi scenari Low Level * Necessità di gestire la connessione remota ● *IBinder è un interfaccia Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 27. I ContentProviders Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 28. I Content Providers – Che Cosa Sono? ●I Content Provider servono ad incapsulare dati e renderli disponibili alle applicazioni tramite l’interfaccia ContentResolver. ●Di solito i ContentProviders vengono costruiti sopra un Database. Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 29. I Content Providers – Cosa Permettono di Fare? ●Attraverso i Content providers è possibile: •Condividere dati tra applicazioni •Leggere dati •Scrivere dati •Notificare cambiamenti sui dati Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 30. I Content Providers – La ricetta ●I componenti chiave: •Uri, UriMatcher •ContentResolver •Tag <provider> sull’Android Manifest •Cursor Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 31. I Content Providers – Pro e Contro per la condivisione dati PRO CONTRO ● Molto Facile da implementare Non più facile se Datastore != SQLite Notifiche Push Sistema a Uri Gestione nativo delle permissions ● *IBinder è un interfaccia Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 32. AC2DM Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 33. AC2DM – Cosa è? ● Android Cloud to Device Messaging Framework ●Permette l’invio di messaggi leggeri dal proprio server alle proprie applicazioni Android. ●Non è disegnato per inviare grande mole dati bensi per notificare l’esistenza di nuovi dati Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 34. possibilità AC2DM – Le possibilità del servizio • Veicolare una richiesta differente per ogni dispositivo • Inviare informazioni fino a 1024bytes • Consumi di batteria veramente ridotti • Real Time notifications • Zero Costi – Si! E’ gratuito ☺ Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 35. AC2DM – La ricetta • Un Server ( che supporti chiamate HTTPS ) • Una Web App • Un account Google abilitato • Piccole Modifiche all’app Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 36. AC2DM – La ricetta • Un Server ( che supporti chiamate HTTPS ) • Una Web App • Un account Google abilitato • Piccole Modifiche all’app Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 37. AC2DM – Il funzionamento – La Registrazione Applicazione Primo Avvio Start Applicazione Google Broadcast Servers Richiesta Google Registration_id Receiver Registration_id Registration Receiver Sender Web App Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 38. AC2DM – Il funzionamento – L’invio Dati ●Il Server effettua una richiesta in POST a https://android.apis.google.com/c2dm/send con le seguenti chiavi (ad Es): Chiave Valore registration_id xxxxxxxxx collapse_key nuovo_utente data.nome Mario Rossi data.email mario.rossi@droidtech.it delay_while_idle x Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 39. AC2DM – Il funzionamento – L’invio dei Dati 2 Send msg ? Google Servers Server Ok! Conversione A GTALK Intent ☺ Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 40. AC2DM – Il funzionamento – La ricezione ●Una volta che google invia il messaggio al cellulare, l’applicazione verrà svegliata da un intent in broadcast contenente i seguenti campi extra Chiave Valore nome Mario Rossi email Mario.rossi@droidtech.it Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 41. AC2DM – Possibili Scenari ●Esempi: •Localizzazione Real-time •Sync impostazioni WebApp+Android App Real-Time •Notifiche Real Time +∞ • Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 42. AC2DM – Pro e Contro per la condivisione dati PRO CONTRO ● Free Integrazione su più fronti Veloce Multi Livello ● *IBinder è un interfaccia Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77
  • 43. AB – E questo è tutto gente Andrea Baccega – info@droidtech.it – Androidiani.Com Dario Lipari – dario.lipari@gmail.com – @azatoth77

Editor's Notes

  1. Processo: Tranne che diversamente specificato infatti il Service non viene eseguito su un differente processo dall’applicazione chiamante Thread: Il Service, come componente, non deve essere utilizzato come un Thread per evitare un ANR. ( domanda. Chi sa dirmi cos’è ANR? ) Tempo : 40sec
  2. Locale: Update Meteo ogni ora Remoto: Player Musicale Android Tempo minore 3:37
  3. Service: - Classe rappresentante il servizio vero e proprio ServiceConnection: - Interfaccia per monitorare lo stato di un service. Attraverso i suoi callbacks onServiceConnected e ..Disconnected abbiamo la possibilità di sapere quando possiamo interagire con il service remoto &lt;service&gt;: Possibilità di specificare: Service su differente processo Permission: Per farlo partire e quindi permettere di bindarsi. Binder: - Classe Base per effettuare RPC ( Remote Procedure Calls ) . La maggior parte degli sviluppatori non estenderà questa casse direttamente ma utilizzerà il tool aidl del pacchetto sdk android
  4. Service: - Classe rappresentante il servizio vero e proprio ServiceConnection: - Interfaccia per monitorare lo stato di un service. Attraverso i suoi callbacks onServiceConnected e ..Disconnected abbiamo la possibilità di sapere quando possiamo interagire con il service remoto Binder: - Classe Base per effettuare RPC ( Remote Procedure Calls ) . La maggior parte degli sviluppatori non estenderà questa casse direttamente ma utilizzerà il tool aidl del pacchetto sdk android
  5. PRO - Low level poichè si ha maggiore controllo sul flusso dati e sulla connessione CONTRO - Pochi scenari: non adatto a lavorare
  6. Scrivere - Aggiornamento dati - Inserimento Dati Notifiche - Applicazioni Esterne possono registrarsi per una notifica. - Polling vs Push
  7. Uri e UriMatcher: - Ogni ContentProvider risponde ad alcuni URI specificati nel tag provider - Uri identifica l’uri della richiesta - UriMatcher possiamo smistare tale richiesta ContentResolver: - Permette alle applicazioni di accedere ai content providers - Si occupa di risolvere la richiesta - E direzionarla nel provider giusto ( se esiste ) TAG - Struttura uri - Authority ( anche piu di una ) - Permissions - Lettura - Scrittura Cursor: - Classe base quando si lavora con DB - Cursore browsing righe DB
  8. E’ possibile inviare anche lo stesso messaggio a differenti utenti Nei 1024 bytes è compreso un overhead Viene utilizzata la stessa connessione di gtalk 
  9. E’ necessaria una web app che permetta di fare lo storing degli utenti ai quali mandare la notifica Per inviare messaggi tramite ac2dm è necessario form + abilitazione
  10. E’ necessaria una web app che permetta di fare lo storing degli utenti ai quali mandare la notifica Per inviare messaggi tramite ac2dm è necessario form + abilitazione
  11. Reg_id : sapete gia Data.&lt;*&gt; serve per mandare il valore di key Delay_while_idle se incluso indica che il messaggio può aspettare il risveglio del telefono Collapse_key serve per raggruppare piu messaggi sotto un certo gruppo. Se il telefono è in idle e piu messaggi dello stesso gruppo devono essere recapitati, in realtà solamente uno per gruppo arriverà al terminale La richiesta deve essere autentificata
  12. E’ necessaria una web app che permetta di fare lo storing degli utenti ai quali mandare la notifica Per inviare messaggi tramite ac2dm è necessario form + abilitazione
  13. Broadcast spiegati da dario nella prima parte del talk.