Sé que si una aplicación utiliza "El servicio de ubicación de cambio significativo", iOS lo activará si hay una actualización de ubicación que se entregará, incluso si la aplicación finaliza.¿iOS desbloqueará la aplicación terminada si está registrada con la ubicación de UIBackgroundModes?
No pude encontrar una respuesta clara sobre el caso si la aplicación utiliza servicios de ubicación estándar y especifica la ubicación como la clave para UIBackgroundModes: ¿iOS también lo activará para entregar la actualización incluso si ha finalizado? ¿O la aplicación debe ejecutarse en segundo plano para obtener la devolución de llamada de actualización de ubicación?
ACTUALIZACIÓN: En el momento en que le pregunté esto, no tuve tiempo de probarlo. Pero después de obtener una respuesta aquí, escribí este fragmento de código en el delegado de mi aplicación para ver si mi aplicación terminada se relanza cuando recibe una actualización de ubicación. Estoy mostrando una UILocalNotification cuando recibo la notificación de la actualización. Sin embargo, cuando terminé mi aplicación y luego cambié mi ubicación en la ciudad, no se relanzó la aplicación y no obtuve ninguna actualización. ¿Puedes decirme qué es lo que estoy haciendo mal?
ACTUALIZACIÓN # 2: De acuerdo con los resultados finales de este Q & A, no hay nada malo con este código y es el comportamiento esperado para una aplicación que utiliza los servicios de localización estándar, a no ser relanzado después de la terminación.
He agregado la ubicación como uno de los UIBackgroundModes en el archivo Info.plist.
Y esto es las partes relacionadas con la ubicación de mi aplicación delegado:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
m_locManager = [[CLLocationManager alloc] init];
m_locManager.delegate = self;
[m_locManager startUpdatingLocation];
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[m_locManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog("%@", [NSString stringWithFormat:@"Background Fail %@", [error localizedDescription]]);
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
UILocalNotification * theNotification = [[UILocalNotification alloc] init];
theNotification.alertBody = [NSString stringWithFormat:@"Background location %.06f %.06f %@" , newLocation.coordinate.latitude, newLocation.coordinate.longitude, newLocation.timestamp];
theNotification.alertAction = @"Ok";
theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
[[UIApplication sharedApplication] scheduleLocalNotification:theNotification];
}
No sabía el truco de que podría despertarse una aplicación, –
, una vez más, ¡NO PUEDE utilizarse como un truco para activar su aplicación periódicamente! Apple rechazará instantáneamente su aplicación si usa UIBackgroundModes para ningún otro uso que no sea su finalidad: * Rastreando la ubicación de un usuario *. – runmad
@runmad Sí, sé que esto debería usarse para el propósito correcto. El mío es rastrear la ubicación del usuario para enviarlo al servidor, para que el servidor le envíe una notificación automática si está más cerca de un área. Teniendo en cuenta el rechazo de la aplicación, ¿estaré más seguro si uso un servicio de ubicación de cambio significativo en lugar del estándar? – aslisabanci