iOS 8 requestWhenInUseAuthorization no Popup

前端 未结 6 2011
名媛妹妹
名媛妹妹 2020-12-04 12:25

I tried to make my AppProject iOS 8 ready. I had read a lot about

[_locationManager requestWhenInUseAuthorization];

and the entry in plist<

相关标签:
6条回答
  • 2020-12-04 12:32

    From the documentation

    NSLocationWhenInUseUsageDescription (String - iOS) describes the reason why the app accesses the user’s location normally while running in the foreground. Include this key when your app uses location services to track the user’s current location directly. This key does not support using location services to monitor regions or monitor the user’s location using the significant location change service. The system includes the value of this key in the alert panel displayed to the user when requesting permission to use location services.

    This key is required when you use the requestWhenInUseAuthorization method of the CLLocationManager class to request authorization for location services. If the key is not present when you call the requestWhenInUseAuthorization method without including this key, the system ignores your request.

    This key is supported in iOS 8.0 and later. If your Info.plist file includes both this key and the NSLocationUsageDescription key, the system uses this key and ignores the NSLocationUsageDescription key.

    Read about it here.

    I find that the easiest way to add this key to your info.plist is to right click you info.plist and choose

    Open As->Source Code

    and then add the following in the end before </dict></plist>

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

    If you want you can add a text in between <string></string> that describes to the user why you want to use his/hers location. This text will show up under the default text in the alert.

    0 讨论(0)
  • 2020-12-04 12:38

    iOS 8.3, Xcode 6.3.1, ARC enabled

    The question has been resolved, but I have (2) notes to add from my recent involvement with CLLocationManager.

    1) You must have the following keys entered into your *.plist file:

    enter image description here

    Most commonly used keys have generic more descriptive names, such as "Privacy - Location Usage Description", which really is the "NSLocationUsageDescription" key.

    To see the "raw" key names go to "*-Info.plist" and right click in the Navigator area where the keys are listed, see below:

    enter image description here

    And you get the following results:

    enter image description here

    The three keys that are related to this article are:

    enter image description here

    2) Make certain that you allocate and initialize your implementation of CLLocationManager before you try to request authorization or update location.

    *.h file:

    @interface SomeController : UIViewController <CLLocationManagerDelegate>
    
    @property (strong, nonatomic) CLLocationManager *locationManager;
    

    *.m file:

    - (IBAction)locationButton:(UIButton *)sender
    {
        if (self.locationManager == nil)
        {
            self.locationManager = [[CLLocationManager alloc] init];
            self.locationManager.delegate = self;
        }
        else
        {
            nil;
        }
    
        if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])
        {
            [self.locationManager requestWhenInUseAuthorization];
        }
        else
        {
            nil;
        }
    
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        [self.locationManager startUpdatingLocation];
    }
    

    Hope this saves someone time! Thanks.

    0 讨论(0)
  • 2020-12-04 12:45

    Had the same problem caused because I was instantiating CLLocationManager in a local var inside a method, solved it making the CLLocationManager a class property.
    After a while I found the solution here, but I'm leaving it here since this is the first result in google, hope I save you some time:

    requestWhenInUseAuthorization() not Work in iOS 8 With NSLocationWhenInUseUsageDescription Key in Info.plist

    0 讨论(0)
  • 2020-12-04 12:53

    Try writing a NSLocationWhenInUseUsageDescription in Info.plist

    0 讨论(0)
  • 2020-12-04 12:53

    Pertaining to the Apple Watch:

    You need to put the requestWhenInUseAuthorization key in the iPhone's Info.plist, not the WatchKit App's.

    This has bitten me twice now.

    0 讨论(0)
  • 2020-12-04 12:55

    Here's a little gotcha. Make sure you're adding the NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription keys to the main bundle plist and not one of your test target plists!

    0 讨论(0)
提交回复
热议问题