IOS 11 में लोकेशन सर्विसेज काम नहीं कर रही हैं


83

मैंने अभी अपने ऐप को iOS 11 SDK के साथ फिर से हटाने की कोशिश में बनाया है जो blue bannerअब हमेशा दिखाई दे रहा है। मैंने सोचा - "शानदार, यह काम किया", केवल यह पता लगाने के लिए कि स्थान सेवाएँ अब काम नहीं कर रही हैं।

आईओएस 10 के साथ काम करने के लिए उपयोग किया जाने वाला एप्लिकेशन - क्या किसी ने कुछ भी सुना है?


NSLocationAlwaysAndWhenInUseUsageDescription को Info.plist में जोड़ें
Dubey

जवाबों:


156

ऐसा प्रतीत होता है कि ऐप्पल ने अभी तक एक और गोपनीयता सुविधा जोड़ी है। उपयोगकर्ता अब हमारे को ओवरराइड करने requestAlwaysAuthorizationऔर इसे डाउनग्रेड करने में सक्षम है requestWhenInUseAuthorization- इसका मतलब है कि एक डेवलपर के रूप में हमें अब दोनों विवरणों की आपूर्ति करना हैInfo.plist

मैंने पाया कि उन्होंने एक नई कुंजी जोड़ी है NSLocationAlwaysAndWhenInUseUsageDescription

/*
*      Either the NSLocationAlwaysAndWhenInUseUsageDescription key or both the
*      NSLocationAlwaysUsageDescription and NSLocationWhenInUseUsageDescription
*      keys must be specified in your Info.plist; otherwise, this method will do
*      nothing, as your app will be assumed not to support Always authorization.
*/

हालाँकि, इस नई कुंजी का उपयोग करने पर - स्थान सेवा अभी भी काम नहीं कर रही है, आगे की खोज पर मैंने इस रत्न को सभी अतिरिक्त डिबगिंग के साथ मिश्रित पाया:

इस एप्लिकेशन ने उपयोग विवरण के बिना गोपनीयता-संवेदनशील डेटा तक पहुंचने का प्रयास किया है। एप्लिकेशन का Info.plist दोनों NSLocationAlwaysAndWhenInUseUsageDescription और NSLocationWhenInUseUsageDescription कुंजी में स्ट्रिंग मानों के साथ उपयोगकर्ता को यह बताते हुए होना चाहिए कि एप्लिकेशन को यह डेटा कैसा है

मैं सीधे उस टिप्पणी का खंडन करता हूं जो मुझे अपडेट की गई CLLocationManager.hफ़ाइल में मिली थी । इसलिए मैंने एक रडार बनाया है।

अच्छी खबर है, अगर आप डिबगिंग कंसोल की सलाह का पालन करते हैं, तो। नई कुंजी NSLocationAlwaysAndWhenInUseUsageDescriptionऔर पुरानी कुंजियों में से एक दोनों को जोड़ें NSLocationWhenInUseUsageDescription, स्थान सेवाएं फिर से काम करना शुरू कर देंगी।


2
मैं इसी तरह की स्थिति का सामना कर रहा हूं। केवल मैं iOS 10.2 में परीक्षण कर रहा हूं और मैंने NSLocationAlwaysUsageDescriptionअपने Info.plist में जोड़ा है जो कि मेरी आवश्यकता है। लेकिन मुझे उपर्युक्त संदेश कंसोल में यह कहते हुए मिला कि मुझे भी जोड़ने की जरूरत है NSLocationWhenInUseUsageDescription
इसुरु

7
दुर्भाग्य से उपयोगकर्ता को अब तीन उत्तरों के साथ एक संवाद प्राप्त होता है, जहां उपयोगकर्ता द्वारा शुरू करने के लिए सबसे अधिक संभावना हिट होने के कारण शीर्ष विकल्प है: "केवल ऐप का उपयोग करते हुए"। जो एप्लिकेशन को हमेशा बेकार होने के लिए उपयोग करने की आवश्यकता होती है, जब तक कि उपयोगकर्ता फिर से बाद में सेटिंग को बदलने की सभी परेशानी से नहीं गुजरता है। कम से कम "ऑलवेज एप्रूव" होना चाहिए था जब यह ऐप के लिए पूछ रहा है!
हंस तेरेजे बक्के

1
मैंने सभी तीन विवरण कुंजियाँ जोड़ी हैं और मुझे अभी भी स्थान अपडेट नहीं मिल रहे हैं। मैं viewwillAppear में locationmanagerdelgate जोड़ रहा हूं और viewwilldisapper में प्रतिनिधि को हटा रहा हूं। अगर मैं सेटिंग पर जाता हूं और पहले से चुने गए Allow Always को चुनता हूं। मुझे केवल एक बार अपडेट मिलता है और फिर नहीं। इसे ठीक करने के लिए कोई भी विचार। अग्रिम में धन्यवाद!!
लवमैसोमफूड

@ उमा - बुला रहे हो startUpdatingLocationया requestLocation?
विलियम जॉर्ज

@WilliamGeorge मैं startUpdatingLocation
LoveMeSomeFood

43

बस इसे ठीक करने के चरणों को जोड़ना है:

इसे करने के 2 तरीके:

ए) आसान तरीका: अपनी Info.plist फ़ाइल चुनें, गुण जोड़ें, ध्यान दें कि वे LOCATION के बजाय PRIVCY से शुरू होते हैं ... इसलिए, इन चरों के सटीक नाम "गोपनीयता - स्थान ..." आदि के साथ शुरू होते हैं, जोड़ें यहां प्रत्येक, और वर्णन पर उपयोगकर्ता इसे कैसे देख रहा होगा, इसका वर्णन करता है।

बी) कठिन / दिलचस्प / प्रोग्रामेटिक तरीका (मुझे यह तरीका अधिक पसंद है):

अपने एप्लिकेशन के लिए अपने Info.plist पर राइट क्लिक करें, और फिर "स्रोत कोड देखें" चुनें, आपको इसे XML में देखना चाहिए,

अन्य ...... प्रारूप का पालन करें, और इन गुणों को निम्नानुसार जोड़ें:

<key>NSLocationAlwaysUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app uses your Microphone to allow Voice over IP communication with the Program Admin system</string>

सहेजें, और फिर info.plist फ़ाइल पर राइट-क्लिक करें, और उसके बाद गुण सूची का चयन करें, यह फ़ाइल को डिफ़ॉल्ट दृश्य में वापस देखना चाहिए।

संपादित करें:

एक अन्य सदस्य ने कोड के लिए कहा, यहाँ यह है:

1) अपने .H फ़ाइल पर, जोड़ें:

@property (strong, nonatomic) CLLocationManager *LocationManager;

2) अपने .M फ़ाइल पर ViewDidAppear () फ़ंक्शन के तहत जोड़ें:

_LocationManager = [[CLLocationManager alloc] init];
[_LocationManager setDelegate:self];
_LocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_LocationManager.pausesLocationUpdatesAutomatically = NO;
[_LocationManager requestAlwaysAuthorization];

_LocationManager.headingFilter = 5;
_LocationManager.distanceFilter = 0;

[_LocationManager startUpdatingLocation];
[_LocationManager startUpdatingHeading];

यह मेरे लिए ठीक काम करता है, उम्मीद है कि कोड आपके लिए भी काम करेगा।

सादर

Heider


1
मैंने सभी तीन विवरण कुंजियाँ जोड़ी हैं और मुझे अभी भी स्थान अपडेट नहीं मिल रहे हैं। में viewwillAppear और प्रतिनिधि को हटाकर मैं locationmanagerdelgate जोड़ रहा हूँ viewwilldisapper। अगर मैं सेटिंग पर जाता हूं और पहले से चयनित का चयन करता हूं Allow Always। मुझे केवल एक बार अपडेट मिलता है और फिर नहीं। इसे ठीक करने के लिए कोई भी विचार। अग्रिम में धन्यवाद!!
लवमैसोमफूड

मैं अपना कोड अब यह बताने के लिए जोड़ूंगा कि मेरे लिए क्या काम कर रहा है:
हेइडर सती

मेरे पास आपका समान कोड है। लेकिन फिर भी, मुझे स्थान अपडेट नहीं मिलता है, जब तक कि मैं घर जाकर ऐप पर वापस नहीं आता हूं। यह केवल iOS 11 में होता है। मैं अभी भी यह पता नहीं लगा सका कि क्यों।
लवमीसोमफूड

क्या आप इस धागे को देख सकते हैं? stackoverflow.com/questions/46616496/… । धन्यवाद!
लवमैसोमफूड

हाय उमा, हमारे उपयोगकर्ताओं में से एक ने उपकरणों में से एक पर एक ही मुद्दे की सूचना दी, मैं इसकी जांच कर रहा हूं और आपको वापस मिल जाएगा, मुझे लगता है कि IOS11 इस समय हम सभी को बहुत व्यस्त रख रहा है ... मुझे इसका पता लगाना होगा और इस asap को हल करें, कृपया मेरे साथ
रहें

23

iOS11 के तहत काम करना मुझे पता चला, कि Info.plist को कम से कम NSLocationAlwaysAndWhenInUseUsageDescription की आवश्यकता है।

यहाँ छवि विवरण दर्ज करें

जब आपका ऐप बहुभाषी हो , तो आपके स्ट्रिंग्स के स्थानीयकृत संस्करणों को इस पोस्ट में बताई गई तीनों कुंजियों की आवश्यकता होगी requestAlwaysAuthorization()और locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)यह चुपचाप विफल हो जाएगा।

उदाहरण के रूप में जर्मन अनुवाद दिखाने वाला शॉट:

यहाँ छवि विवरण दर्ज करें

आशा है कि यह आपको समय बचाता है जब ठोकर खा रहा है।


धन्यवाद, @ आईडोक! इससे मेरा काफी समय बच गया।
रेनहार्ड मेवनर

यह सही उत्तर है, iOS 11 में स्थान गोपनीयता कुंजी को स्थानीयकृत करना अनिवार्य है।
जेबरलाना

10 घंटे के बाद मैं इस पद पर पहुँच गया ... tnx
1110

17

स्विफ्ट 4.0.3 में काम करना

   <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
   <string>Description</string>

   <key>NSLocationAlwaysUsageDescription</key>
   <string>Will you allow this app to always know your location?</string>

   <key>NSLocationWhenInUseUsageDescription</key>
   <string>Do you allow this app to know your current location?</string>  

धन्यवाद vipulkumarmehta
केशव गेरा

13

इन कदमों का अनुसरण करें:

मैं "हमेशा प्राधिकरण" की आवश्यकता वाले ऐप के साथ एक ही मुद्दे में भाग गया, और इन चरणों का पालन करके इसे हल किया:

1. कुंजी जोड़ें NSLocationWhenInUseUsageDescriptionInfo.plist

2. जोड़े NSLocationAlwaysAndWhenInUseUsageDescription के लिएInfo.plist

3. जोड़ें NSLocationAlwaysUsageDescription करने के लिए Info.plist(समर्थन करने के लिए <आईओएस 11)

4. कॉल requestWhenInUseAuthorization() से पहले requestAlwaysAuthorization( )

आप requestWlInUseAuthorization () से पहले requestAlwaysAuthorization () को निष्पादित नहीं कर सकते। आपको उस अनुमति स्तर पर आगे बढ़ना होगा। एक बार जब मैंने ये बदलाव किए, तो स्थान अपडेट फिर से ठीक से काम करने लगे।

अधिक विवरण यहां मिल सकता है:

https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_for_location_services/requesting_always_authorization


1
इसके साथ कुछ भी नहीं बदला :(
सेमल बयारी

मैंने फ्लैग की अनुमति देकर हल किया देखें stackoverflow.com/a/50733860/2610888
एंड्रिया गोराईरी

6

सॉरी से बेहतर सुरक्षित .. आईओएस 11 में: नीचे जोड़ें और आप अच्छे हैं।

<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>

5

स्विफ्ट 5 के साथ iOS 12.2 पर परीक्षण किया गया

चरण 1। आपको प्लिस्ट फ़ाइल में निम्नलिखित गोपनीयता अनुमतियां मिलानी चाहिए

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Application requires user’s location for better user experience.</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Application requires user’s location for better user experience.</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>Application requires user’s location for better user experience.</string>

चरण 2. सुनिश्चित करें कि आपके पास वर्तमान स्थानों को प्राप्त करने के लिए स्विफ्ट कोड का अनुसरण है

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    // MARK: Variables declearations
    @IBOutlet weak var mapView: MKMapView!
    var locationManager: CLLocationManager!

    // MARK: View Controller life cycle methods
    override func viewDidLoad() {
        super.viewDidLoad()
        //TODO: Make user you must add following three privacy permissions in plist
        //NSLocationWhenInUseUsageDescription
        //NSLocationAlwaysAndWhenInUseUsageDescription
        //NSLocationAlwaysUsageDescription

        getCurrentLocation()
    }

    func getCurrentLocation()
    {
        if (CLLocationManager.locationServicesEnabled())
        {
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
        }
    }

    // MARK: Location Manager Delegate methods
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {
        let locationsObj = locations.last! as CLLocation
        print("Current location lat-long is = \(locationsObj.coordinate.latitude) \(locationsObj.coordinate.longitude)")
        showOnMap(location: locationsObj)
    }
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Get Location failed")
    }

    func showOnMap(location: CLLocation )
    {
        let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
        mapView.setRegion(region, animated: true)
    }
}

2

स्विफ्ट: 3 मैंने एक ही मुद्दे का सामना किया है। मैं पूरी तरह से हल खोजने के लिए खराब हो गया था। यहाँ है कि मैं इस मुद्दे को कैसे तय किया।

चरण -1: प्रोजेक्ट फ़ाइल> क्षमताएं> पृष्ठभूमि मोड> स्थान अपडेट चुनें

चरण -2: NSLocationWhenInUseUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription कुंजी को Info.plist में जोड़ें

चरण 3 :

manager.pausesLocationUpdatesAutomatically = false
manager.allowsBackgroundLocationUpdates = true

AllowBackgroundLocationUpdates ने निश्चित रूप से मेरी समस्या को हल किया, मुझे विश्वास नहीं हो रहा है कि यह अन्य प्रतिक्रियाओं और मंचों में रिपोर्ट नहीं किया गया है। Apple डॉक्स से: "आप इस प्रॉपर्टी का उपयोग बैकग्राउंड अपडेट्स को प्रोग्रामेटिक रूप से सक्षम और डिसेबल करने के लिए करते हैं। उदाहरण के लिए, आप इस प्रॉपर्टी को सही तब ही सेट कर सकते हैं जब यूजर आपके ऐप में उन फीचर्स को इनेबल करता है, जहां बैकग्राउंड अपडेट्स की जरूरत होती है।" "इस संपत्ति का डिफ़ॉल्ट मान गलत है।" डेवलपर
.apple.com/documentation/corelocation/…
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.