Moje app został odrzucony przez Apple trzy razy, wszystkie z tą samą literą odrzucenia, która jest:Jak prawidłowo używać lokalizację w tle - aplikacja został odrzucony 3 razy
okazało się, że aplikacja korzysta z trybu tła ale nie obejmuje funkcji , która wymaga, aby tryb działał w sposób ciągły. To zachowanie nie jest zgodne z Wytycznymi oceny App Store.
Zauważyliśmy, że Twoja aplikacja deklaruje obsługę lokalizacji w kluczu UIBackgroundodes w pliku Info.plist, ale nie zawiera funkcji wymagających stałej lokalizacji.
Właściwe byłoby dodanie funkcji wymagających aktualizacji lokalizacji , gdy aplikacja jest w tle lub usunięcie ustawienia "lokalizacja" z klucza UIBackgroundModes.
Jeśli zdecydujesz się dodać funkcje, które używają trybu lokalizacja tło, prosimy dołączyć następującą akumulatora, zastrzeżenie w opisie Zastosowanie:
„Dalsze używanie GPS uruchomiony w tle można drastycznie zmniejszyć żywotność baterii . "
Informacje na temat trybów tła znajdują się w sekcji "Wykonanie kodu w tle" w bibliotece referencyjnej iOS.
Teraz, o ile wiem, że działa w tle i „robi coś” ... W moim AppDelegate Mam następujący kod w 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];
}
}
AppDelegate rozpoczyna również menedżer lokalizacji i staje się delegatem. Wtedy, mam następujący kod do obsługi aktualizacje lokalizacji w tle:
- (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];
}
ja również umieścić zastrzeżenie w moim app opis strony:
Intensywne używanie GPS uruchomiony w tle można radykalnie zmniejszyć żywotność baterii. Z tego powodu MY_APP_NAME działa w tle, po prostu słuchając znaczących zmian lokalizacji.
Czy czegoś tu brakuje?
Czy "tryb tła" nie oznacza czegoś, co nadal działa po wyjściu użytkownika z aplikacji? – cgull
@thephpdeveloper Dzięki za poinformowanie mnie. Będąc całkiem nowym użytkownikiem StackOverflow, nie wiedziałem o tym systemie. – Giovanni
@cgull Nie jestem pewien. Mam na myśli, czy rejestracja lokalizacji nie jest wystarczająco dobra? Wtedy, gdy pojawi się nowa lokalizacja, moja aplikacja zostanie pobudzona do stanu aktywnego w tle, a następnie mam możliwość zrobienia czegoś, np. Zaloguj moją nową lokalizację na mój serwer. Tak właśnie myślałem ... – Giovanni