Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
permission_handler
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
songyanzhi
permission_handler
Commits
174dfb21
Commit
174dfb21
authored
Oct 22, 2019
by
Tonghdj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[iOS] add NotificationPermissionStrategy
parent
f24a2aa1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
100 additions
and
1 deletions
+100
-1
ios/Classes/PermissionHandlerEnums.h
+1
-0
ios/Classes/PermissionManager.h
+1
-0
ios/Classes/PermissionManager.m
+2
-0
ios/Classes/strategies/NotificationPermissionStrategy.h
+14
-0
ios/Classes/strategies/NotificationPermissionStrategy.m
+75
-0
lib/src/permission_enums.dart
+7
-1
No files found.
ios/Classes/PermissionHandlerEnums.h
View file @
174dfb21
...
@@ -22,6 +22,7 @@ typedef NS_ENUM(int, PermissionGroup) {
...
@@ -22,6 +22,7 @@ typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupSpeech
,
PermissionGroupSpeech
,
PermissionGroupStorage
,
PermissionGroupStorage
,
PermissionGroupIgnoreBatteryOptimizations
,
PermissionGroupIgnoreBatteryOptimizations
,
PermissionGroupNotification
,
PermissionGroupUnknown
,
PermissionGroupUnknown
,
};
};
...
...
ios/Classes/PermissionManager.h
View file @
174dfb21
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#import "SensorPermissionStrategy.h"
#import "SensorPermissionStrategy.h"
#import "SpeechPermissionStrategy.h"
#import "SpeechPermissionStrategy.h"
#import "UnknownPermissionStrategy.h"
#import "UnknownPermissionStrategy.h"
#import "NotificationPermissionStrategy.h"
#import "PermissionHandlerEnums.h"
#import "PermissionHandlerEnums.h"
#import "Codec.h"
#import "Codec.h"
...
...
ios/Classes/PermissionManager.m
View file @
174dfb21
...
@@ -99,6 +99,8 @@
...
@@ -99,6 +99,8 @@
return
[
SensorPermissionStrategy
new
];
return
[
SensorPermissionStrategy
new
];
case
PermissionGroupSpeech
:
case
PermissionGroupSpeech
:
return
[
SpeechPermissionStrategy
new
];
return
[
SpeechPermissionStrategy
new
];
case
PermissionGroupNotification
:
return
[
NotificationPermissionStrategy
new
];
default
:
default
:
return
[
UnknownPermissionStrategy
new
];
return
[
UnknownPermissionStrategy
new
];
}
}
...
...
ios/Classes/strategies/NotificationPermissionStrategy.h
0 → 100644
View file @
174dfb21
//
// NotificationPermissionStrategy.h
// permission_handler
//
// Created by Tong on 2019/10/21.
//
#import <Foundation/Foundation.h>
#import <UserNotifications/UserNotifications.h>
#import "PermissionStrategy.h"
@interface
NotificationPermissionStrategy
:
NSObject
<
PermissionStrategy
>
@end
ios/Classes/strategies/NotificationPermissionStrategy.m
0 → 100644
View file @
174dfb21
//
// NotificationPermissionStrategy.m
// permission_handler
//
// Created by Tong on 2019/10/21.
//
#import "NotificationPermissionStrategy.h"
@implementation
NotificationPermissionStrategy
-
(
PermissionStatus
)
checkPermissionStatus
:(
PermissionGroup
)
permission
{
return
[
NotificationPermissionStrategy
permissionStatus
];
}
-
(
ServiceStatus
)
checkServiceStatus
:(
PermissionGroup
)
permission
{
return
ServiceStatusNotApplicable
;
}
-
(
void
)
requestPermission
:(
PermissionGroup
)
permission
completionHandler
:(
PermissionStatusHandler
)
completionHandler
{
PermissionStatus
status
=
[
self
checkPermissionStatus
:
permission
];
if
(
status
!=
PermissionStatusUnknown
)
{
completionHandler
(
status
);
return
;
}
if
(
@available
(
iOS
10
.
0
,
*
))
{
UNUserNotificationCenter
*
center
=
[
UNUserNotificationCenter
currentNotificationCenter
];
UNAuthorizationOptions
authorizationOptions
=
0
;
authorizationOptions
+=
UNAuthorizationOptionSound
;
authorizationOptions
+=
UNAuthorizationOptionAlert
;
authorizationOptions
+=
UNAuthorizationOptionBadge
;
[
center
requestAuthorizationWithOptions
:(
authorizationOptions
)
completionHandler
:
^
(
BOOL
granted
,
NSError
*
_Nullable
error
)
{
if
(
!
granted
||
error
!=
nil
)
{
completionHandler
(
PermissionStatusDenied
);
return
;
}
completionHandler
(
PermissionStatusGranted
);
}];
}
else
{
UIUserNotificationType
notificationTypes
=
0
;
notificationTypes
|=
UIUserNotificationTypeSound
;
notificationTypes
|=
UIUserNotificationTypeAlert
;
notificationTypes
|=
UIUserNotificationTypeBadge
;
UIUserNotificationSettings
*
settings
=
[
UIUserNotificationSettings
settingsForTypes
:
notificationTypes
categories
:
nil
];
[[
UIApplication
sharedApplication
]
registerUserNotificationSettings
:
settings
];
completionHandler
(
PermissionStatusGranted
);
}
}
+
(
PermissionStatus
)
permissionStatus
{
__block
PermissionStatus
permissionStatus
=
PermissionStatusGranted
;
if
(
@available
(
iOS
10
,
*
))
{
dispatch_semaphore_t
sem
=
dispatch_semaphore_create
(
0
);
[[
UNUserNotificationCenter
currentNotificationCenter
]
getNotificationSettingsWithCompletionHandler
:
^
(
UNNotificationSettings
*
_Nonnull
settings
)
{
if
(
settings
.
authorizationStatus
==
UNAuthorizationStatusDenied
)
{
permissionStatus
=
PermissionStatusDenied
;
}
else
if
(
settings
.
authorizationStatus
==
UNAuthorizationStatusNotDetermined
)
{
permissionStatus
=
PermissionStatusUnknown
;
}
dispatch_semaphore_signal
(
sem
);
}];
dispatch_semaphore_wait
(
sem
,
DISPATCH_TIME_FOREVER
);
}
else
if
(
@available
(
iOS
8
,
*
))
{
UIUserNotificationSettings
*
setting
=
[[
UIApplication
sharedApplication
]
currentUserNotificationSettings
];
if
(
setting
.
types
==
UIUserNotificationTypeNone
)
permissionStatus
=
PermissionStatusDenied
;
}
else
{
UIRemoteNotificationType
type
=
[[
UIApplication
sharedApplication
]
enabledRemoteNotificationTypes
];
if
(
type
==
UIUserNotificationTypeNone
)
permissionStatus
=
PermissionStatusDenied
;
}
return
permissionStatus
;
}
@end
lib/src/permission_enums.dart
View file @
174dfb21
...
@@ -149,8 +149,12 @@ class PermissionGroup {
...
@@ -149,8 +149,12 @@ class PermissionGroup {
static
const
PermissionGroup
ignoreBatteryOptimizations
=
static
const
PermissionGroup
ignoreBatteryOptimizations
=
PermissionGroup
.
_
(
15
);
PermissionGroup
.
_
(
15
);
/// Android: Notification
/// iOS: Notification
static
const
PermissionGroup
notification
=
PermissionGroup
.
_
(
16
);
/// The unknown permission only used for return type, never requested
/// The unknown permission only used for return type, never requested
static
const
PermissionGroup
unknown
=
PermissionGroup
.
_
(
1
6
);
static
const
PermissionGroup
unknown
=
PermissionGroup
.
_
(
1
7
);
static
const
List
<
PermissionGroup
>
values
=
<
PermissionGroup
>[
static
const
List
<
PermissionGroup
>
values
=
<
PermissionGroup
>[
calendar
,
calendar
,
...
@@ -169,6 +173,7 @@ class PermissionGroup {
...
@@ -169,6 +173,7 @@ class PermissionGroup {
speech
,
speech
,
storage
,
storage
,
ignoreBatteryOptimizations
,
ignoreBatteryOptimizations
,
notification
,
unknown
,
unknown
,
];
];
...
@@ -189,6 +194,7 @@ class PermissionGroup {
...
@@ -189,6 +194,7 @@ class PermissionGroup {
'speech'
,
'speech'
,
'storage'
,
'storage'
,
'ignoreBatteryOptimizations'
,
'ignoreBatteryOptimizations'
,
'notification'
,
'unknown'
,
'unknown'
,
];
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment