Mi aplicación fue rechazado por Apple en tres ocasiones, todas con la misma carta de rechazo, que es:cómo utilizar correctamente la ubicación en segundo plano - aplicación fue rechazado 3 veces
Encontramos que su aplicación utiliza un modo de fondo pero no incluye la funcionalidad que requiere que ese modo se ejecute persistentemente. Este comportamiento no cumple con las Pautas de revisión de App Store.
Notamos que su aplicación declara compatibilidad con la ubicación en la clave UIBackgroundModes en su Info.plist pero no incluye las características que requieren una ubicación persistente.
Sería conveniente añadir características que requieren actualizaciones de ubicación mientras la aplicación está en el fondo o quite la "localización" establecer de la clave UIBackgroundModes.
Si decide añadir características que utilizan el modo de ubicación de fondo, favor incluya la siguiente batería de uso descargo de responsabilidad en su aplicación Descripción:
"El uso continuo del funcionamiento del GPS en el fondo puede drásticamente disminución duración de la batería "
Para obtener información sobre los modos en segundo plano, consulte la sección "Código de ejecución en segundo plano" en la Biblioteca de referencia de iOS.
Ahora, por lo que yo sé que estoy corriendo en el fondo y "hacer algo" ... En mi AppDelegate he el siguiente código en didFinishLaunchingWithOptions:
if ([[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsLocationKey] &&
([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]))
{
id locationInBackground = [launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey];
if ([locationInBackground isKindOfClass:[CLLocation class]])
{
[self updateMyLocationToServer:locationInBackground];
}
else
{
//Keep updating location if significant changes
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
self.bgLocationManager = locationManager;
self.bgLocationManager.delegate = self;
self.bgLocationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[bgLocationManager startMonitoringSignificantLocationChanges];
}
}
El AppDelegate también comienza un gerente de ubicación y se hace el delegado. Entonces, tengo el siguiente código para el manejo de las actualizaciones de ubicación en el fondo:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
[self updateMyLocationToServer:newLocation];
}
-(void)updateMyLocationToServer:(CLLocation*)myNewLocation
{
// NSLog(@"Updating Location from the background");
NSString *fbID = [NSString stringWithString:[facebookDetails objectForKey:@"fbID"]];
NSString *firstName = [NSString stringWithString:[facebookDetails objectForKey:@"firstName"]];
NSString *lastName = [NSString stringWithString:[facebookDetails objectForKey:@"lastName"]];
NSString *urlString = [NSString stringWithFormat:@"MY_SERVER_API", fbID, myNewLocation.coordinate.latitude, myNewLocation.coordinate.longitude, firstName, lastName];
NSURL *url = [NSURL URLWithString:urlString];
__block ASIHTTPRequest *newRequest = [ASIHTTPRequest requestWithURL:url];
[newRequest setCompletionBlock:^{
}];
[newRequest setFailedBlock:^{
}];
// [newRequest setDelegate:self];
[newRequest startAsynchronous];
}
También puse un descargo de responsabilidad en mi descripción de la aplicación página:
El uso intensivo del GPS en el fondo puede disminuir drásticamente la duración de la batería. Por este motivo, MY_APP_NAME se ejecuta en segundo plano solo para escuchar cambios de ubicación significativos.
¿Falta algo aquí?
¿No significa un "modo de fondo" algo que aún se está ejecutando después de que el usuario salió de la aplicación? – cgull
@thephpdeveloper Gracias por contarme. Siendo bastante nuevo en StackOverflow, no estaba al tanto de este sistema. – Giovanni
@cgull No estoy seguro. Quiero decir, ¿no me estoy registrando para la actualización de ubicación lo suficientemente bueno? Luego, cuando hay una nueva ubicación, mi aplicación se activa en estado activo de fondo y luego tengo la oportunidad de hacer algo, como registrar mi nueva ubicación en mi servidor. Eso es lo que pensé ... – Giovanni