2. Francesco Gambino
● Dottore Magistrale in Informatica (Unical)
● iOS & Mobile Specialist
● 6 anni di esperienza nella progettazione e sviluppo di applicazioni mobile
ad alte prestazioni con l’integrazione delle tecnologie più avanzate
(Location tracking, Realtà Aumentata, Face Detection), programmazione
di sensori e realizzazione di interfacce custom con grande attenzione
all’usabilità.
Domenico Gabriele
●Laurea in Informatrica (Unical)
●Java & Android Developer
●3 Anni di esperienza in Android
● 3 Anni di esperienza di sviluppo in applicazioni Web java based
Chi siamo
7. Activity
● Una Activity rappresenta una
possibile interazione dell’utente
con l’applicazione e può essere
associata al concetto di
schermata.
● Essa si occupa di creare la finestra
nel quale può essere associata l’UI
ma non è strettamente legata ad
essa.
● Importanza fondamendale è il
Lifecycle di un’Activity
10. ● È l’unità fondamentale per lo sviluppo
di una app iOS
● Interagisce con i Model e altri
Controller per presentare una UI
coerente
● È strettamente associato ad una view,
che gestisce durante il suo ciclo di
vita
○ carica, effettua il layout e il
resize
○ si occupa di aggiornare il
contenuto
○ intercetta gli eventi
UIViewController
12. View e Layout
In Android la definizione della user interface si basa tutta sul concetto di View e
ViewGroup
● View : Questa classe rappresenta l'elemento fondamentale per i componenti
dell'interfaccia utente. TUTTI gli elementi grafici ereditano da essa. TextView
, Button, EditText…
● ViewGroup: Una speciale View che può contenere altre view . Questa è la
classe base di tutti i layout. LinearLayout,RelativeLayout,ListView
LinearLayout RelativeLayout ListView
13. ● UI realizzata tramite Interface
Builder
● XIB vs Storyboard
● Composizione tramite
drag&drop
● Specifica del layout tramite
Autolayout
○ definizione di vincoli tra
gli elementi grafici
(~ Relative Layout
Android)
○ UI dinamica che si adatta
a diverse dimensioni dello
schermo, orientamento e
localizzazione
View e layout
15. Esempio di Layout
iOS
● referenziare il vincolo di
interesse
● manipolarlo manualmente in
maniera da ottenere il risultato
desiderato
priceViewTop = -priceView.height;
[self.view layoutIfNeeded];
Android
view.setVisibility(View.GONE);
Include : Si possono includere
Layout in altri tramite include
17. Comunicazione inter-app
● Le app sul dispositivo possono
comunicare tra loro solo in maniera
indiretta -> SANDBOX
● URL Schemes
○ la app registra un URL custom
○ attraverso l’URL altre app
possono aprire la app
○ la app originale può presentare i
dati contenuti nell’URL
● API per l’accesso alle app di sistema:
camera, telefono, contatti, mappe,
calendario, salute, passbook, etc.
● Extensions (>= iOS 8)
○ danno accesso a funzionalità e
contenuti di altre applicazioni
● Implicit Intent :
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new
Intent(Intent.ACTION_DIAL, number);
● StartActivityForResult(Intent,
RequestCode);
protected void onActivityResult(int
requestCode, int resultCode, Intent
data) ;
● Content Providers
getContentResolver().query(URI,
Selection,SelectionArgs,SortOrder);
Android iOS
18. Gestione permessi
● Le permission In Android vengono
specificate tutte all’interno del file
Manifest
● Tutti i permessi definiti nel Manifest
vengono mostrati essere accettati
dall’utente al momento
dell'installazione del’app
● Uses-feature Risorse hardware o
software. Non è detto che il device
le possieda
● Permesso obbligatorio per accedere a
determinate feature del dispositivo /
sistema
○ notifiche, posizione, camera,
contatti, aggiornamenti in
background, ...
● Responsabilità dello sviluppatore
gestire il processo di request / response
● Richiesta one-shot
Android iOS
19.
20. Esecuzione background
● Service
● Started : Avviato tramite
startService(). Può rimanere in
background per un periodo di
tempo indefinito.
● Bound: Avvitao tramite
bindService(). Offre una client-
server interface.Legato a uno o
piu componenti.
● System Service
● Download Manager : gestione del
download demandata al sistema
● Sync Adapter
● Broadcast Receiver
La piattaforma permette di
● completare un breve task partito in
foreground (esecuzione finita)
● completare download partiti in
foreground affidandoli al sistema
● eseguire task specifici avanzati in
background
○ audio
○ location
○ voip
○ external-accessory
○ background fetch
○ remote notifications
Android iOS
21. ● Poco customizzabili: solo suono e
quick actions
● Protocollo TCP (con TLS/SSL),
comunicazione unidirezionale
○ Server -> Server Apple -> Device
● Payload max 2KB (prima 256 bytes!)
● Per poter utilizzare le notifiche:
○ richiesta permesso one-shot
○ registrazione al server remoto
○ gestire gli eventi (notifica in-app,
apertura da zero della app)
● Ricche e altamente customizzabili
● Protocolli: HTTP, XMPP
● Payload max 4KB
● Presentazione
○ Permesi richiesti
all'installazione dell’app
○ fuori app: responsabilità
sviluppatore(NotificationManager
)
○ in-app: avvio:responsabilità
sviluppatore
(NotificationManager)
Notifiche Push
Android iOS
23. ● Account sviluppatore sul Google
Play 25€, una tantum
● Fee su paid apps e in-app
purchase: 30%
● Servizi:
● Google Play Developer
Console
● Scelta del prezzo libera per ogni
paese
● Non perdere il Keystore per la
release App altrimente sarà
impossibile pubblicare
aggiornamenti.
Pubblicazione
● Apple Developer account: 99€ / anno
● Fee su paid apps e in-app purchase: 30-
40 %
● Servizi:
○ App Store (Watch), Mac App Store
○ Risorse e materiali grafici di
supporto
○ SDK e OS beta
● Scelta dei prezzi vincolata
Android iOS
24. Pubblicazione
● Paid App non presente in tutti i Paesi.
Es China
● Bisogna rispettare le Norme del
programma di Google Play
● Nessun controllo dopo circa 2 ore
disponibile sullo store
● Non è possibile rimuovere l’app
una volta pubblicata .
● Tempi di pubblicazione biblici
~ 15 giorni
● App controllata realmente!
● Alta probabilità di rifiuto
○ se non si seguono le HIG Apple
○ …ma a volte anche per motivi
assurdi
● Una piccola soluzione: expedited