Skip to content

Commit 2f31bf8

Browse files
committed
Fix location permissions on iOS 13 (#329)
1 parent aac7edc commit 2f31bf8

File tree

2 files changed

+8
-57
lines changed

2 files changed

+8
-57
lines changed

ios/LocationAlways/RNPermissionHandlerLocationAlways.m

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
@interface RNPermissionHandlerLocationAlways() <CLLocationManagerDelegate>
77

88
@property (nonatomic, strong) CLLocationManager *locationManager;
9-
@property (nonatomic) bool initialChangeEventFired;
10-
@property (nonatomic) bool isWaitingDidBecomeActive;
119
@property (nonatomic, strong) void (^resolve)(RNPermissionStatus status);
1210
@property (nonatomic, strong) void (^reject)(NSError *error);
1311

@@ -51,57 +49,22 @@ - (void)requestWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve
5149
if (![CLLocationManager locationServicesEnabled] || ![RNPermissions isBackgroundModeEnabled:@"location"]) {
5250
return resolve(RNPermissionStatusNotAvailable);
5351
}
54-
55-
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
56-
57-
if (status == kCLAuthorizationStatusAuthorizedAlways) {
58-
return resolve(RNPermissionStatusAuthorized);
52+
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined) {
53+
return [self checkWithResolver:resolve rejecter:reject];
5954
}
6055

6156
_resolve = resolve;
6257
_reject = reject;
63-
_initialChangeEventFired = false;
64-
_isWaitingDidBecomeActive = false;
65-
66-
if (status == kCLAuthorizationStatusAuthorizedWhenInUse && ![RNPermissions isFlaggedAsRequested:[[self class] handlerUniqueId]]) {
67-
_isWaitingDidBecomeActive = true;
68-
69-
[[NSNotificationCenter defaultCenter] addObserver:self
70-
selector:@selector(UIApplicationDidBecomeActiveNotification:)
71-
name:UIApplicationDidBecomeActiveNotification object:nil];
72-
}
7358

7459
_locationManager = [CLLocationManager new];
7560
[_locationManager setDelegate:self];
7661
[_locationManager requestAlwaysAuthorization];
7762
}
7863

79-
- (void)onAuthorizationStatus {
80-
[RNPermissions flagAsRequested:[[self class] handlerUniqueId]];
81-
[self checkWithResolver:_resolve rejecter:_reject];
82-
83-
[_locationManager setDelegate:nil];
84-
_locationManager = nil;
85-
86-
if (_isWaitingDidBecomeActive) {
87-
[[NSNotificationCenter defaultCenter] removeObserver:self
88-
name:UIApplicationDidBecomeActiveNotification
89-
object:nil];
90-
}
91-
}
92-
93-
- (void)UIApplicationDidBecomeActiveNotification:(NSNotification *)notification {
94-
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) {
95-
[self onAuthorizationStatus];
96-
}
97-
}
98-
9964
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
100-
// @see https://github.com/iosphere/ISHPermissionKit/blob/2.1.2/ISHPermissionKit/Requests/ISHPermissionRequestLocation.m#L127
101-
if (status != kCLAuthorizationStatusNotDetermined && _initialChangeEventFired) {
102-
[self onAuthorizationStatus];
103-
} else {
104-
_initialChangeEventFired = true;
65+
if (status != kCLAuthorizationStatusNotDetermined) {
66+
[_locationManager setDelegate:nil];
67+
[self checkWithResolver:_resolve rejecter:_reject];
10568
}
10669
}
10770

ios/LocationWhenInUse/RNPermissionHandlerLocationWhenInUse.m

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
@interface RNPermissionHandlerLocationWhenInUse() <CLLocationManagerDelegate>
66

77
@property (nonatomic, strong) CLLocationManager *locationManager;
8-
@property (nonatomic) bool initialChangeEventFired;
98
@property (nonatomic, strong) void (^resolve)(RNPermissionStatus status);
109
@property (nonatomic, strong) void (^reject)(NSError *error);
1110

@@ -45,33 +44,22 @@ - (void)requestWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve
4544
if (![CLLocationManager locationServicesEnabled]) {
4645
return resolve(RNPermissionStatusNotAvailable);
4746
}
48-
4947
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined) {
5048
return [self checkWithResolver:resolve rejecter:reject];
5149
}
5250

5351
_resolve = resolve;
5452
_reject = reject;
55-
_initialChangeEventFired = false;
5653

5754
_locationManager = [CLLocationManager new];
5855
[_locationManager setDelegate:self];
5956
[_locationManager requestWhenInUseAuthorization];
6057
}
6158

62-
- (void)onAuthorizationStatus {
63-
[self checkWithResolver:_resolve rejecter:_reject];
64-
65-
[_locationManager setDelegate:nil];
66-
_locationManager = nil;
67-
}
68-
6959
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
70-
// @see https://github.com/iosphere/ISHPermissionKit/blob/2.1.2/ISHPermissionKit/Requests/ISHPermissionRequestLocation.m#L127
71-
if (status != kCLAuthorizationStatusNotDetermined && _initialChangeEventFired) {
72-
[self onAuthorizationStatus];
73-
} else {
74-
_initialChangeEventFired = true;
60+
if (status != kCLAuthorizationStatusNotDetermined) {
61+
[_locationManager setDelegate:nil];
62+
[self checkWithResolver:_resolve rejecter:_reject];
7563
}
7664
}
7765

0 commit comments

Comments
 (0)