react-native-notify-kit 10.0.0 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +168 -100
  2. package/android/build.gradle +2 -2
  3. package/android/src/androidTest/java/app/notifee/core/RebootRecoveryTest.java +94 -2
  4. package/android/src/main/AndroidManifest.xml +8 -7
  5. package/android/src/main/java/app/notifee/core/ForegroundService.java +1 -0
  6. package/android/src/main/java/app/notifee/core/NotificationManager.java +8 -0
  7. package/android/src/main/java/app/notifee/core/RebootBroadcastReceiver.java +16 -0
  8. package/android/src/main/java/app/notifee/core/model/NotificationAndroidModel.java +8 -3
  9. package/android/src/main/java/app/notifee/core/model/TimestampTriggerModel.java +42 -27
  10. package/android/src/main/java/app/notifee/core/utility/ResourceUtils.java +30 -1
  11. package/android/src/main/kotlin/io/invertase/notifee/NotifeeApiModule.kt +6 -6
  12. package/android/src/test/java/app/notifee/core/model/NotificationAndroidModelSmallIconFallbackTest.java +74 -0
  13. package/android/src/test/java/app/notifee/core/model/TimestampTriggerModelTest.java +154 -0
  14. package/android/src/test/java/app/notifee/core/utility/ResourceUtilsFallbackIconTest.java +116 -0
  15. package/dist/types/Module.d.ts +7 -7
  16. package/dist/types/Notification.d.ts +1 -1
  17. package/dist/types/NotificationIOS.d.ts +44 -21
  18. package/dist/types/NotificationIOS.js +15 -1
  19. package/dist/types/NotificationIOS.js.map +1 -1
  20. package/dist/types/Trigger.d.ts +45 -2
  21. package/dist/types/Trigger.js +22 -0
  22. package/dist/types/Trigger.js.map +1 -1
  23. package/dist/validators/validateIOSCategory.js +2 -2
  24. package/dist/validators/validateIOSCategory.js.map +1 -1
  25. package/dist/validators/validateTrigger.js +42 -1
  26. package/dist/validators/validateTrigger.js.map +1 -1
  27. package/dist/version.d.ts +1 -1
  28. package/dist/version.js +1 -1
  29. package/ios/NotifeeCore/NotifeeCore+NSNotificationCenter.m +20 -10
  30. package/ios/NotifeeCore/NotifeeCore+UNUserNotificationCenter.h +1 -2
  31. package/ios/NotifeeCore/NotifeeCore+UNUserNotificationCenter.m +44 -35
  32. package/ios/NotifeeCore/NotifeeCore.m +1035 -99
  33. package/ios/NotifeeCore/NotifeeCoreUtil.h +36 -1
  34. package/ios/NotifeeCore/NotifeeCoreUtil.m +533 -9
  35. package/ios/RNNotifee/NotifeeApiModule.mm +2 -2
  36. package/package.json +1 -1
  37. package/server/README.md +4 -4
  38. package/src/types/Module.ts +7 -7
  39. package/src/types/Notification.ts +1 -1
  40. package/src/types/NotificationIOS.ts +43 -28
  41. package/src/types/Trigger.ts +45 -1
  42. package/src/validators/validateIOSCategory.ts +4 -2
  43. package/src/validators/validateTrigger.ts +62 -0
  44. package/src/version.ts +1 -1
@@ -86,10 +86,10 @@ export default function validateIOSCategory(category) {
86
86
  if (!isArray(category.intentIdentifiers)) {
87
87
  throw new Error("'category.intentIdentifiers' expected an array value.");
88
88
  }
89
- const identifiers = Object.values(IOSIntentIdentifier);
89
+ const identifiers = Object.values(IOSIntentIdentifier).filter((identifier) => typeof identifier === 'number');
90
90
  for (let i = 0; i < category.intentIdentifiers.length; i++) {
91
91
  const intentIdentifier = category.intentIdentifiers[i];
92
- if (!identifiers.includes(intentIdentifier)) {
92
+ if (typeof intentIdentifier !== 'number' || !identifiers.includes(intentIdentifier)) {
93
93
  throw new Error(`'category.intentIdentifiers' unexpected intentIdentifier "${intentIdentifier}" at array index "${i}".`);
94
94
  }
95
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validateIOSCategory.js","sourceRoot":"","sources":["../../src/validators/validateIOSCategory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateIOSCategory.js","sourceRoot":"","sources":["../../src/validators/validateIOSCategory.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AAEpE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,QAAiC;IAEjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,cAAc;IACd,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,GAAG,GAA4B;QACnC,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,KAAK;QACxB,uBAAuB,EAAE,KAAK;QAC9B,0BAA0B,EAAE,KAAK;KAClC,CAAC;IAEF;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,GAAG,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,yBAAyB,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,GAAG,CAAC,uBAAuB,GAAG,QAAQ,CAAC,uBAAuB,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,4BAA4B,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,GAAG,CAAC,0BAA0B,GAAG,QAAQ,CAAC,0BAA0B,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,+BAA+B,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QAED,GAAG,CAAC,6BAA6B,GAAG,QAAQ,CAAC,6BAA6B,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAC3D,CAAC,UAAU,EAAqC,EAAE,CAAC,OAAO,UAAU,KAAK,QAAQ,CAClF,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAEvD,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACpF,MAAM,IAAI,KAAK,CACb,6DAA6D,gBAAgB,qBAAqB,CAAC,IAAI,CACxG,CAAC;YACJ,CAAC;QACH,CAAC;QAED,GAAG,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,OAAO,GAAoC,EAAE,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,OAAO,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Copyright (c) 2016-present Invertase Limited
3
3
  */
4
- import { objectHasProperty, isNumber, isObject, isValidEnum, isUndefined, isBoolean, } from '../utils';
4
+ import { objectHasProperty, isNumber, isObject, isValidEnum, isUndefined, isBoolean, isAndroid, } from '../utils';
5
5
  import { TimeUnit, RepeatFrequency, TriggerType, AlarmType, } from '../types/Trigger';
6
6
  const MINIMUM_INTERVAL = 15;
7
7
  function isMinimumInterval(interval, timeUnit) {
@@ -30,10 +30,26 @@ export default function validateTrigger(trigger) {
30
30
  throw new Error('Unknown trigger type');
31
31
  }
32
32
  }
33
+ // Smallest plausible epoch-ms value for a future trigger. 1e12 ms ≈ Sep 2001;
34
+ // anything smaller is almost certainly the wrong unit (seconds-since-epoch,
35
+ // or a Date.getDate() day-of-month). We intercept the three common shapes
36
+ // and emit targeted hints — see upstream invertase/notifee#872 for the
37
+ // year-after-year UX pattern this guards against.
38
+ const MIN_PLAUSIBLE_EPOCH_MS = 1e12;
39
+ const MIN_PLAUSIBLE_EPOCH_SECONDS = 1e9;
33
40
  function validateTimestampTrigger(trigger) {
34
41
  if (!isNumber(trigger.timestamp)) {
35
42
  throw new Error("'trigger.timestamp' expected a number value.");
36
43
  }
44
+ if (trigger.timestamp < MIN_PLAUSIBLE_EPOCH_MS) {
45
+ if (trigger.timestamp >= 1 && trigger.timestamp <= 31) {
46
+ throw new Error(`'trigger.timestamp' looks like a day-of-month (${trigger.timestamp}). Did you mean \`date.getTime()\` instead of \`date.getDate()\`?`);
47
+ }
48
+ if (trigger.timestamp >= MIN_PLAUSIBLE_EPOCH_SECONDS) {
49
+ throw new Error(`'trigger.timestamp' looks like seconds since epoch (${trigger.timestamp}). Notifee expects milliseconds — multiply by 1000, or use \`Date.now()\` / \`date.getTime()\`.`);
50
+ }
51
+ throw new Error(`'trigger.timestamp' (${trigger.timestamp}) is too small to be a valid epoch millisecond value. Use \`Date.now()\` or \`someDate.getTime()\`.`);
52
+ }
37
53
  const now = Date.now();
38
54
  if (trigger.timestamp <= now) {
39
55
  throw new Error("'trigger.timestamp' date must be in the future.");
@@ -49,6 +65,26 @@ function validateTimestampTrigger(trigger) {
49
65
  }
50
66
  out.repeatFrequency = trigger.repeatFrequency;
51
67
  }
68
+ const hasRepeatFrequency = objectHasProperty(trigger, 'repeatFrequency') && !isUndefined(trigger.repeatFrequency);
69
+ const isRepeating = hasRepeatFrequency && trigger.repeatFrequency !== RepeatFrequency.NONE;
70
+ if (objectHasProperty(trigger, 'repeatInterval') && !isUndefined(trigger.repeatInterval)) {
71
+ if (!hasRepeatFrequency) {
72
+ throw new Error("'trigger.repeatInterval' requires a repeatFrequency value.");
73
+ }
74
+ if (trigger.repeatFrequency === RepeatFrequency.NONE) {
75
+ throw new Error("'trigger.repeatInterval' requires a repeating repeatFrequency value.");
76
+ }
77
+ if (!isNumber(trigger.repeatInterval) ||
78
+ !Number.isFinite(trigger.repeatInterval) ||
79
+ !Number.isInteger(trigger.repeatInterval) ||
80
+ trigger.repeatInterval <= 0) {
81
+ throw new Error("'trigger.repeatInterval' expected a positive integer value.");
82
+ }
83
+ out.repeatInterval = trigger.repeatInterval;
84
+ }
85
+ else if (isRepeating) {
86
+ out.repeatInterval = 1;
87
+ }
52
88
  if (objectHasProperty(trigger, 'alarmManager') && !isUndefined(trigger.alarmManager)) {
53
89
  if (isBoolean(trigger.alarmManager)) {
54
90
  if (trigger.alarmManager) {
@@ -69,6 +105,11 @@ function validateTimestampTrigger(trigger) {
69
105
  // Default to AlarmManager for reliable delivery when app is killed
70
106
  out.alarmManager = validateTimestampAlarmManager();
71
107
  }
108
+ if (isAndroid &&
109
+ trigger.alarmManager === false &&
110
+ out.repeatFrequency === RepeatFrequency.MONTHLY) {
111
+ throw new Error("'trigger.repeatFrequency' MONTHLY is not supported when 'trigger.alarmManager' is false.");
112
+ }
72
113
  return out;
73
114
  }
74
115
  function validateTimestampAlarmManager(alarmManager) {
@@ -1 +1 @@
1
- {"version":3,"file":"validateTrigger.js","sourceRoot":"","sources":["../../src/validators/validateTrigger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateTrigger.js","sourceRoot":"","sources":["../../src/validators/validateTrigger.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "10.0.0";
1
+ export declare const version = "10.2.0";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '10.0.0';
2
+ export const version = '10.2.0';
3
3
  //# sourceMappingURL=version.js.map
@@ -18,6 +18,11 @@
18
18
  #import <UIKit/UIKit.h>
19
19
  #import "NotifeeCore+NSNotificationCenter.h"
20
20
  #import "NotifeeCore+UNUserNotificationCenter.h"
21
+ #import "NotifeeCore.h"
22
+
23
+ @interface NotifeeCore (RollingTimestampTopUp)
24
+ + (void)topUpRollingTimestampTriggersWithCompletion:(void (^)(NSError *error))completion;
25
+ @end
21
26
 
22
27
  @implementation NotifeeCoreNSNotificationCenter
23
28
 
@@ -42,6 +47,11 @@
42
47
  selector:@selector(application_onDidFinishLaunchingNotification:)
43
48
  name:UIApplicationDidFinishLaunchingNotification
44
49
  object:nil];
50
+ [[NSNotificationCenter defaultCenter]
51
+ addObserver:strongSelf
52
+ selector:@selector(application_didBecomeActiveNotification:)
53
+ name:UIApplicationDidBecomeActiveNotification
54
+ object:nil];
45
55
  [[NSNotificationCenter defaultCenter]
46
56
  addObserver:strongSelf
47
57
  selector:@selector(messaging_didReceiveRemoteNotification:)
@@ -58,21 +68,21 @@
58
68
  #pragma mark Application Notifications
59
69
 
60
70
  - (void)application_onDidFinishLaunchingNotification:(nonnull NSNotification *)notification {
61
- #pragma clang diagnostic push
62
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
63
- // UIApplicationLaunchOptionsLocalNotificationKey is deprecated since iOS 10.
64
- // On modern iOS, initial notification is delivered via didReceiveNotificationResponse:
65
- // which sets _initialNotification and _notificationOpenedAppID directly.
66
- // This legacy path only works for UILocalNotification (pre-iOS 10).
67
- UILocalNotification *launchNotification =
68
- (UILocalNotification *)notification.userInfo[UIApplicationLaunchOptionsLocalNotificationKey];
69
- [[NotifeeCoreUNUserNotificationCenter instance]
70
- onDidFinishLaunchingNotification:launchNotification.userInfo];
71
+ [[NotifeeCoreUNUserNotificationCenter instance] markInitialNotificationGathered];
71
72
  [[NotifeeCoreUNUserNotificationCenter instance] getInitialNotification];
72
73
 
73
74
  [[NotifeeCoreUNUserNotificationCenter instance] observe];
74
75
  }
75
76
 
77
+ - (void)application_didBecomeActiveNotification:(nonnull NSNotification *)notification {
78
+ [NotifeeCore topUpRollingTimestampTriggersWithCompletion:^(NSError *error) {
79
+ if (error != nil) {
80
+ NSLog(@"NotifeeCore: Failed to top up rolling timestamp triggers after app became active: %@",
81
+ error);
82
+ }
83
+ }];
84
+ }
85
+
76
86
  - (void)messaging_didReceiveRemoteNotification:(nonnull NSNotification *)notification {
77
87
  // Intentionally empty: remote notifications are handled via
78
88
  // UNUserNotificationCenterDelegate (willPresentNotification:,
@@ -30,7 +30,6 @@ NS_ASSUME_NONNULL_BEGIN
30
30
  @property(strong, nullable) NSDictionary *initialNotification;
31
31
  @property bool initialNotificationGathered;
32
32
  @property(nullable) notifeeMethodNSDictionaryBlock initialNotificationBlock;
33
- @property NSString *initialNoticationID;
34
33
  @property NSString *notificationOpenedAppID;
35
34
 
36
35
  + (_Nonnull instancetype)instance;
@@ -39,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
39
38
 
40
39
  - (nullable NSDictionary *)getInitialNotification;
41
40
 
42
- - (void)onDidFinishLaunchingNotification:(NSDictionary *)notification;
41
+ - (void)markInitialNotificationGathered;
43
42
 
44
43
  @end
45
44
 
@@ -17,9 +17,14 @@
17
17
 
18
18
  #import "NotifeeCore+UNUserNotificationCenter.h"
19
19
 
20
+ #import "NotifeeCore.h"
20
21
  #import "NotifeeCoreDelegateHolder.h"
21
22
  #import "NotifeeCoreUtil.h"
22
23
 
24
+ @interface NotifeeCore (RollingTimestampTopUp)
25
+ + (void)topUpRollingTimestampTriggersWithCompletion:(void (^)(NSError *error))completion;
26
+ @end
27
+
23
28
  @implementation NotifeeCoreUNUserNotificationCenter
24
29
 
25
30
  struct {
@@ -63,12 +68,7 @@ struct {
63
68
  });
64
69
  }
65
70
 
66
- - (void)onDidFinishLaunchingNotification:(nonnull NSDictionary *)notifUserInfo {
67
- if (notifUserInfo != nil) {
68
- NSDictionary *notifeeNotification = notifUserInfo[kNotifeeUserInfoNotification];
69
- _initialNoticationID = notifeeNotification[@"id"];
70
- }
71
-
71
+ - (void)markInitialNotificationGathered {
72
72
  _initialNotificationGathered = YES;
73
73
  }
74
74
 
@@ -89,6 +89,24 @@ struct {
89
89
  return nil;
90
90
  }
91
91
 
92
+ - (BOOL)isRollingTimestampNotificationRequest:(UNNotificationRequest *)request {
93
+ if ([NotifeeCoreUtil isRollingInternalNotificationId:request.identifier]) {
94
+ return YES;
95
+ }
96
+
97
+ NSDictionary *trigger = request.content.userInfo[kNotifeeUserInfoTrigger];
98
+ return [NotifeeCoreUtil isRollingTimestampTrigger:trigger];
99
+ }
100
+
101
+ - (void)topUpRollingTimestampTriggersForLifecycleEvent:(NSString *)eventName {
102
+ [NotifeeCore topUpRollingTimestampTriggersWithCompletion:^(NSError *error) {
103
+ if (error != nil) {
104
+ NSLog(@"NotifeeCore: Failed to top up rolling timestamp triggers after %@: %@", eventName,
105
+ error);
106
+ }
107
+ }];
108
+ }
109
+
92
110
  #pragma mark - UNUserNotificationCenter Delegate Methods
93
111
 
94
112
  // The method will be called on the delegate only if the application is in the
@@ -103,6 +121,8 @@ struct {
103
121
  (void (^)(UNNotificationPresentationOptions options))completionHandler {
104
122
  NSDictionary *notifeeNotification =
105
123
  notification.request.content.userInfo[kNotifeeUserInfoNotification];
124
+ BOOL isRollingTimestampNotification =
125
+ [self isRollingTimestampNotificationRequest:notification.request];
106
126
 
107
127
  // we only care about notifications created through notifee
108
128
  if (notifeeNotification != nil) {
@@ -127,25 +147,16 @@ struct {
127
147
  // if list or banner is true, ignore alert property
128
148
  if (banner || list) {
129
149
  if (banner) {
130
- if (@available(iOS 14, *)) {
131
- presentationOptions |= UNNotificationPresentationOptionBanner;
132
- } else {
133
- // for iOS 13 we need to set alert
134
- presentationOptions |= UNNotificationPresentationOptionAlert;
135
- }
150
+ presentationOptions |= UNNotificationPresentationOptionBanner;
136
151
  }
137
152
 
138
153
  if (list) {
139
- if (@available(iOS 14, *)) {
140
- presentationOptions |= UNNotificationPresentationOptionList;
141
- } else {
142
- // for iOS 13 we need to set alert
143
- presentationOptions |= UNNotificationPresentationOptionAlert;
144
- }
154
+ presentationOptions |= UNNotificationPresentationOptionList;
145
155
  }
146
156
  } else if (alert) {
147
157
  // TODO: remove alert once it has been fully removed from the notifee API
148
- presentationOptions |= UNNotificationPresentationOptionAlert;
158
+ presentationOptions |=
159
+ UNNotificationPresentationOptionBanner | UNNotificationPresentationOptionList;
149
160
  }
150
161
 
151
162
  // Emit DELIVERED for every Notifee-owned notification presented in foreground.
@@ -160,6 +171,9 @@ struct {
160
171
  }];
161
172
 
162
173
  completionHandler(presentationOptions);
174
+ if (isRollingTimestampNotification) {
175
+ [self topUpRollingTimestampTriggersForLifecycleEvent:@"foreground delivery"];
176
+ }
163
177
 
164
178
  } else if (_originalDelegate != nil && originalUNCDelegateRespondsTo.willPresentNotification) {
165
179
  [_originalDelegate userNotificationCenter:center
@@ -174,15 +188,9 @@ struct {
174
188
  // @react-native-firebase/messaging). Fall back to the platform default
175
189
  // presentation options instead so the system shows the notification as it
176
190
  // would if Notifee had not installed a delegate at all.
177
- if (@available(iOS 14.0, *)) {
178
- completionHandler(
179
- UNNotificationPresentationOptionBanner | UNNotificationPresentationOptionSound |
180
- UNNotificationPresentationOptionList | UNNotificationPresentationOptionBadge);
181
- } else {
182
- completionHandler(UNNotificationPresentationOptionAlert |
183
- UNNotificationPresentationOptionSound |
184
- UNNotificationPresentationOptionBadge);
185
- }
191
+ completionHandler(UNNotificationPresentationOptionBanner |
192
+ UNNotificationPresentationOptionSound | UNNotificationPresentationOptionList |
193
+ UNNotificationPresentationOptionBadge);
186
194
  }
187
195
  }
188
196
 
@@ -195,6 +203,8 @@ struct {
195
203
  withCompletionHandler:(void (^)(void))completionHandler {
196
204
  NSDictionary *notifeeNotification =
197
205
  response.notification.request.content.userInfo[kNotifeeUserInfoNotification];
206
+ BOOL isRollingTimestampNotification =
207
+ [self isRollingTimestampNotificationRequest:response.notification.request];
198
208
 
199
209
  _notificationOpenedAppID = notifeeNotification[@"id"];
200
210
 
@@ -234,6 +244,9 @@ struct {
234
244
  }
235
245
  }];
236
246
  completionHandler();
247
+ if (isRollingTimestampNotification) {
248
+ [self topUpRollingTimestampTriggersForLifecycleEvent:@"notification response"];
249
+ }
237
250
  return;
238
251
  }
239
252
 
@@ -272,16 +285,12 @@ struct {
272
285
  // store notification for getInitialNotification
273
286
  _initialNotification = [eventDetail copy];
274
287
 
275
- // post PRESS/ACTION_PRESS event
276
- // Set is initial notification to true
277
- if (_notificationOpenedAppID != nil && _initialNoticationID != nil &&
278
- [_initialNoticationID isEqualToString:_notificationOpenedAppID]) {
279
- eventDetail[@"initialNotification"] = @1;
280
- }
281
-
282
288
  [[NotifeeCoreDelegateHolder instance] didReceiveNotifeeCoreEvent:event];
283
289
 
284
290
  completionHandler();
291
+ if (isRollingTimestampNotification) {
292
+ [self topUpRollingTimestampTriggersForLifecycleEvent:@"notification response"];
293
+ }
285
294
  } else {
286
295
  // Defensive: parseUNNotificationRequest: currently never returns nil,
287
296
  // but if it did, the completionHandler contract must still be honored.