Meine Objective-C-App auf iOS 7 ruft Standortupdates im Hintergrund entweder vom startUpdatingsignificantLocationChanges- oder vom startUpdatingLocation-Delegaten ab (je nachdem, in welchem Modus sich die App befindet, aber das ist nicht wichtig).Kann Firebase im Hintergrund auf iOS 7 senden und empfangen?
Im Delegaten sammle ich die Standortinformationen, schreibe sie in ein Wörterbuch und schreibe das Wörterbuch dann in eine 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];
Manchmal funktioniert es, manchmal nicht (dh im gleichen Lauf der App, manchmal die Lage zum Firebase geschrieben wird erfolgreich wie erwartet, und manchmal ist es nicht. Es gibt keine offensichtlichen Reim oder Grund zu, wenn es zu funktionieren scheint und wenn nicht).
Ich vermute, dass das Problem ist, dass der Firebase-Schreibvorgang im Hintergrundmodus nicht erfolgreich abgeschlossen wird, aber ich bin mir nicht sicher. Ich bin sehr neu in iOS und Objective C und Firebase.
Meine App ist als erforderlich Hintergrunddienste für Location Updates in seine Fähigkeiten markiert und Hintergrund holen (letztere meine zufälligen Versuch, dieses Problem zu beheben, die ehemalige ich weiß, dass ich brauche).
Mein Verdacht ist, dass ich dem Betriebssystem sagen muss, dass ich Zeit brauche, um den Schreibvorgang mit einer BackkgroundTask abzuschließen, und dann die Hintergrundaufgabe im Abschlussblock des Firebase schreiben zu beenden - hat jemand verifiziert, dass das beim Ausführen funktioniert im Hintergrundmodus?
Wenn ja, muss ich das nur im zweiten Schreibvorgang tun (vorausgesetzt, dass sie der Reihe nach abgeschlossen sind) oder in beiden (mit einem Zähler, den ich herunterzählen, wenn jeder Schreibvorgang abgeschlossen ist)?
Alle Hinweise am meisten geschätzt.
Welche Apps im Hintergrund tun können, ist die Zuständigkeit des OS, nicht von Firebase. Es bleibt für eine beliebige Länge verbunden, und dann trennt das OS die Socket-Verbindung wie gewünscht. Das erklärt wohl die "Arbeit manchmal". – Kato