What's New in Multitasking on iOS 7 [#PragmaConf 2013]

1,729 views

Published on

Le novità di iOS 7 che riguardano il multitasking. Fetiching, notifiche "zitte" e background transfer

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,729
On SlideShare
0
From Embeds
0
Number of Embeds
254
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

What's New in Multitasking on iOS 7 [#PragmaConf 2013]

  1. 1. sabato 26 ottobre 13
  2. 2. What’s new? Multitasking API on iOS 7 Francesco Novelli iOS and Web Developer Freelance @if9 francesco.nove@gmail.com sabato 26 ottobre 13
  3. 3. Novità per l’utente ‣Nuova grafica ‣Nuove impostazioni ‣Resta tutto trasparente sabato 26 ottobre 13
  4. 4. Grafica iOS 6 vs. iOS 7 sabato 26 ottobre 13
  5. 5. Le nuove impostazioni sabato 26 ottobre 13
  6. 6. Per noi, fan di #pragma mark sabato 26 ottobre 13
  7. 7. Modalità di Background fino a iOS 6 ‣Background Task Completion ‣Background Audio ‣Location Services ‣VoIP ‣Newsstand sabato 26 ottobre 13
  8. 8. Novità di iOS 7 ‣Background Fetch ‣Silent Notifications ‣Background Transfer Service ‣Bluetooth LE sabato 26 ottobre 13
  9. 9. Impostazioni in Xcode 5 sabato 26 ottobre 13
  10. 10. ATTENZIONE! Inserire SOLO le opzioni che vengono utilizzate nell’app Apple boccia le app che hanno opzioni inutilizzate! sabato 26 ottobre 13
  11. 11. Background Fetch ‣Registrare l’app per richiederlo ‣Impostare quanto spesso ‣Il resto... ci pensa iOS (più o meno) sabato 26 ottobre 13
  12. 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. 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. 14. Quando usarlo ‣Social Networks apps ‣News Apps ‣Contenuto aggiornato spesso ‣Applicazione consultata spesso ‣Contenuto di poco peso sabato 26 ottobre 13
  15. 15. Come implementarlo Registrare nel plist (o impostazioni app) UIBackgroundModes: fetch sabato 26 ottobre 13
  16. 16. Come implementarlo Impostare il fetching time [app setMinimumBackgroundFetchInterval: UIApplicationBackgroundFetchIntervalMinimum] Opzioni: •UIApplicationBackgroundFetchIntervalMinimum •UIApplicationBackgroundFetchIntervalNever (default) sabato 26 ottobre 13
  17. 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. 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
  19. 19. Testare il fetching Attivare nello Schema di Debug sabato 26 ottobre 13
  20. 20. Testare il fetching Simulare il background fetch sabato 26 ottobre 13
  21. 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
  22. 22. NeXT... sabato 26 ottobre 13
  23. 23. Cosa conosciamo e usiamo sempre? - Notifiche Push - Notifiche locali Il nuovo arrivato? Silent Notification sabato 26 ottobre 13
  24. 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. 25. Silent Notification - Permettono di “svegliare” l’app - Nuovo metodo dell’AppDelegate - Possibile eseguire codice sabato 26 ottobre 13
  26. 26. Quando usarlo - Aggiornamenti sporadici - Aggiornamenti corposi (video, podcast, etc) - Sincronizzare contenuti sabato 26 ottobre 13
  27. 27. Come implementarlo Registrare nel plist (o impostazioni app) UIBackgroundModes: remote-notification sabato 26 ottobre 13
  28. 28. Come implementarlo Registrare le notifiche (come per le push): [application registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)]; sabato 26 ottobre 13
  29. 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. 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. 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. 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
  33. 33. Last but not least... sabato 26 ottobre 13
  34. 34. Background Transfer Service sabato 26 ottobre 13
  35. 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
  36. 36. Background Transfer Service Come implementarlo? Usando NSURLSession e NSURLSessionDownloadTask sabato 26 ottobre 13
  37. 37. Background Transfer Service if (!self.urlSession) { NSString* sessionID = @"ajeje123"; NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfiguration:sessionID]; self.urlSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]]; } NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.auby.no/files/video_tests/ h264_720p_hp_5.1_6mbps_ac3_planet.mp4"]]; self.downloadTask = [self.urlSession downloadTaskWithRequest:request]; [self.downloadTask resume]; sabato 26 ottobre 13
  38. 38. NSURLSessionDownloadTask - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { dispatch_async(dispatch_get_main_queue(), ^{ self.downloadProgress.progress = (double)totalBytesWritten / (double)totalBytesExpectedToWrite; }); } sabato 26 ottobre 13
  39. 39. NSURLSessionDownloadTask - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)downloadURL { NSString* lastPathComponent = [downloadTask.originalRequest.URL lastPathComponent]; NSString* destinationPath = [[self docPath] stringByAppendingPathComponent:lastPathComponent]; NSURL* destinationURL = [NSURL fileURLWithPath:destinationPath]; NSError* error; BOOL copySuccessful = [[NSFileManager defaultManager] copyItemAtURL:downloadURL toURL:destinationURL error:&error]; dispatch_async(dispatch_get_main_queue(), ^{ self.downloadProgress.hidden = YES; }); } sabato 26 ottobre 13
  40. 40. NSURLSessionDownloadTask - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes { } sabato 26 ottobre 13
  41. 41. NSURLSessionTaskDelegate - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { if (error) { NSString* lastPathComponent = [task.originalRequest.URL lastPathComponent]; NSString* filePath = [[self docPath] stringByAppendingPathComponent:lastPathComponent]; [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; } } sabato 26 ottobre 13
  42. 42. Notifiche (AppDelegate) - (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler { NSDictionary* userInfo = @{@"completionHandler" : completionHandler, @"sessID" : identifier}; [[NSNotificationCenter defaultCenter] postNotificationName:@"BgNotification" object:nil userInfo:userInfo]; } sabato 26 ottobre 13
  43. 43. Registrare la notifica [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleBackgroundTransfer:) name:@"BgNotification" object:nil]; sabato 26 ottobre 13
  44. 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. 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
  46. 46. Background LE Sessione “Realizzare accessori iOS con Arduino e Bluetooth 4.0”. Fiore Basile Sala Craig Federighi. 14:15 sabato 26 ottobre 13
  47. 47. Novità di iOS 7 ‣Background Fetch ‣Silent Notifications ‣Background Transfer Service sabato 26 ottobre 13
  48. 48. Thanks! Francesco Novelli iOS and Web Developer Freelance @if9 francesco.nove@gmail.com sabato 26 ottobre 13
  49. 49. sabato 26 ottobre 13

×