12. Background Fetch
iOS registra l’attività degli utenti, capendo quanto e
quando un utente usa l’app
Usando tutti i giorni un pattern di apertura app, iOS
IMPARA
sabato 26 ottobre 13
13. Day 1
9:15 AM
Day 2
9:15 AM
9:30 AM
Day n
9:15 AM
10:00 AM
10:30 AM
10:30 AM
1:00 PM
1:00 PM
1:00 PM
1:15 PM
3:00 PM
3:00 PM
5:00 PM
5:00 PM
5:00 PM
5:15 PM
5:15 PM
5:15 PM
sabato 26 ottobre 13
Device observes
the pattern
14. Quando usarlo
‣Social Networks apps
‣News Apps
‣Contenuto aggiornato spesso
‣Applicazione consultata spesso
‣Contenuto di poco peso
sabato 26 ottobre 13
16. Come implementarlo
Impostare il fetching time
[app setMinimumBackgroundFetchInterval:
UIApplicationBackgroundFetchIntervalMinimum]
Opzioni:
•UIApplicationBackgroundFetchIntervalMinimum
•UIApplicationBackgroundFetchIntervalNever
(default)
sabato 26 ottobre 13
17. Come implementarlo
Metodo del delegate richiamata:
- (void)application:(UIApplication *)application
performFetchWithCompletionHandler:
(void (^)(UIBackgroundFetchResult result))
completionHandler;
UIApplicationDelegate, da implementare (solitamente)
nel file AppDelegate.m
sabato 26 ottobre 13
18. Come implementarlo
Eseguire il codice all’interno del metodo del delegate:
Alla fine dell’esecuzione:
- incrementare l’app badge
- richiamare il completition handler
se c’è nuovo contenuto:
UIBackgroundFetchResultNewData
se non c’è nuovo contenuto:
UIBackgroundFetchResultNoData
se c’è stato errore:
UIBackgroundFetchResultFailed
sabato 26 ottobre 13
21. Consigli
- Non fare affidamento SOLO sul fetch
- Scaricare meno dati possibili
- Non scaricare video, foto o contenuti multimediali
- Ricaricare le view, così da aggiornare l’anteprima
- Aggiornare il badge
- Usare le Notifiche locali
sabato 26 ottobre 13
23. Cosa conosciamo e usiamo sempre?
- Notifiche Push
- Notifiche locali
Il nuovo arrivato?
Silent Notification
sabato 26 ottobre 13
24. Silent Notification
- Funzionano via web
- Certificati per notifiche push
- Sono notifiche push! Identiche, ma...
Non “suonano”
invsibili per l’utente
sabato 26 ottobre 13
25. Silent Notification
- Permettono di “svegliare” l’app
- Nuovo metodo dell’AppDelegate
- Possibile eseguire codice
sabato 26 ottobre 13
26. Quando usarlo
- Aggiornamenti sporadici
- Aggiornamenti corposi (video, podcast, etc)
- Sincronizzare contenuti
sabato 26 ottobre 13
28. Come implementarlo
Registrare le notifiche (come per le push):
[application registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeSound)];
sabato 26 ottobre 13
29. Come implementarlo
Metodo del delegate richiamata:
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary
*)userInfo
fetchCompletionHandler:
(void (^)
(UIBackgroundFetchResult))completionHandler;
UIApplicationDelegate, da implementare (solitamente)
nel file AppDelegate.m
sabato 26 ottobre 13
30. Come implementarlo
Eseguire il codice all’interno del metodo del delegate:
Alla fine dell’esecuzione:
- incrementare l’app badge
- richiamare il completition handler
se c’è nuovo contenuto:
UIBackgroundFetchResultNewData
se non c’è nuovo contenuto:
UIBackgroundFetchResultNoData
se c’è stato errore:
UIBackgroundFetchResultFailed
sabato 26 ottobre 13
31. Com’è fatta una notifica
Payload notifiche push:
{
"aps": {
"alert": "Ufficiale: Messi al Milan",
"sound": "default" }
}
Payload silent notification:
{
"aps": {
"content-available": 1 }
}
sabato 26 ottobre 13
32. Consigli
- Non esagerare
- Non sempre consegnate appena inviate
- Troppe silent notification vengono messe in coda e
consegnate insieme
- Le notifiche push normali possono avere l’attributo
content-available e richiamare il codice
sabato 26 ottobre 13
35. Background Transfer Service
- In iOS 6 solo qualche minuto per i download (10
minuti)
- Non ha bisogno di autorizzazioni utente
- Permette di scaricare grossi file
- Notifiche per gestire errori
- Tutto gestito da iOS! Trasparente per i dev e gli
utenti
sabato 26 ottobre 13
43. Registrare la notifica
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleBackgroundTransfer:)
name:@"BgNotification"
object:nil];
sabato 26 ottobre 13
44. Gestire il background
- (void)handleBackgroundTransfer:(NSNotification*)notification {
dispatch_async(dispatch_get_main_queue(), ^{
self.downloadProgress.hidden = YES;
void(^completionHandler)(void) = notification.userInfo[@"completionHandler"];
if (completionHandler) {
completionHandler();
}
});
}
sabato 26 ottobre 13
45. Consigli
- Eseguire SOLO i task necessari. Non aggiungere cose
inutili
- Non eseguire codice di OpenGL ES
- Usare il minor spazio di memoria possibile, altrimenti
iOS ci potrebbe killare
- Salvare lo stato dell’app, in caso fosse chiusa
sabato 26 ottobre 13