Skip to content

Commit 24f2284

Browse files
Add support for iOS providesAppNotificationSettings in request/checkNotifications (#678)
* Add support for iOS providesAppNotificationSettings permission * Add documentation
1 parent f7a041c commit 24f2284

File tree

5 files changed

+57
-42
lines changed

5 files changed

+57
-42
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,7 @@ type NotificationSettings = {
756756
provisional?: boolean;
757757
lockScreen?: boolean;
758758
notificationCenter?: boolean;
759+
providesAppNotificationSettings?: boolean;
759760
};
760761

761762
function checkNotifications(): Promise<{
@@ -783,7 +784,7 @@ You cannot request notifications permissions on Android. `requestNotifications`
783784

784785
```ts
785786
// only used on iOS
786-
type NotificationOption = 'alert' | 'badge' | 'sound' | 'criticalAlert' | 'carPlay' | 'provisional';
787+
type NotificationOption = 'alert' | 'badge' | 'sound' | 'criticalAlert' | 'carPlay' | 'provisional' | 'providesAppNotificationSettings';
787788

788789
type NotificationSettings = {
789790
// properties only available on iOS
@@ -796,6 +797,7 @@ type NotificationSettings = {
796797
provisional?: boolean;
797798
lockScreen?: boolean;
798799
notificationCenter?: boolean;
800+
providesAppNotificationSettings?: boolean;
799801
};
800802

801803
function requestNotifications(options: NotificationOption[]): Promise<{

example/App.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export const App = () => {
130130

131131
<TouchableRipple
132132
onPress={() => {
133-
RNPermissions.requestNotifications(['alert', 'badge', 'sound'])
133+
RNPermissions.requestNotifications(['alert', 'badge', 'sound', 'providesAppNotificationSettings'])
134134
.then(check)
135135
.catch((error) => console.error(error));
136136
}}
@@ -156,6 +156,7 @@ export const App = () => {
156156
{`provisional: ${notifications.settings.provisional}\n`}
157157
{`lockScreen: ${notifications.settings.lockScreen}\n`}
158158
{`notificationCenter: ${notifications.settings.notificationCenter}\n`}
159+
{`providesAppNotificationSettings: ${notifications.settings.providesAppNotificationSettings}\n`}
159160
</Text>
160161
)}
161162
</>

example/ios/Podfile.lock

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,41 +11,41 @@ PODS:
1111
- ReactCommon/turbomodule/core (= 0.66.4)
1212
- fmt (6.2.1)
1313
- glog (0.3.5)
14-
- Permission-AppTrackingTransparency (3.1.0):
14+
- Permission-AppTrackingTransparency (3.2.0):
1515
- RNPermissions
16-
- Permission-BluetoothPeripheral (3.1.0):
16+
- Permission-BluetoothPeripheral (3.2.0):
1717
- RNPermissions
18-
- Permission-Calendars (3.1.0):
18+
- Permission-Calendars (3.2.0):
1919
- RNPermissions
20-
- Permission-Camera (3.1.0):
20+
- Permission-Camera (3.2.0):
2121
- RNPermissions
22-
- Permission-Contacts (3.1.0):
22+
- Permission-Contacts (3.2.0):
2323
- RNPermissions
24-
- Permission-FaceID (3.1.0):
24+
- Permission-FaceID (3.2.0):
2525
- RNPermissions
26-
- Permission-LocationAccuracy (3.1.0):
26+
- Permission-LocationAccuracy (3.2.0):
2727
- RNPermissions
28-
- Permission-LocationAlways (3.1.0):
28+
- Permission-LocationAlways (3.2.0):
2929
- RNPermissions
30-
- Permission-LocationWhenInUse (3.1.0):
30+
- Permission-LocationWhenInUse (3.2.0):
3131
- RNPermissions
32-
- Permission-MediaLibrary (3.1.0):
32+
- Permission-MediaLibrary (3.2.0):
3333
- RNPermissions
34-
- Permission-Microphone (3.1.0):
34+
- Permission-Microphone (3.2.0):
3535
- RNPermissions
36-
- Permission-Motion (3.1.0):
36+
- Permission-Motion (3.2.0):
3737
- RNPermissions
38-
- Permission-Notifications (3.1.0):
38+
- Permission-Notifications (3.2.0):
3939
- RNPermissions
40-
- Permission-PhotoLibrary (3.1.0):
40+
- Permission-PhotoLibrary (3.2.0):
4141
- RNPermissions
42-
- Permission-PhotoLibraryAddOnly (3.1.0):
42+
- Permission-PhotoLibraryAddOnly (3.2.0):
4343
- RNPermissions
44-
- Permission-Reminders (3.1.0):
44+
- Permission-Reminders (3.2.0):
4545
- RNPermissions
46-
- Permission-SpeechRecognition (3.1.0):
46+
- Permission-SpeechRecognition (3.2.0):
4747
- RNPermissions
48-
- Permission-StoreKit (3.1.0):
48+
- Permission-StoreKit (3.2.0):
4949
- RNPermissions
5050
- RCT-Folly (2021.06.28.00-v2):
5151
- boost
@@ -310,7 +310,7 @@ PODS:
310310
- React-jsi (= 0.66.4)
311311
- React-logger (= 0.66.4)
312312
- React-perflogger (= 0.66.4)
313-
- RNPermissions (3.1.0):
313+
- RNPermissions (3.2.0):
314314
- React-Core
315315
- RNVectorIcons (8.1.0):
316316
- React-Core
@@ -483,24 +483,24 @@ SPEC CHECKSUMS:
483483
FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58
484484
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
485485
glog: 5337263514dd6f09803962437687240c5dc39aa4
486-
Permission-AppTrackingTransparency: 4bb348de427672bb61785e7fb1a28232e0680870
487-
Permission-BluetoothPeripheral: e3bdcbf170bd1760881633941d4021b3d8e77f5a
488-
Permission-Calendars: dd6728a4daa0afef236c25bfc29d920db3096340
489-
Permission-Camera: 0db4fd6e1c556c1cf47f38b989a8084cea3ec3dd
490-
Permission-Contacts: c9c3306280576546619fc9ae7489012ed9fe091f
491-
Permission-FaceID: 34794093f5de6410b373f9245b29632630beab6e
492-
Permission-LocationAccuracy: f2fa6140c0362473a061b771dd1b702db581138c
493-
Permission-LocationAlways: f1e021c3b348946cd7c5760172925b749e5d07a6
494-
Permission-LocationWhenInUse: d98db702ec75e93a3ff94bc297d0b66ea04231e1
495-
Permission-MediaLibrary: eb4dc997f8d3f81f28940f997651cd1a2bf16149
496-
Permission-Microphone: 7b75718196244a6e59dd60f82f12962562c2ea12
497-
Permission-Motion: c2ebd76cc9c7f363e844b1a2df23bde2d08560e3
498-
Permission-Notifications: e247d69c22ae72770d1c5314ad6ccd1256c57c83
499-
Permission-PhotoLibrary: 9dcf80d1353d81b9f1e210c34291591236aaf2b6
500-
Permission-PhotoLibraryAddOnly: 3d359683511129433080279c409b29e792d69c71
501-
Permission-Reminders: d44880a66ac725c750ebed196e9e2ddec9b0a70e
502-
Permission-SpeechRecognition: de418c02c92924d9aa25dd0d690dcea1a8d24812
503-
Permission-StoreKit: 6642330f0c003789f76f639ae024cdf5ec6a5732
486+
Permission-AppTrackingTransparency: 95c9308dd40819fa9f6830751d0ef3ea11498723
487+
Permission-BluetoothPeripheral: dd2663f81d622c9d153a2aacd7e3de0d59f7b4b6
488+
Permission-Calendars: b2c5f5e0b53403d195f9ac78114731682a9a0e91
489+
Permission-Camera: 53efcbb755b0e8bdf253dbb27cc7559ccfce8480
490+
Permission-Contacts: 3919ddcaa62d6dc4320d41a27883b6f734a76fa4
491+
Permission-FaceID: e3d306dc6284b8985beb608b033817900388cbb8
492+
Permission-LocationAccuracy: c13bf629b614be250031458cf81d6a2e9dcdf64f
493+
Permission-LocationAlways: 012fd2c1f610068c5f9a7b48bc908ea41edd0c43
494+
Permission-LocationWhenInUse: 13de9a01e006cb53a6ac3c9f8d1ab6cc98318d9c
495+
Permission-MediaLibrary: d35adbe2a069f2e16121fd79cf15959e86a3f74a
496+
Permission-Microphone: db557c64f7e9ad41bff6b3f6d93df3b67311855b
497+
Permission-Motion: 4a699388cd4fd57db51eb4e0a34d6e66a0268f61
498+
Permission-Notifications: bb420c3d28328df24de1b476b41ed8249ccf2537
499+
Permission-PhotoLibrary: 7bec836dcdd04a0bfb200c314f1aae06d4476357
500+
Permission-PhotoLibraryAddOnly: 06fb0cdb1d35683b235ad8c464ef0ecc88859ea3
501+
Permission-Reminders: 3c2d5d1e9c4b9fe90f937a23cbec9d8cf5ba52fd
502+
Permission-SpeechRecognition: bfb038564b6f3a6e5dcf8d848171c32ae09d949c
503+
Permission-StoreKit: ee68e7b70e9c44c2b16c6add64ddc58bd54c81c6
504504
RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
505505
RCTRequired: 4bf86c70714490bca4bf2696148638284622644b
506506
RCTTypeSafety: c475a7059eb77935fa53d2c17db299893f057d5d
@@ -525,7 +525,7 @@ SPEC CHECKSUMS:
525525
React-RCTVibration: e3ffca672dd3772536cb844274094b0e2c31b187
526526
React-runtimeexecutor: dec32ee6f2e2a26e13e58152271535fadff5455a
527527
ReactCommon: 57b69f6383eafcbd7da625bfa6003810332313c4
528-
RNPermissions: 4b54095940aea8c03fa3e6c92d4ac3647b31ed4e
528+
RNPermissions: f7ebe52db07c00901127966ca080b4ec6a6ceb0a
529529
RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4
530530
Yoga: e7dc4e71caba6472ff48ad7d234389b91dadc280
531531

ios/Notifications/RNPermissionHandlerNotifications.m

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ - (void)checkWithResolver:(void (^ _Nonnull)(RNPermissionStatus status, NSDictio
5454
bool value = settings.criticalAlertSetting == UNNotificationSettingEnabled;
5555
[result setValue:@(value) forKey:@"criticalAlert"];
5656
}
57+
58+
{
59+
bool value = settings.providesAppNotificationSettings == TRUE;
60+
[result setValue:@(value) forKey:@"providesAppNotificationSettings"];
61+
}
5762
}
5863

5964
switch (settings.authorizationStatus) {
@@ -79,6 +84,7 @@ - (void)requestWithResolver:(void (^ _Nonnull)(RNPermissionStatus status, NSDict
7984
bool criticalAlert = [options containsObject:@"criticalAlert"];
8085
bool carPlay = [options containsObject:@"carPlay"];
8186
bool provisional = [options containsObject:@"provisional"];
87+
bool providesAppNotificationSettings = [options containsObject:@"providesAppNotificationSettings"];
8288

8389
UNAuthorizationOptions types = UNAuthorizationOptionNone;
8490

@@ -102,14 +108,18 @@ - (void)requestWithResolver:(void (^ _Nonnull)(RNPermissionStatus status, NSDict
102108
if (provisional) {
103109
types += UNAuthorizationOptionProvisional;
104110
}
111+
if (providesAppNotificationSettings) {
112+
types += UNAuthorizationOptionProvidesAppNotificationSettings;
113+
}
105114
}
106115

107116
if (!alert &&
108117
!badge &&
109118
!sound &&
110119
!criticalAlert &&
111120
!carPlay &&
112-
!provisional) {
121+
!provisional &&
122+
!providesAppNotificationSettings) {
113123
types += UNAuthorizationOptionAlert;
114124
types += UNAuthorizationOptionBadge;
115125
types += UNAuthorizationOptionSound;

src/types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ export type NotificationOption =
2626
| 'sound'
2727
| 'carPlay'
2828
| 'criticalAlert'
29-
| 'provisional';
29+
| 'provisional'
30+
| 'providesAppNotificationSettings';
3031

3132
export type NotificationSettings = {
3233
alert?: boolean;
@@ -37,6 +38,7 @@ export type NotificationSettings = {
3738
provisional?: boolean;
3839
lockScreen?: boolean;
3940
notificationCenter?: boolean;
41+
providesAppNotificationSettings?: boolean;
4042
};
4143

4244
export type NotificationsResponse = {

0 commit comments

Comments
 (0)