react-native-notify-kit 10.7.1 → 10.8.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/android/src/main/java/app/notifee/core/ForegroundService.java +408 -103
  2. package/android/src/test/java/app/notifee/core/ForegroundServiceTest.java +1761 -44
  3. package/android/src/test/java/app/notifee/core/NotificationManagerActionRoutingTest.java +37 -0
  4. package/dist/fcm/parseFcmPayload.d.ts +1 -0
  5. package/dist/fcm/parseFcmPayload.js.map +1 -1
  6. package/dist/fcm/reconstructNotification.js +96 -8
  7. package/dist/fcm/reconstructNotification.js.map +1 -1
  8. package/dist/validators/validateAndroidPressAction.js +3 -0
  9. package/dist/validators/validateAndroidPressAction.js.map +1 -1
  10. package/dist/validators/validateIOSNotification.js +5 -2
  11. package/dist/validators/validateIOSNotification.js.map +1 -1
  12. package/dist/version.d.ts +1 -1
  13. package/dist/version.js +1 -1
  14. package/ios/NotifeeCore/NotifeeCore.m +36 -3
  15. package/ios/NotifeeCore/NotifeeCoreExtensionHelper.m +82 -3
  16. package/ios/NotifeeCore/NotifeeCoreFcmIdentity.h +91 -0
  17. package/package.json +1 -1
  18. package/server/README.md +5 -3
  19. package/server/dist/buildPayload.d.ts.map +1 -1
  20. package/server/dist/buildPayload.js +2 -0
  21. package/server/dist/buildPayload.js.map +1 -1
  22. package/server/dist/ios.d.ts.map +1 -1
  23. package/server/dist/ios.js +8 -1
  24. package/server/dist/ios.js.map +1 -1
  25. package/server/dist/serialize.d.ts +2 -0
  26. package/server/dist/serialize.d.ts.map +1 -1
  27. package/server/dist/serialize.js +6 -0
  28. package/server/dist/serialize.js.map +1 -1
  29. package/server/dist/types.d.ts +1 -1
  30. package/server/dist/types.d.ts.map +1 -1
  31. package/server/dist/validation.d.ts.map +1 -1
  32. package/server/dist/validation.js +160 -6
  33. package/server/dist/validation.js.map +1 -1
  34. package/server/src/buildPayload.ts +2 -0
  35. package/server/src/ios.ts +8 -1
  36. package/server/src/serialize.ts +8 -0
  37. package/server/src/types.ts +1 -0
  38. package/server/src/validation.ts +187 -6
  39. package/src/fcm/parseFcmPayload.ts +1 -0
  40. package/src/fcm/reconstructNotification.ts +105 -10
  41. package/src/internal/fcmContract.d.ts +57 -12
  42. package/src/validators/validateAndroidPressAction.ts +4 -0
  43. package/src/validators/validateIOSNotification.ts +7 -2
  44. package/src/version.ts +1 -1
@@ -21,6 +21,7 @@ import static app.notifee.core.event.NotificationEvent.TYPE_ACTION_PRESS;
21
21
  import static org.junit.Assert.assertEquals;
22
22
  import static org.junit.Assert.assertNotNull;
23
23
  import static org.junit.Assert.assertTrue;
24
+ import static org.mockito.Mockito.mock;
24
25
 
25
26
  import android.Manifest;
26
27
  import android.app.Activity;
@@ -34,10 +35,13 @@ import android.content.pm.ActivityInfo;
34
35
  import android.content.pm.ResolveInfo;
35
36
  import android.os.Build;
36
37
  import android.os.Bundle;
38
+ import androidx.work.impl.WorkManagerImpl;
37
39
  import app.notifee.core.event.MainComponentEvent;
38
40
  import app.notifee.core.model.NotificationModel;
39
41
  import com.google.common.util.concurrent.ListenableFuture;
40
42
  import java.util.ArrayList;
43
+ import java.util.Collections;
44
+ import java.util.List;
41
45
  import java.util.concurrent.TimeUnit;
42
46
  import org.junit.After;
43
47
  import org.junit.Before;
@@ -82,6 +86,39 @@ public class NotificationManagerActionRoutingTest {
82
86
  ShadowPendingIntent.reset();
83
87
  }
84
88
 
89
+ @Test
90
+ public void sameLogicalId_isNativeDisplayReadbackAndCancelIdentity() throws Exception {
91
+ String logicalId = "logical-42";
92
+ NotificationModel first =
93
+ buildNotificationModel(logicalId, buildPressAction("open", null, null));
94
+ NotificationModel second =
95
+ buildNotificationModel(logicalId, buildPressAction("reply", null, null));
96
+
97
+ displayNotification(first);
98
+ displayNotification(second);
99
+
100
+ android.app.NotificationManager nativeManager =
101
+ (android.app.NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
102
+ assertEquals(1, nativeManager.getActiveNotifications().length);
103
+ assertEquals(logicalId.hashCode(), nativeManager.getActiveNotifications()[0].getId());
104
+
105
+ List<Bundle> displayed =
106
+ NotificationManager.getDisplayedNotifications().get(5, TimeUnit.SECONDS);
107
+ assertEquals(1, displayed.size());
108
+ assertEquals(logicalId, displayed.get(0).getString("id"));
109
+ assertEquals(logicalId, displayed.get(0).getBundle("notification").getString("id"));
110
+
111
+ WorkManagerImpl.setDelegate(mock(WorkManagerImpl.class));
112
+ try {
113
+ NotificationManager.cancelAllNotificationsWithIds(
114
+ 1, Collections.singletonList(logicalId), null)
115
+ .get(5, TimeUnit.SECONDS);
116
+ assertEquals(0, nativeManager.getActiveNotifications().length);
117
+ } finally {
118
+ WorkManagerImpl.setDelegate(null);
119
+ }
120
+ }
121
+
85
122
  @Test
86
123
  public void displayNotification_android12PlusNoLaunchAction_routesToReceiverService()
87
124
  throws Exception {
@@ -1,6 +1,7 @@
1
1
  export type ParsedPayload = {
2
2
  _v?: number;
3
3
  title?: string;
4
+ subtitle?: string;
4
5
  body?: string;
5
6
  android?: Record<string, unknown>;
6
7
  ios?: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"parseFcmPayload.js","sourceRoot":"","sources":["../../src/fcm/parseFcmPayload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAW3C;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwC;IACtE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,qCAAqC,MAAM,mCAAmC,CACxF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,gFAAgF,CAC1F,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,iDAAiD;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,4BAA4B,UAAU,gEAAgE,CAChH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"parseFcmPayload.js","sourceRoot":"","sources":["../../src/fcm/parseFcmPayload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAY3C;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwC;IACtE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,qCAAqC,MAAM,mCAAmC,CACxF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,gFAAgF,CAC1F,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,iDAAiD;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,4BAA4B,UAAU,gEAAgE,CAChH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -12,6 +12,41 @@ const STYLE_TYPE_MAP = {
12
12
  BIG_TEXT: AndroidStyle.BIGTEXT,
13
13
  BIG_PICTURE: AndroidStyle.BIGPICTURE,
14
14
  };
15
+ const ANDROID_INPUT_KEYS = new Set([
16
+ 'allowFreeFormInput',
17
+ 'allowGeneratedReplies',
18
+ 'choices',
19
+ 'editableChoices',
20
+ 'placeholder',
21
+ ]);
22
+ function assertFcmPressAction(value, path) {
23
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
24
+ throw new Error(`${PREFIX} ${path} must be an object`);
25
+ }
26
+ const pressAction = value;
27
+ if (typeof pressAction.id !== 'string' || pressAction.id.length === 0) {
28
+ throw new Error(`${PREFIX} ${path}.id must be a non-empty string`);
29
+ }
30
+ if (pressAction.id === '__NOTIFEE_OPT_OUT__') {
31
+ throw new Error(`${PREFIX} ${path}.id is reserved for explicit null`);
32
+ }
33
+ if (pressAction.launchActivity !== undefined && typeof pressAction.launchActivity !== 'string') {
34
+ throw new Error(`${PREFIX} ${path}.launchActivity must be a string`);
35
+ }
36
+ if (pressAction.mainComponent !== undefined && typeof pressAction.mainComponent !== 'string') {
37
+ throw new Error(`${PREFIX} ${path}.mainComponent must be a string`);
38
+ }
39
+ if (pressAction.launchActivityFlags !== undefined) {
40
+ if (!Array.isArray(pressAction.launchActivityFlags)) {
41
+ throw new Error(`${PREFIX} ${path}.launchActivityFlags must be an array`);
42
+ }
43
+ for (const flag of pressAction.launchActivityFlags) {
44
+ if (typeof flag !== 'number' || !Number.isInteger(flag) || flag < 0 || flag > 20) {
45
+ throw new Error(`${PREFIX} ${path}.launchActivityFlags contains an invalid flag`);
46
+ }
47
+ }
48
+ }
49
+ }
15
50
  /**
16
51
  * Reconstructs a {@link Notification} object suitable for
17
52
  * `displayNotification` from the parsed FCM payload + config defaults.
@@ -27,6 +62,9 @@ export function reconstructNotification(parsed, remoteMessage, config) {
27
62
  title,
28
63
  body,
29
64
  };
65
+ if (typeof parsed?.subtitle === 'string') {
66
+ notification.subtitle = parsed.subtitle;
67
+ }
30
68
  if (Object.keys(data).length > 0) {
31
69
  notification.data = data;
32
70
  }
@@ -81,9 +119,13 @@ function buildAndroidConfig(raw, config) {
81
119
  if (typeof channelId === 'string') {
82
120
  android.channelId = channelId;
83
121
  }
84
- // pressAction: payload > config default
85
- const pressAction = raw?.pressAction ?? config.defaultPressAction;
86
- if (pressAction && typeof pressAction === 'object') {
122
+ // Explicit null opts out of the body tap; only absence uses the configured default.
123
+ const pressAction = raw?.pressAction === undefined ? config.defaultPressAction : raw.pressAction;
124
+ if (pressAction === null) {
125
+ android.pressAction = null;
126
+ }
127
+ else if (pressAction !== undefined) {
128
+ assertFcmPressAction(pressAction, 'android.pressAction');
87
129
  android.pressAction = pressAction;
88
130
  }
89
131
  // Direct string copies
@@ -91,6 +133,9 @@ function buildAndroidConfig(raw, config) {
91
133
  android.smallIcon = raw.smallIcon;
92
134
  if (typeof raw?.largeIcon === 'string')
93
135
  android.largeIcon = raw.largeIcon;
136
+ if (typeof raw?.circularLargeIcon === 'boolean') {
137
+ android.circularLargeIcon = raw.circularLargeIcon;
138
+ }
94
139
  if (typeof raw?.color === 'string')
95
140
  android.color = raw.color;
96
141
  // Timestamp fields — preserve only values accepted by the canonical Android validator
@@ -99,9 +144,39 @@ function buildAndroidConfig(raw, config) {
99
144
  if (typeof raw?.timestamp === 'number' && isValidTimestamp(raw.timestamp)) {
100
145
  android.timestamp = raw.timestamp;
101
146
  }
102
- // Actions array — pass through (trust server validation)
103
- if (Array.isArray(raw?.actions)) {
104
- android.actions = raw.actions;
147
+ // Legacy input:false means no reply. Other malformed inputs must fail here:
148
+ // the normal validator accepts some of them as a default RemoteInput.
149
+ if (raw?.actions !== undefined) {
150
+ if (!Array.isArray(raw.actions)) {
151
+ throw new Error(`${PREFIX} android.actions must be an array`);
152
+ }
153
+ android.actions = raw.actions.map((action, index) => {
154
+ if (action === null || typeof action !== 'object' || Array.isArray(action)) {
155
+ return action;
156
+ }
157
+ if (action.pressAction !== undefined) {
158
+ assertFcmPressAction(action.pressAction, `android.actions[${index}].pressAction`);
159
+ }
160
+ const input = action.input;
161
+ if (input === false) {
162
+ const withoutInput = { ...action };
163
+ delete withoutInput.input;
164
+ return withoutInput;
165
+ }
166
+ if (input !== undefined &&
167
+ input !== true &&
168
+ (input === null || typeof input !== 'object' || Array.isArray(input))) {
169
+ throw new Error(`${PREFIX} android.actions[${index}].input is invalid`);
170
+ }
171
+ if (input !== undefined && input !== true) {
172
+ for (const key of Object.keys(input)) {
173
+ if (!ANDROID_INPUT_KEYS.has(key)) {
174
+ throw new Error(`${PREFIX} android.actions[${index}].input.${key} is unsupported`);
175
+ }
176
+ }
177
+ }
178
+ return action;
179
+ });
105
180
  }
106
181
  // Style — enum mapping with defense-in-depth for unknown types
107
182
  if (raw?.style && typeof raw.style === 'object') {
@@ -110,10 +185,23 @@ function buildAndroidConfig(raw, config) {
110
185
  const mappedType = STYLE_TYPE_MAP[style.type];
111
186
  if (mappedType !== undefined) {
112
187
  if (mappedType === AndroidStyle.BIGTEXT && typeof style.text === 'string') {
113
- android.style = { type: AndroidStyle.BIGTEXT, text: style.text };
188
+ android.style = {
189
+ type: AndroidStyle.BIGTEXT,
190
+ text: style.text,
191
+ ...(typeof style.title === 'string' ? { title: style.title } : {}),
192
+ ...(typeof style.summary === 'string' ? { summary: style.summary } : {}),
193
+ };
114
194
  }
115
195
  else if (mappedType === AndroidStyle.BIGPICTURE && typeof style.picture === 'string') {
116
- android.style = { type: AndroidStyle.BIGPICTURE, picture: style.picture };
196
+ android.style = {
197
+ type: AndroidStyle.BIGPICTURE,
198
+ picture: style.picture,
199
+ ...(typeof style.title === 'string' ? { title: style.title } : {}),
200
+ ...(typeof style.summary === 'string' ? { summary: style.summary } : {}),
201
+ ...(style.largeIcon === null || typeof style.largeIcon === 'string'
202
+ ? { largeIcon: style.largeIcon }
203
+ : {}),
204
+ };
117
205
  }
118
206
  else {
119
207
  const field = mappedType === AndroidStyle.BIGTEXT ? 'text' : 'picture';
@@ -1 +1 @@
1
- {"version":3,"file":"reconstructNotification.js","sourceRoot":"","sources":["../../src/fcm/reconstructNotification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAuB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAC3C,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;AAExE,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;AAE9F,MAAM,cAAc,GAA6C;IAC/D,QAAQ,EAAE,YAAY,CAAC,OAAO;IAC9B,WAAW,EAAE,YAAY,CAAC,UAAU;CACrC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA4B,EAC5B,aAA+B,EAC/B,MAAiB;IAEjB,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,KAAK,GACT,MAAM,EAAE,KAAK,IAAI,aAAa,CAAC,YAAY,EAAE,KAAK,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IAExF,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,aAAa,CAAC,YAAY,EAAE,IAAI,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;IAEhG,MAAM,EAAE,GACJ,MAAyC,EAAE,EAAyB;QACtE,aAAa,CAAC,SAAS,CAAC;IAE1B,MAAM,YAAY,GAAiB;QACjC,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QAClD,KAAK;QACL,IAAI;KACL,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC3F,YAAY,CAAC,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,KAAK,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;QACzB,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,SAAS,WAAW,CAAC,OAA2C;IAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,sDAAsD;IACtD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAC5C,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAA2B,CAAC;YACzE,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,gEAAgE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,SAAS,kBAAkB,CACzB,GAAwC,EACxC,MAAiB;IAEjB,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,sCAAsC;IACtC,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAC5D,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAChC,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,GAAG,EAAE,WAAW,IAAI,MAAM,CAAC,kBAAkB,CAAC;IAClE,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO,CAAC,WAAW,GAAG,WAAiD,CAAC;IAC1E,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,GAAG,EAAE,SAAS,KAAK,QAAQ;QAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAC1E,IAAI,OAAO,GAAG,EAAE,SAAS,KAAK,QAAQ;QAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAC1E,IAAI,OAAO,GAAG,EAAE,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAE9D,sFAAsF;IACtF,IAAI,OAAO,GAAG,EAAE,aAAa,KAAK,SAAS;QAAE,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;IACvF,IAAI,OAAO,GAAG,EAAE,SAAS,KAAK,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,yDAAyD;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAyC,CAAC;IAClE,CAAC;IAED,+DAA+D;IAC/D,IAAI,GAAG,EAAE,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAA2D,CAAC;QAC9E,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,UAAU,KAAK,YAAY,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1E,OAAO,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnE,CAAC;qBAAM,IAAI,UAAU,KAAK,YAAY,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACvF,OAAO,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,UAAU,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;oBACvE,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,wBAAwB,KAAK,CAAC,IAAI,2BAA2B,KAAK,iDAAiD,CAC7H,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,gCAAgC,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,SAAS,cAAc,CAAC,GAA4B;IAClD,MAAM,GAAG,GAAoB,EAAE,CAAC;IAEhC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACzD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IACxE,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAElE,0DAA0D;IAC1D,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;QAC9C,IAAI,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAyD,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,mCAAmC,GAAG,CAAC,iBAAiB,aAAa,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,WAAW,GAAI,GAAG,CAAC,WAA8B;aAClD,MAAM,CAAC,CAAC,GAAG,EAAkC,EAAE;YAC9C,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACzD,MAAM,CAAC,GAAG,GAA8B,CAAC;YACzC,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,2DAA2D,CAAC,CAAC;gBACnF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,GAAG,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,MAAM,GAAiC;gBAC3C,GAAG,EAAE,GAAG,CAAC,GAAa;aACvB,CAAC;YACF,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;YAC7B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"reconstructNotification.js","sourceRoot":"","sources":["../../src/fcm/reconstructNotification.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,9 @@ export default function validateAndroidPressAction(pressAction) {
11
11
  if (!isString(pressAction.id) || pressAction.id.length === 0) {
12
12
  throw new Error("'id' expected a non-empty string value.");
13
13
  }
14
+ if (pressAction.id === '__NOTIFEE_OPT_OUT__') {
15
+ throw new Error("'id' is reserved for an explicit null pressAction.");
16
+ }
14
17
  const out = {
15
18
  id: pressAction.id,
16
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validateAndroidPressAction.js","sourceRoot":"","sources":["../../src/validators/validateAndroidPressAction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE9E,MAAM,6BAA6B,GAAG,SAAS,CAAC;AAChD,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAE7C,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,WAAoC;IAEpC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,GAAG,GAA4B;QACnC,EAAE,EAAE,WAAW,CAAC,EAAE;KACnB,CAAC;IAEF,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;IAClD,CAAC;SAAM,IAAI,WAAW,CAAC,EAAE,KAAK,0BAA0B,EAAE,CAAC;QACzD,uCAAuC;QACvC,GAAG,CAAC,cAAc,GAAG,6BAA6B,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,IAAI,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,GAAG,CAAC,mBAAmB,GAAG,WAAW,CAAC,mBAAmB,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,GAAG,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;IAChD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"validateAndroidPressAction.js","sourceRoot":"","sources":["../../src/validators/validateAndroidPressAction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE9E,MAAM,6BAA6B,GAAG,SAAS,CAAC;AAChD,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAE7C,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,WAAoC;IAEpC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,WAAW,CAAC,EAAE,KAAK,qBAAqB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,GAAG,GAA4B;QACnC,EAAE,EAAE,WAAW,CAAC,EAAE;KACnB,CAAC;IAEF,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;IAClD,CAAC;SAAM,IAAI,WAAW,CAAC,EAAE,KAAK,0BAA0B,EAAE,CAAC;QACzD,uCAAuC;QACvC,GAAG,CAAC,cAAc,GAAG,6BAA6B,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,IAAI,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,GAAG,CAAC,mBAAmB,GAAG,WAAW,CAAC,mBAAmB,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,GAAG,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;IAChD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -102,8 +102,11 @@ export default function validateIOSNotification(ios) {
102
102
  /**
103
103
  * badgeCount
104
104
  */
105
- if (objectHasProperty(ios, 'badgeCount')) {
106
- if (!isNumber(ios.badgeCount) || ios.badgeCount < 0) {
105
+ if (objectHasProperty(ios, 'badgeCount') && ios.badgeCount !== null) {
106
+ if (!isNumber(ios.badgeCount) ||
107
+ !Number.isFinite(ios.badgeCount) ||
108
+ !Number.isInteger(ios.badgeCount) ||
109
+ ios.badgeCount < 0) {
107
110
  throw new Error("'notification.ios.badgeCount' expected a number value >=0.");
108
111
  }
109
112
  out.badgeCount = ios.badgeCount;
@@ -1 +1 @@
1
- {"version":3,"file":"validateIOSNotification.js","sourceRoot":"","sources":["../../src/validators/validateIOSNotification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateIOSNotification.js","sourceRoot":"","sources":["../../src/validators/validateIOSNotification.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "10.7.1";
1
+ export declare const version = "10.8.0";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '10.7.1';
2
+ export const version = '10.8.0';
3
3
  //# sourceMappingURL=version.js.map
@@ -24,6 +24,7 @@
24
24
  #import "NotifeeCore.h"
25
25
  #import "NotifeeCoreDelegateHolder.h"
26
26
  #import "NotifeeCoreExtensionHelper.h"
27
+ #import "NotifeeCoreFcmIdentity.h"
27
28
  #import "NotifeeCoreUtil.h"
28
29
 
29
30
  @interface NotifeeCoreUNUserNotificationCenter (Rechain)
@@ -144,6 +145,11 @@ typedef NS_ENUM(NSInteger, NotifeeCoreRollingErrorCode) {
144
145
  return rollingPublicId;
145
146
  }
146
147
 
148
+ NSString *fcmLogicalId = NotifeeFcmLogicalIdForRequest(request);
149
+ if (fcmLogicalId != nil) {
150
+ return fcmLogicalId;
151
+ }
152
+
147
153
  NSString *identifier = request.identifier;
148
154
  if ([self isPotentialRollingInternalNotificationId:identifier]) {
149
155
  return nil;
@@ -193,6 +199,14 @@ typedef NS_ENUM(NSInteger, NotifeeCoreRollingErrorCode) {
193
199
  deliveredNotifications:(NSArray<UNNotification *> *)deliveredNotifications
194
200
  record:(NSDictionary *)record {
195
201
  NSMutableOrderedSet<NSString *> *identifiers = [NSMutableOrderedSet orderedSet];
202
+ NSMutableArray<UNNotificationRequest *> *requests = [NSMutableArray array];
203
+ for (UNNotification *notification in deliveredNotifications) {
204
+ [requests addObject:notification.request];
205
+ }
206
+ for (NSString *physicalId in NotifeeFcmIdentifiersForLogicalId(requests, publicId)) {
207
+ [self addString:physicalId toOrderedSet:identifiers];
208
+ }
209
+ BOOL removeDirectIdentifier = NotifeeShouldRemoveDirectIdentifierForLogicalId(requests, publicId);
196
210
 
197
211
  NSArray *scheduledIds = record[@"scheduledIds"];
198
212
  if ([scheduledIds isKindOfClass:NSArray.class]) {
@@ -204,7 +218,7 @@ typedef NS_ENUM(NSInteger, NotifeeCoreRollingErrorCode) {
204
218
  for (UNNotification *notification in deliveredNotifications) {
205
219
  UNNotificationRequest *request = notification.request;
206
220
  NSString *identifier = request.identifier;
207
- if ([identifier isEqualToString:publicId]) {
221
+ if (removeDirectIdentifier && [identifier isEqualToString:publicId]) {
208
222
  [self addString:identifier toOrderedSet:identifiers];
209
223
  continue;
210
224
  }
@@ -873,7 +887,13 @@ typedef NS_ENUM(NSInteger, NotifeeCoreRollingErrorCode) {
873
887
  [self rollingDeliveredIdentifiersForPublicId:notificationId
874
888
  deliveredNotifications:deliveredNotifications
875
889
  record:record];
876
- [self addString:notificationId toOrderedSet:deliveredIdentifiersToRemove];
890
+ NSMutableArray<UNNotificationRequest *> *requests = [NSMutableArray array];
891
+ for (UNNotification *notification in deliveredNotifications) {
892
+ [requests addObject:notification.request];
893
+ }
894
+ if (NotifeeShouldRemoveDirectIdentifierForLogicalId(requests, notificationId)) {
895
+ [self addString:notificationId toOrderedSet:deliveredIdentifiersToRemove];
896
+ }
877
897
  if ([deliveredIdentifiersToRemove count] > 0) {
878
898
  [center removeDeliveredNotificationsWithIdentifiers:[deliveredIdentifiersToRemove array]];
879
899
  }
@@ -935,7 +955,13 @@ typedef NS_ENUM(NSInteger, NotifeeCoreRollingErrorCode) {
935
955
  deliveredNotifications:deliveredNotifications
936
956
  record:record];
937
957
  [deliveredIdentifiersToRemove unionOrderedSet:rollingDeliveredIdentifiers];
938
- [self addString:publicId toOrderedSet:deliveredIdentifiersToRemove];
958
+ NSMutableArray<UNNotificationRequest *> *requests = [NSMutableArray array];
959
+ for (UNNotification *notification in deliveredNotifications) {
960
+ [requests addObject:notification.request];
961
+ }
962
+ if (NotifeeShouldRemoveDirectIdentifierForLogicalId(requests, publicId)) {
963
+ [self addString:publicId toOrderedSet:deliveredIdentifiersToRemove];
964
+ }
939
965
  }
940
966
 
941
967
  if (cancelTrigger) {
@@ -1050,6 +1076,13 @@ typedef NS_ENUM(NSInteger, NotifeeCoreRollingErrorCode) {
1050
1076
  triggerNotification[@"notification"] = publicNotification;
1051
1077
  }
1052
1078
 
1079
+ NSString *fcmLogicalId = NotifeeFcmLogicalIdForRequest(request);
1080
+ if (fcmLogicalId != nil && [notification isKindOfClass:NSDictionary.class]) {
1081
+ NSMutableDictionary *publicNotification = [notification mutableCopy];
1082
+ publicNotification[@"id"] = fcmLogicalId;
1083
+ triggerNotification[@"notification"] = publicNotification;
1084
+ }
1085
+
1053
1086
  [triggerNotifications addObject:triggerNotification];
1054
1087
  }
1055
1088
  block(nil, triggerNotifications);
@@ -22,9 +22,18 @@
22
22
 
23
23
  static NSString *const kNoExtension = @"";
24
24
  static NSString *const kImagePathPrefix = @"image/";
25
+ static NSString *const kPayloadDataName = @"notifee_data";
25
26
  static NSTimeInterval const kNotifeeExtensionOrchestrationTimeoutInterval = 25.0;
26
27
  static NSTimeInterval const kNotifeeExtensionFinalizationReserveInterval = 5.0;
27
28
 
29
+ static BOOL IsFcmTransportKey(NSString *key) {
30
+ return [key isEqualToString:@"aps"] || [key isEqualToString:@"from"] ||
31
+ [key isEqualToString:@"collapse_key"] || [key isEqualToString:@"message_type"] ||
32
+ [key isEqualToString:@"message_id"] || [key isEqualToString:@"fcm_options"] ||
33
+ [key hasPrefix:@"android."] || [key hasPrefix:@"google."] || [key hasPrefix:@"gcm."] ||
34
+ [key hasPrefix:@"fcm."] || [key hasPrefix:@"notifee"];
35
+ }
36
+
28
37
  @interface NotifeeCoreUtil (NotifeeCoreExtensionHelper)
29
38
  + (INSendMessageIntent *)generateSenderIntentForCommunicationNotification:
30
39
  (NSDictionary *)communicationInfo
@@ -33,6 +42,7 @@ static NSTimeInterval const kNotifeeExtensionFinalizationReserveInterval = 5.0;
33
42
 
34
43
  @interface NotifeeCoreExtensionHelper ()
35
44
  - (NSMutableDictionary *)parseNotifeeOptions:(id)payload;
45
+ - (NSDictionary *)parseNotifeeData:(id)payload;
36
46
  - (NSTimeInterval)orchestrationTimeoutInterval;
37
47
  - (dispatch_time_t)orchestrationCurrentTime;
38
48
  - (void)scheduleOrchestrationFinalizerAtDeadline:(dispatch_time_t)deadline
@@ -96,7 +106,9 @@ static NSTimeInterval const kNotifeeExtensionFinalizationReserveInterval = 5.0;
96
106
  }
97
107
 
98
108
  - (void)populateNotificationContentWithRequest:(UNNotificationRequest *_Nullable)request {
99
- id notifeeOptionsPayload = self.modifiedContent.userInfo[kPayloadOptionsName];
109
+ NSDictionary *originalUserInfo = [self.modifiedContent.userInfo copy];
110
+ NSNumber *originalBadge = self.modifiedContent.badge;
111
+ id notifeeOptionsPayload = originalUserInfo[kPayloadOptionsName];
100
112
  if (!notifeeOptionsPayload) {
101
113
  [self deliverNotification];
102
114
  return;
@@ -109,10 +121,28 @@ static NSTimeInterval const kNotifeeExtensionFinalizationReserveInterval = 5.0;
109
121
  return;
110
122
  }
111
123
 
124
+ NSDictionary *iosOptions =
125
+ [options[@"ios"] isKindOfClass:[NSDictionary class]] ? options[@"ios"] : nil;
126
+ if (iosOptions[@"badgeCount"] == [NSNull null]) {
127
+ NSMutableDictionary *normalizedIOSOptions = [iosOptions mutableCopy];
128
+ [normalizedIOSOptions removeObjectForKey:@"badgeCount"];
129
+ options[@"ios"] = normalizedIOSOptions;
130
+ iosOptions = normalizedIOSOptions;
131
+ }
132
+
112
133
  options[@"remote"] = @YES;
113
134
 
114
- // Convert options to Notification and set defaults
115
- if (options[@"data"] == nil) {
135
+ // The server sends custom data outside notifee_options so it can share the
136
+ // same _v:1 options blob with Android. Preserve every server-supported key
137
+ // in notification.data, even when its name collides with APNs metadata.
138
+ NSDictionary *parsedData = [self.helper parseNotifeeData:originalUserInfo[kPayloadDataName]];
139
+ if (parsedData != nil) {
140
+ NSMutableDictionary *data = [options[@"data"] isKindOfClass:[NSDictionary class]]
141
+ ? [options[@"data"] mutableCopy]
142
+ : [NSMutableDictionary dictionary];
143
+ [data addEntriesFromDictionary:parsedData];
144
+ options[@"data"] = data;
145
+ } else if (options[@"data"] == nil) {
116
146
  options[@"data"] = [NSDictionary dictionary];
117
147
  }
118
148
 
@@ -130,6 +160,26 @@ static NSTimeInterval const kNotifeeExtensionFinalizationReserveInterval = 5.0;
130
160
  }
131
161
 
132
162
  self.modifiedContent = [NotifeeCore buildNotificationContent:options withTrigger:nil];
163
+
164
+ // The builder creates NotifyKit event metadata. Its user data takes legacy
165
+ // precedence over outer userInfo, while incoming APNs/FCM keys remain
166
+ // authoritative at the top level.
167
+ NSMutableDictionary *mergedUserInfo = [originalUserInfo mutableCopy];
168
+ NSDictionary *builtUserInfo = self.modifiedContent.userInfo;
169
+ for (id key in builtUserInfo) {
170
+ if ([key isKindOfClass:[NSString class]] && !IsFcmTransportKey(key) &&
171
+ ![key isEqualToString:kNotifeeUserInfoNotification] &&
172
+ ![key isEqualToString:kNotifeeUserInfoTrigger]) {
173
+ mergedUserInfo[key] = builtUserInfo[key];
174
+ }
175
+ }
176
+ mergedUserInfo[kNotifeeUserInfoNotification] = builtUserInfo[kNotifeeUserInfoNotification];
177
+ // This NSE path builds withTrigger:nil; no top-level trigger is authoritative.
178
+ [mergedUserInfo removeObjectForKey:kNotifeeUserInfoTrigger];
179
+ self.modifiedContent.userInfo = mergedUserInfo;
180
+ if (originalBadge != nil && iosOptions[@"badgeCount"] == nil) {
181
+ self.modifiedContent.badge = originalBadge;
182
+ }
133
183
  [self startOrchestrationWithOptions:options];
134
184
  }
135
185
 
@@ -438,6 +488,35 @@ static NSTimeInterval const kNotifeeExtensionFinalizationReserveInterval = 5.0;
438
488
  return nil;
439
489
  }
440
490
 
491
+ - (NSDictionary *)parseNotifeeData:(id)payload {
492
+ if (payload == nil) {
493
+ return nil;
494
+ }
495
+ if (![payload isKindOfClass:[NSString class]]) {
496
+ NSLog(@"NotifeeCoreExtensionHelper: Ignoring notifee_data because it is not a JSON string");
497
+ return @{};
498
+ }
499
+
500
+ NSData *data = [payload dataUsingEncoding:NSUTF8StringEncoding];
501
+ NSError *error = nil;
502
+ id jsonObject =
503
+ data == nil ? nil : [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
504
+ if (![jsonObject isKindOfClass:[NSDictionary class]]) {
505
+ NSLog(@"NotifeeCoreExtensionHelper: Ignoring invalid notifee_data JSON");
506
+ return @{};
507
+ }
508
+
509
+ NSMutableDictionary *customData = [NSMutableDictionary dictionary];
510
+ for (id key in jsonObject) {
511
+ id value = jsonObject[key];
512
+ if ([key isKindOfClass:[NSString class]] && [value isKindOfClass:[NSString class]] &&
513
+ ![key isEqualToString:kPayloadOptionsName] && ![key isEqualToString:kPayloadDataName]) {
514
+ customData[key] = value;
515
+ }
516
+ }
517
+ return customData;
518
+ }
519
+
441
520
  - (void)populateNotificationContent:(UNNotificationRequest *_Nullable)request
442
521
  withContent:(UNMutableNotificationContent *)content
443
522
  withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #pragma once
18
+
19
+ #import <Foundation/Foundation.h>
20
+ #import <UserNotifications/UserNotifications.h>
21
+
22
+ // The NSE stores the logical ID in NotifyKit-owned metadata. APNs owns the
23
+ // request identifier, so it must remain a separate physical identity.
24
+ static inline NSString *NotifeeFcmLogicalIdForRequest(UNNotificationRequest *request) {
25
+ if (![request.trigger isKindOfClass:UNPushNotificationTrigger.class]) {
26
+ return nil;
27
+ }
28
+ NSDictionary *userInfo = request.content.userInfo;
29
+ NSDictionary *notification = userInfo[@"__notifee_notification"];
30
+ if (![notification isKindOfClass:NSDictionary.class]) {
31
+ return nil;
32
+ }
33
+ NSNumber *remote = notification[@"remote"];
34
+ id options = userInfo[@"notifee_options"];
35
+ NSString *logicalId = notification[@"id"];
36
+ if (![remote isKindOfClass:NSNumber.class] || !remote.boolValue ||
37
+ (![options isKindOfClass:NSString.class] && ![options isKindOfClass:NSDictionary.class]) ||
38
+ ![logicalId isKindOfClass:NSString.class] || logicalId.length == 0) {
39
+ return nil;
40
+ }
41
+ return logicalId;
42
+ }
43
+
44
+ static inline NSArray<NSString *> *NotifeeFcmIdentifiersForLogicalId(
45
+ NSArray<UNNotificationRequest *> *requests, NSString *logicalId) {
46
+ NSMutableOrderedSet<NSString *> *physicalIds = [NSMutableOrderedSet orderedSet];
47
+ for (UNNotificationRequest *request in requests) {
48
+ if ([NotifeeFcmLogicalIdForRequest(request) isEqualToString:logicalId]) {
49
+ [physicalIds addObject:request.identifier];
50
+ }
51
+ }
52
+ return physicalIds.array;
53
+ }
54
+
55
+ // Preserve legacy physical-ID cancellation except when a divergent FCM logical
56
+ // ID has been resolved. In that case a foreign request whose R equals N must
57
+ // not be removed as collateral.
58
+ static inline BOOL NotifeeShouldRemoveDirectIdentifierForLogicalId(
59
+ NSArray<UNNotificationRequest *> *requests, NSString *logicalId) {
60
+ BOOL hasDivergentFcmRequest = NO;
61
+ for (UNNotificationRequest *request in requests) {
62
+ NSString *requestLogicalId = NotifeeFcmLogicalIdForRequest(request);
63
+ if ([request.identifier isEqualToString:logicalId] && requestLogicalId != nil &&
64
+ ![requestLogicalId isEqualToString:logicalId]) {
65
+ return NO;
66
+ }
67
+ if ([requestLogicalId isEqualToString:logicalId] &&
68
+ ![request.identifier isEqualToString:logicalId]) {
69
+ hasDivergentFcmRequest = YES;
70
+ break;
71
+ }
72
+ }
73
+ if (!hasDivergentFcmRequest) {
74
+ return YES;
75
+ }
76
+ for (UNNotificationRequest *request in requests) {
77
+ if (![request.identifier isEqualToString:logicalId]) {
78
+ continue;
79
+ }
80
+ NSDictionary *notification = request.content.userInfo[@"__notifee_notification"];
81
+ if (![notification isKindOfClass:NSDictionary.class]) {
82
+ continue;
83
+ }
84
+ NSString *notificationId = notification[@"id"];
85
+ if ([notificationId isKindOfClass:NSString.class] &&
86
+ [notificationId isEqualToString:logicalId]) {
87
+ return YES;
88
+ }
89
+ }
90
+ return NO;
91
+ }