iOSNSURLSession

Osservazioni

La classe NSURLSession e le classi correlate forniscono un'API per il download del contenuto. Questa API fornisce un ricco set di metodi delegati per supportare l'autenticazione e offre all'app la possibilità di eseguire download in background quando l'app non è in esecuzione o, in iOS, mentre l'app è sospesa.

A un livello elevato, NSURLSession si basa sul concetto di sessioni e attività. Un'attività rappresenta una singola richiesta per un singolo URL (o un singolo caricamento su un singolo URL). Una sessione è un gruppo di richieste correlate.

Il sistema operativo fornisce una singola sessione preesistente, la sessione condivisa, che funziona fondamentalmente come NSURLConnection. Inoltre, puoi creare le tue sessioni nella tua app secondo necessità.

App diverse utilizzano le sessioni in modi diversi. Molte app creano una singola sessione all'avvio e continuano a riutilizzarla. Altre app traggono vantaggio dalla possibilità di annullare un gruppo di attività correlate (ad esempio un browser Web che annulla tutte le richieste in sospeso quando si chiude una scheda) e quindi creare una sessione per contenere ciascun gruppo di richieste correlate.

Il primo passaggio quando si utilizza NSURLSession è creare un oggetto di configurazione della sessione. L'oggetto (solitamente) riutilizzabile contiene varie impostazioni di sessione che puoi modificare per le tue esigenze particolari, come la massima concorrenza, intestazioni extra da inviare con ogni richiesta, se consentire l'invio di richieste tramite la radio cellulare (solo iOS), timeout, archiviazione credenziali, versione TLS minima e persino impostazioni proxy.

Esistono tre tipi di configurazioni di sessione, a seconda di come si desidera che si comporti la sessione risultante:

  • Le configurazioni predefinite creano sessioni che funzionano in modo simile a NSURLConnection.
  • Le configurazioni in background creano sessioni in cui le richieste avvengono fuori processo, consentendo ai download di continuare anche quando l'app non è più in esecuzione.
  • Le configurazioni effimere creano sessioni che non memorizzano nulla sul disco, non memorizzano i cookie su disco, ecc. E sono quindi adatti per il backup di finestre del browser in incognito.

Quando si crea una configurazione in background, è necessario fornire un identificatore di sessione che consente di riassociare la sessione in background in un secondo momento (se l'app viene chiusa o sospesa o terminata dal sistema operativo). Non devi avere più di un'istanza di una sessione con lo stesso identificativo attivo nella tua app, quindi di regola queste configurazioni non sono riutilizzabili. Tutte le altre configurazioni di sessione possono essere riutilizzate per creare tutte le sessioni che vuoi. Pertanto, se è necessario creare più sessioni con impostazioni simili, è possibile creare una volta la configurazione e riutilizzarla ogni volta che si crea una nuova sessione.

Dopo aver creato una sessione, è possibile creare attività in quella sessione. Esistono tre tipi di attività:

  • Le attività dati restituiscono dati come oggetto NSData . Questi sono adatti per l'uso generale, ma non sono supportati nelle sessioni in background.
  • Le attività di download restituiscono i dati come file su disco. Questi sono adatti per richieste più grandi o per l'uso in sessioni in background.
  • Le attività di caricamento caricano i dati da un oggetto NSData o da un file su disco. Fornisci un oggetto dati o un file che fornisce il corpo POST. I dati / file del corpo forniti dall'utente sostituiscono tutti i dati / file del corpo forniti nell'oggetto NSURLRequest (se applicabile).

Ciascuno di questi tipi consente di ottenere i dati di risposta in un paio di modi diversi, utilizzando callback basati su blocchi o fornendo un delegato sulla sessione e implementando metodi delegati.

Inoltre NSURLSession consente di fornire metodi delegati per la gestione dell'autenticazione, l'esecuzione della gestione dei certificati TLS personalizzata (sia per i certificati client che per la convalida del server), la modifica del comportamento di memorizzazione nella cache e così via.

NSURLSession Esempi correlati