2016-02-19 6 views
6

चलाता है मैं हर समय उपयोगकर्ता जीपीएस को ट्रैक करने के लिए एक ऐप बनाने की कोशिश कर रहा हूं, यह ऐप ड्राइवर के स्थान को हर समय प्राप्त करने के लिए कार जीपीएस ट्रैकर का एक प्रकार है और इसे भेजता है सर्वर।आईओएस जीपीएस ट्रैकिंग ऐप जो हर समय

मैंने "पृष्ठभूमि मोड" में "स्थान अपडेट" जोड़ने का प्रयास किया है लेकिन ऐप पृष्ठभूमि में जाने पर 10 मिनट के बाद स्वचालित रूप से निलंबित हो जाएगा।

क्या इस ऐप को हर समय चलाने और जीपीएस स्थान प्राप्त करने का कोई तरीका है?

धन्यवाद।

उत्तर

7

आपके पास दो विकल्प हैं:

1) नियमित स्थान ट्रैकिंग।
इस प्रकार की ट्रैकिंग kCLAuthorizationStatusAuthorizedWhenInUse और kCLAuthorizationStatusAuthorizedAlways प्राधिकरणों के साथ काम करती है। CLLocationManager ने एक बार स्थान ट्रैकिंग शुरू कर दिया जब उसे प्रतिनिधि विधि locationManager:didUpdateLocations: में स्थान अपडेट प्राप्त होंगे। ऐप निलंबित राज्य में जा सकता है, लेकिन जब स्थान प्रबंधक को नया स्थान ऐप प्राप्त होता है तो पृष्ठभूमि स्थिति में जाता है और प्रतिनिधि विधि में नया स्थान संभालता है। कैसे सेटअप स्थान के प्रबंधक को:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.locationManager = [[CLLocationManager alloc] init]; 

    // Setup location tracker accuracy 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 

    // Distance filter 
    self.locationManager.distanceFilter = 50.f; 

    // Assign location tracker delegate 
    self.locationManager.delegate = self; 

    // This setup pauses location manager if location wasn't changed 
    [self.locationManager setPausesLocationUpdatesAutomatically:YES]; 

    // For iOS9 we have to call this method if we want to receive location updates in background mode 
    if([self.locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]){ 
     [self.locationManager setAllowsBackgroundLocationUpdates:YES]; 
    } 

    [self.locationManager startUpdatingLocation]; 
} 


2) सार्थकता स्थिति ट्रैक कर बदलता रहता है।
इस प्रकार की ट्रैकिंग केवल kCLAuthorizationStatusAuthorizedAlways प्रमाणीकरण के साथ काम करती है। यह केवल 500 मीटर प्रत्येक नए स्थान प्राप्त करता है, इसलिए दूरी फ़िल्टर और वांछित सटीकता यहां काम नहीं करती है। ऐप निलंबित राज्य में जा सकता है, और यहां तक ​​कि सिस्टम द्वारा भी समाप्त किया जा सकता है, लेकिन जब स्थान अपडेट ऐप पृष्ठभूमि स्थिति में जाता है और प्रतिनिधि विधि locationManager:didUpdateLocations: में स्थान प्राप्त करता है।
यदि ऐप सिस्टम द्वारा समाप्त कर दिया गया था, तो didFinishLaunchingWithOptions ऐप प्रतिनिधि विधि में लॉन्च विकल्पों में UIApplicationLaunchOptionsLocationKey कुंजी के साथ पृष्ठभूमि में इसे फिर से लॉन्च किया जाएगा। कैसे सेटअप करने के लिए ट्रैकिंग पर इस प्रकार:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.locationManager = [[CLLocationManager alloc] init]; 

    // Assign location tracker delegate 
    self.locationManager.delegate = self; 

    // For iOS9 we have to call this method if we want to receive location updates in background mode 
    if([self.locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]){ 
     [self.locationManager setAllowsBackgroundLocationUpdates:YES]; 
    } 

    [self.locationManager startMonitoringSignificantLocationChanges]; 
} 


आपने ध्यान दिया जाना चाहिए कि इन तरीकों में से दोनों की गारंटी नहीं है कि आपके आवेदन निलंबित अवस्था के लिए जाना नहीं है।
इसके अलावा, यदि उपयोगकर्ता द्वारा ऐप को समाप्त कर दिया गया था (उदाहरण के लिए ऐप स्विचर से स्वाइप करके) पृष्ठभूमि में स्थान ट्रैकिंग काम नहीं करेगी।


अद्यतन (टिप्पणी करने के लिए इसी)

यहाँ मेरी कोड उदाहरण है कि मेरे लिए काम है:
For Regular tracking। उदाहरण चलाएं, उपयोगकर्ता स्थान तक पहुंच प्रदान करें, स्थान अपडेट प्रारंभ करने के लिए प्रारंभ बटन टैप करें। सिम्युलेटर में स्थानों का परीक्षण करने के लिए सिम्युलेटर मेनू डीबग> स्थान> फ्रीवे ड्राइव में चुनें। अब आप ऐप को होम बटन (कमांड + शिफ्ट + एच) द्वारा पृष्ठभूमि में धक्का दे सकते हैं। 10 मिनट से अधिक समय के लिए सिम्युलेटर छोड़ दें, और इस बार ऐप को स्थान प्राप्त होंगे। जब आप ऐप पर वापस आते हैं तो आपको नक्शे पर लाल पिन दिखाई देंगे।
For Significant changes। पिछले उदाहरण के लिए उसी तरह से ऐप चलाएं और परीक्षण करें।
निगरानी महत्वपूर्ण परिवर्तन केवल विधि [self.locationManager startMonitoringSignificantLocationChanges];

अद्यतन (आईओएस 11) आईओएस 11

आईओएस 11 में स्थान ट्रैकिंग के लिए

परिवर्तन भी मौजूदा एपीआई के लिए कुछ बड़े बदलाव करता है के द्वारा शुरू किया जा सकता है। प्रभावित क्षेत्रों में से एक स्थान ट्रैकिंग है। यदि आपका ऐप केवल स्थान का उपयोग करता है, जबकि ऐप अग्रभूमि में है, जैसा कि अधिकांश ऐप्स करते हैं, तो आपको कुछ भी बदलना पड़ सकता है; हालांकि, यदि यह उन ऐप्स में से एक है जो पूरे दिन उपयोगकर्ता के स्थान को लगातार ट्रैक करते हैं, तो संभवतः आपको इस गर्मी में कुछ समय के लिए कुछ उपयोग करने के लिए कुछ संभावित बदलाव करना चाहिए ताकि आप ट्रैकिंग और संभावित उपयोग परिदृश्यों का परीक्षण कैसे कर सकें। https://mackuba.eu/2017/07/13/changes-to-location-tracking-in-ios-11/

+0

विकल्प 1 के लिए, उत्तर के लिए धन्यवाद, आप ने कहा कि जब नए स्थान प्राप्त होता है, राज्य पृष्ठभूमि के लिए निलंबित कर दिया, मैं दिन के लिए परीक्षण किया गया है से चला जाता है और, अनुप्रयोग इस मामले मेरे साथ कभी नहीं हुआ वापस आता है ऐप को मैन्युअल रूप से चलाने पर केवल फिर से जीवन के लिए, और फिर 10 मिनट के बाद निलंबित, क्यों ??? – TMMDev

+0

विकल्प 2 के लिए, क्या शुरू करने का कोई तरीका है मॉनिटरिंग सिग्निफिशेंट लोकेशन चेंज किसी भी तरह [self.locationManager startUpdatingLocation] चलाता है? इससे कम से कम – TMMDev

+1

आपकी टिप्पणियों के लिए अद्यतन उत्तर कम से कम 500 मीटर चलाएगा। मुझे आपका कोड नहीं दिखाई देता है, इसलिए मैंने अपने कोड उदाहरणों के लिए लिंक 1 और 2. दोनों के लिए लिंक प्रदान किए हैं। – shpasta

0

जबाब समाधान में 1 टिप्पणी करने के लिए (मैं कहीं भी अभी तक कोई टिप्पणी नहीं कर सकते हैं) में: आप समस्या को हल करने नहीं मालूम था तो आपका ऐप निलंबित हो जाता है और अपडेट नहीं करता के रूप में

इस लिंक का अनुसरण 10 मिनट के बाद स्थान अब और भी।

मैं एक ही मुद्दा था: मैं YES को setAllowsBackgroundLocationUpdates निर्धारित किया था, और मैं अपने Info.plist में NSLocationAlwaysUsageDescription कुंजी थी, लेकिन मेरी अनुप्रयोग भी 10 मिनट के बाद स्थिति ट्रैक करने से रोकने के लिए इस्तेमाल किया।

मैं दोनों NSLocationAlwaysUsageDescription और NSLocationWhenInUseUsageDescription जोड़ने Info.plist फाइल करने के लिए तो यह इस तरह दिखता है द्वारा इसे हल:

<key>NSLocationAlwaysUsageDescription</key> 
    <string>This app needs to use your location</string> 

    <key>NSLocationWhenInUseUsageDescription</key> 
    <string>This app needs to use your location</string> 
0

सेट it.it बैटरी की शक्ति हो जाती हैं लेकिन Background.OS में आपके आवेदन रन को निलंबित नहीं है कि आपके अनुप्रयोग

[self.locationManager setPausesLocationUpdatesAutomatically:NO]; 
संबंधित मुद्दे