qué - ¿Cómo seguir descargando nuevas imágenes en segundo plano incluso si la fuerza del usuario abandona la aplicación en el objetivo C de iOS?
ios 12 iphone 6 (1)
Quiero descargar muchas imágenes alrededor de 300 y mostrarlas en la interfaz de usuario.
Tengo dos preguntas:
Si la aplicación está en primer plano, y supongamos que el usuario la envía al modo de fondo (haciendo clic en el botón de inicio), ¿cómo puedo asegurar que la descarga continúe?
Si la fuerza de usuario abandona la aplicación (haga doble clic en el botón de inicio y deslice la aplicación desde el selector de aplicaciones), entonces, ¿cómo me aseguro de que la aplicación descargue las imágenes?
He estado leyendo mucho sobre temas de fondo. Pocos también dicen que en 2. caso la descarga no puede continuar.
A continuación están los enlaces a los que me referí:
http://www.appcoda.com/ios7-background-fetch-programming/ http://www.appcoda.com/background-transfer-service-ios7/ iOS Background downloads cuando la aplicación no está activa
No estoy recibiendo el enfoque correcto para descargar las imágenes en primer plano, en segundo plano / suspendido, la fuerza de usuario cierra la aplicación. Estoy usando AFNetworking para llamadas a servicios web.
A continuación está mi código:
Tengo detalles de la imagen como la URL en el archivo .json subido a Amazon. Para descargar el archivo que hago,
[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://someurl/imageFile.json"]];
Desde este archivo leo las direcciones URL de las imágenes y las descargo junto con los detalles de la imagen. Este es un gran proceso. ¿Cómo lo manejo? Por favor ayuda..
La solución para su 1 pregunta es a continuación:
Las sesiones en segundo plano le permiten realizar cargas y descargas de contenido en segundo plano mientras su aplicación no se está ejecutando. Puede crear una configuración de sesión en segundo plano llamando al método backgroundSessionConfiguration: en la clase NSURLSessionConfiguration.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
NSURLSessionConfiguration *sessionConfig;
float timeout = 5 * 60.0f;
BOOL iOS8OrNew = [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0;
if (iOS8OrNew) {
sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];
request.timeoutInterval = timeout;
}
else {
sessionConfig = [NSURLSessionConfiguration backgroundSessionConfiguration:identifier];
sessionConfig.timeoutIntervalForRequest = timeout;
}
sessionConfig.HTTPMaximumConnectionsPerHost = 10;
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfig];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request];
[manager setDidFinishEventsForBackgroundURLSessionBlock:^(NSURLSession * _Nonnull session) {
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.backgroundSessionCompletionHandler) {
void (^completionHandler)() = appDelegate.backgroundSessionCompletionHandler;
appDelegate.backgroundSessionCompletionHandler = nil;
completionHandler();
}
NSLog(@"All tasks are finished");
}];
Agregue el código siguiente en su AppDelegate:
- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler {
self.backgroundSessionCompletionHandler = completionHandler;
//add notification
[self presentNotification];
}
-(void)presentNotification{
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.alertBody = @"Download Complete!";
localNotification.alertAction = @"Background Transfer Download!";
//On sound
localNotification.soundName = UILocalNotificationDefaultSoundName;
//increase the badge number of application plus 1
localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
}
Para tu 2 solución
Si el sistema mata a su aplicación y su sesión de fondo tiene descargas activas, sus descargas continuarán y el sistema lanzará su aplicación cuando se completen las descargas. Sin embargo, si una fuerza de usuario abandona su aplicación, todas las tareas se cancelan.