Wednesday, February 7, 2018

gps - iOS: App is not asking user's permission while installing the app. getting kCLAuthorizationStatusNotDetermined every time - Objective-c & Swift

iOS8 has got us major API changes with the LocationsServices




Assuming
[CLLocationManager locationServicesEnabled] return YES,



With the First Launch of the iOS App [both iOS7 and iOS8] - locationMangers(CLLocationManager) authorizationStatus
preset to



authorizationStatus(CLAuthorizationStatus) = kCLAuthorizationStatusNotDetermined


Prompting in iOS7+




Initiate the locationManger (CLLocationManager
, Strong) and set the delegates(CLLocationManagerDelegate)



Now to prompt the user to use Locations Services and List the App under the Settings> Privacy> Locations Services its MUST to call any of the Locations Services Methods, its depends on the App requirement- for example if app is kind of one of the below



Locations Updates - [self.locationManager startUpdatingLocation]



RegionMonitoring - [self.locationManager startMonitoringForRegion:beaconRegion]




right after executions of the above method iOS will prompt user requesting to accept use of Locations Services in app and irrespective of user choice app will be listed under the Settings > Privacy > Locations Services.



Prompting in iOS8+



Its in same case with iOS8, with the first launch the App Locations Services



authorizationStatus(CLAuthorizationStatus) = kCLAuthorizationStatusNotDetermined


iOS 8 we got new methods for showing prompt to user




[self.locationManager requestAlwaysAuthorization] 
or
[self.locationManager requestWhenInUseAuthorization]


requestAlwaysAuthorization/requestWhenInUseAuthorization availbable from iOS8.
if App deployment target is iOS7 then wrap this under if block to make sure in iOS7 this doesn't lead to app crash.



if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])

{
[self.locationManager requestAlwaysAuthorization]; .
}


or



if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])
{
[self.locationManager requestWhenInUseAuthorization];

}


Very Important ###:



As per iOS8 its mandatory to include the string stating why app uses requestAlwaysAuthorization/requestWhenInUseAuthorization
In info.plist include any of these property respective to the requirement of the app



for kCLAuthorizationStatusAuthorizedAlways include Key/Value(string Value) pair




NSLocationAlwaysUsageDescription = App use Locations service mode Always


for kCLAuthorizationStatusAuthorizedWhenInUse include Key/Value(string Value) pair



NSLocationWhenInUseUsageDescription = App use Locations service mode In Use 


Screenshot of info.plist (in case anybody is confused by this)
enter image description here

No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...