Aplikacja My Objective C na iOS 7 pobiera aktualizacje lokalizacji w tle z listy startUpdatingsignificantLocationChanges lub delegata startUpdatingLocation (która zależy od trybu, w którym znajduje się aplikacja, ale nie sądzę, aby miało to znaczenie).Czy baza Firebase może wysyłać i odbierać w tle na iOS 7?
W delegacie zbieram informacje o lokalizacji, zapisuję je w słowniku, a następnie zapisuję słownik w bazie Firebase.
// this code is in the location update delegate routine
// the code that gathers the various elements that go into the dictionary
// are omitted for clarity, I don't think that they matter
// we may be running in the background on iOS 7 when we are called!
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[[NSNumber numberWithFloat:newLocation.coordinate.latitude] stringValue], @"Latitude",
[[NSNumber numberWithFloat:newLocation.coordinate.longitude] stringValue], @"Longitude",
[[NSNumber numberWithFloat:newLocation.horizontalAccuracy] stringValue], @"Accuracy",
formattedDateString, @"TimeNow",
[dateFormatter stringFromDate:newLocation.timestamp], @"TimeStamp",
[[NSNumber numberWithDouble:interval] stringValue], @"Date",
self.mode, @"Mode",
nil];
// Write it once to CurrentLocation
[ref setValue:dictionary];
// yes, I know this is clumsy
fbTmp = [NSMutableString stringWithString: fbRoot];
[fbTmp appendString : @"/locationHistory"];
ref = [[Firebase alloc] initWithUrl:fbTmp];
// Now write it again to the locationHistory list
ref = [ref childByAutoId];
[ref setValue:dictionary];
Czasem to działa, czasem nie (czyli w tym samym przebiegu aplikacji, czasami lokalizacja zostanie zapisana do Firebase powodzeniem zgodnie z oczekiwaniami, a czasami nie. Nie ma żadnego oczywiste rymowanie lub uzasadnienie, kiedy wydaje się działać, a kiedy nie).
Podejrzewam, że problem polega na tym, że zapis Firebase nie kończy się pomyślnie w tle, ale nie jestem pewien. Jestem bardzo nowym użytkownikiem iOS, Objective C i Firebase.
Moja aplikacja jest oznaczona w swoich Zdolnościach jako wymagająca usług w tle dla Aktualizacji lokalizacji i pobierania w tle (ta ostatnia moja przypadkowa próba rozwiązania tego problemu, pierwsza, której potrzebuję).
Podejrzewam, że muszę powiedzieć systemowi operacyjnemu, że potrzebuję czasu na ukończenie zapisu za pomocą zadania backkground, a następnie zakończyć zadanie w tle w bloku kończącym tworzenie bazy firebase - czy ktoś potwierdził, że to zadziała, gdy działa w trybie tła?
Jeśli tak, czy muszę to zrobić w drugim zapisie (zakładając, że są one zakończone w kolejności), lub w obu (z licznikiem, który odliczam po zakończeniu każdego zapisu)?
Wszelkie wskazówki najbardziej doceniane.
Co aplikacje mogą robić w tle to przegląd systemu operacyjnego, a nie Firebase. Pozostaje podłączony przez dowolną długość, a następnie system operacyjny zeruje połączenie z gniazdem, jak mu się podoba. Prawdopodobnie odpowiada to za "czasy pracy". – Kato