iOS-CoreLocation i geofencing podczas zamykania aplikacji

Czytałem wiele samouczków na temat geofencing mojej aplikacji na iOS (tj. tutaj ), ale nie wspominają, czy iOS pozwala na dowolne dane dotyczące lokalizacji aplikacji, które mają być obsługiwane, gdy aplikacja jest zamknięta.

Na przykład, rozumiem, że gdy aplikacja jest w tle, te usługi będą nadal trwać (jeśli poprawnie zakodowane), ale co powiesz na to, gdy użytkownik dwukrotnie dotknie przycisku home i zamknie aplikację? Czy nadal można uzyskać dane o lokalizacji?

Author: Daniel, 2013-06-18

3 answers

Zgodnie z Dokumentacja Apple, w sekcji Korzystanie z regionów do monitorowania przejść granicznych :

W systemie iOS regiony, które rejestrujesz w Menedżerze lokalizacji, utrzymują się pomiędzy uruchomieniami aplikacji. Jeśli występuje przekroczenie regionu gdy aplikacja na iOS nie jest uruchomiona, system automatycznie ją budzi up (lub uruchamia go ponownie) w tle, aby mógł przetwarzać event . Po ponownym uruchomieniu wszystkie skonfigurowane regiony poprzednio są udostępniane w monitorowanych obiektach w dowolnym miejscu obiekty menedżera, które tworzysz.

Więc tak, Twoja aplikacja zostanie obudzona (lub ponownie uruchomiona!) gdy lokalizacja systemu wykryje, że wprowadziłeś / zakończyłeś (w zależności od konfiguracji) żądany region, więc jest to nawet jeśli aplikacja nie działa oczywiście. Wystarczy, że poprawnie obsłużysz go w delegacie aplikacji, po ponownym uruchomieniu aplikacji otrzymasz klucz UIApplicationLaunchOptionsLocationKey w słowniku opcji. Zobacz też link do dokumentacji poniżej, aby uzyskać szczegółowe informacje.

Proszę pamiętać, że metoda -startMonitoringForRegion:desiredAccuracy: jest przestarzała w iOS 6, więc nie powinna być używana. Zamiast tego użyj -startMonitoringForRegion.

Aby dowiedzieć się, jak poradzić sobie z ponownym uruchomieniem aplikacji po zdarzeniu lokalizacji, zobacz dokumentację tutaj , że informacje, jak zobaczysz, jest w dyskusji o przestarzałej metodzie, ale nadal powinny być istotne, wierzę, że Apple zapomniał przenieść te informacje do nowej metody, gdy przestarzała stara. Złożyłem bug dla nich o tym.

UPDATE

Apple zaktualizowało dokumentację CLLocationManager po moim zgłoszeniu błędu. Dokumentacja określa teraz, dla jakich rodzajów monitorowania lokalizacji aplikacja jest uruchamiana lub nie jest uruchamiana po jej zakończeniu. Zobacz Korzystanie z usług lokalizacji w tle

 66
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-06 10:04:31

Niektóre formy aktualizacji lokalizacji wymagają, aby aplikacja była uruchomiona w tle, niektóre nie. jeśli chcesz mieć "stałe" aktualizacje lokalizacji, aplikacja musi być uruchomiona w tle. Jeśli chcesz tylko znaczących zmian (i myślę, że działa to również dla monitorowania regionu, choć dokumenty nie są tak wyraźne), aplikacja zostanie ponownie uruchomiona, jeśli została zakończona:

Jeśli uruchomisz tę usługę i Twoja aplikacja zostanie następnie zakończona, system automatycznie uruchamia ponownie aplikację w tle, Jeśli pojawi się nowe wydarzenie...

(z cllocationmanager docs)

 2
Author: Wain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 16:37:25

Jeśli korzystasz z funkcji monitorowania regionu, możesz wznowić aplikację nawet jeśli jest zamknięta, Zwykle tworząc lokalne powiadomienie, w ten sposób użytkownik może wynająć w aplikacji i wykonać określone zadanie, obserwując słownik opcji w -applicationDidFinishLaunchingWithOptions:

 0
Author: Andrea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 16:36:20