Commit 5035c0b4 by Lukas Kurz Committed by GitHub

Fix ERROR_ALREADY_REQUESTING_PERMISSIONS on iOS after requesting locationAlways (#800)

* trigger callback using notification center

* bump version of permission_handler_apple

* make receiveActivityNotification private
parent 4c5ae3f9
...@@ -5,4 +5,5 @@ ...@@ -5,4 +5,5 @@
# Name/Organization <email address> # Name/Organization <email address>
Baseflow <hello@baseflow.com> Baseflow <hello@baseflow.com>
Maurits van Beusekom <maurits@baseflow.com> Maurits van Beusekom <maurits@baseflow.com>
\ No newline at end of file Lukas Kurz <me@lukaskurz.com>
## 9.0.3
* Ensures a request for `locationAlways` permission returns a result unblocking the permission request and preventing the `ERROR_ALREADY_REQUESTING_PERMISSIONS` error for subsequent permission request.
## 9.0.2 ## 9.0.2
* Moves Apple implementation into its own package. * Moves Apple implementation into its own package.
\ No newline at end of file
...@@ -7,6 +7,10 @@ ...@@ -7,6 +7,10 @@
#if PERMISSION_LOCATION #if PERMISSION_LOCATION
@interface LocationPermissionStrategy ()
- (void) receiveActivityNotification:(NSNotification *)notification;
@end
@implementation LocationPermissionStrategy { @implementation LocationPermissionStrategy {
CLLocationManager *_locationManager; CLLocationManager *_locationManager;
PermissionStatusHandler _permissionStatusHandler; PermissionStatusHandler _permissionStatusHandler;
...@@ -53,6 +57,7 @@ ...@@ -53,6 +57,7 @@
} }
} else if (permission == PermissionGroupLocationAlways) { } else if (permission == PermissionGroupLocationAlways) {
if ([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"] != nil) { if ([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"] != nil) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveActivityNotification:) name:UIApplicationDidBecomeActiveNotification object:nil];
[_locationManager requestAlwaysAuthorization]; [_locationManager requestAlwaysAuthorization];
} else { } else {
[[NSException exceptionWithName:NSInternalInconsistencyException reason:@"To use location in iOS8 you need to define NSLocationAlwaysUsageDescription in the app bundle's Info.plist file" userInfo:nil] raise]; [[NSException exceptionWithName:NSInternalInconsistencyException reason:@"To use location in iOS8 you need to define NSLocationAlwaysUsageDescription in the app bundle's Info.plist file" userInfo:nil] raise];
...@@ -66,6 +71,22 @@ ...@@ -66,6 +71,22 @@
} }
} }
- (void) receiveActivityNotification:(NSNotification *) notification {
CLAuthorizationStatus status;
if(@available(iOS 14.0, *)){
status = _locationManager.authorizationStatus;
} else {
status = [CLLocationManager authorizationStatus];
}
if ((_requestedPermission == PermissionGroupLocationAlways && status != kCLAuthorizationStatusAuthorizedAlways)) {
PermissionStatus permissionStatus = [LocationPermissionStrategy determinePermissionStatus:_requestedPermission authorizationStatus:status];
_permissionStatusHandler(permissionStatus);
}
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
}
// {WARNING} // {WARNING}
// This is called when the location manager is first initialized and raises the following situations: // This is called when the location manager is first initialized and raises the following situations:
// 1. When we first request [PermissionGroupLocationWhenInUse] and then [PermissionGroupLocationAlways] // 1. When we first request [PermissionGroupLocationWhenInUse] and then [PermissionGroupLocationAlways]
......
name: permission_handler_apple name: permission_handler_apple
description: Permission plugin for Flutter. This plugin provides the iOS API to request and check permissions. description: Permission plugin for Flutter. This plugin provides the iOS API to request and check permissions.
version: 9.0.2 version: 9.0.3
homepage: https://github.com/baseflow/flutter-permission-handler homepage: https://github.com/baseflow/flutter-permission-handler
environment: environment:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment