7

Sto provando a effettuare chiamate in background come POST, per essere più precisi nel metodo didReceiveRemoteNotification, perché iniziano a funzionare quando arriva una notifica push. Il mio problema è che tutti i Alamofire.request non chiamano mai in modalità Background finché non apro l'app. Ora hoRichiesta sfondo non eseguita Alamofire Swift

Sto cercando di aprire una sessione ma non farà funzionare la richiesta.

Queste è quello che voglio da eseguire in background (cellulare in background)

Alamofire.Manager(configuration: configuration).request(.GET, url, parameters: nil) 
         .responseJSON { (_, _, JSON, _) in 
          //println(JSON) 
           println(JSON) 
       REST OF THE CODE 

Ma non funzionerà, anche se aggiungo codice qui sotto questi richiedo funziona ma il ritorno della richiesta o anche la richiesta non è stata fatta.

risposta

14

Mentre il metodo dice "configurazione in background", ciò che significa in realtà è che la sessione di rete è configurata to allow for interruptions and continuation di upload/download. Quello che devi fare è estendere il tempo di esecuzione dell'applicazione in modo che funzioni per un po 'di tempo anche in background

C'è beginBackgroundTaskWithExpirationHandler: che è specificamente progettato per farlo. Quando lo usi, avrai ancora qualche minuto per eseguire qualsiasi cosa tu abbia bisogno (dopo quel limite, la tua applicazione verrà terminata indipendentemente da cosa, ora la tua applicazione verrà immediatamente chiusa).

È possibile scrivere seguenti metodi:

func beginBackgroundTask() -> UIBackgroundTaskIdentifier { 
    return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({}) 
} 

func endBackgroundTask(taskID: UIBackgroundTaskIdentifier) { 
    UIApplication.sharedApplication().endBackgroundTask(taskID) 
} 

Quando si desidera utilizzarlo, è solo semplice iniziare/terminare l'operazione quando si avvia/termine della chiamata il download:

// Start task 
let task = self.beginBackgroundTask() 

// Do whatever you need, like download of the images 
self.someBackgroundTask() 

... 

// End task once everything you need to do is done 
self.endBackgroundTask(task) 

Speranza che aiuta !

Edit 1:

Se il problema è che il vostro metodo di download non viene mai chiamato, allora significa che non sta inviando dati corretti in carico utile di notifica:

Per una notifica push per innescare un download operazione, il carico utile della notifica deve includere la chiave content-available con il suo valore impostato su 1. Quando tale chiave è presente, il sistema riattiva l'app in lo sfondo (o lo avvia in background) e chiama l'app delegato applicazione: didReceiveRemoteNotification: fetchCompletionHandler: metodo . L'implementazione di tale metodo deve scaricare il contenuto pertinente e integrarlo nella tua app. https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+0

Ciao, grazie per la risposta, ma il mio problema è associare un sessioni Alamofire o che cosa ho bisogno per eseguire le richieste causano quelle funzioni che si scrivono eseguire il codice, ma è il whos richiesta non ritorno o forse anche chiamate fino a quando non apro l'app. Grazie ancora. –

+0

Vedere la mia risposta aggiornata - se il problema è che non si ottiene affatto il metodo chiamato, in precedenza dovrebbe aiutare :) –

+0

Sapevo del contenuto disponibile che ho già causa è una notifica silenziosa quindi per esempio se ricevo un push notification, la didReceiveRemoteNotification attiva e quindi voglio fare una richiesta con alamofire, il mio problema principale è che il codice in didReceiveRemoteNotification funziona ma la chiamata o la richiesta non fanno nulla quando l'iphone è inattivo/in background (non aperto) quando Apro l'app che funziona come dovrebbe essere. –

Problemi correlati