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.
- package/android/src/main/java/app/notifee/core/ForegroundService.java +408 -103
- package/android/src/test/java/app/notifee/core/ForegroundServiceTest.java +1761 -44
- package/android/src/test/java/app/notifee/core/NotificationManagerActionRoutingTest.java +37 -0
- package/dist/fcm/parseFcmPayload.d.ts +1 -0
- package/dist/fcm/parseFcmPayload.js.map +1 -1
- package/dist/fcm/reconstructNotification.js +96 -8
- package/dist/fcm/reconstructNotification.js.map +1 -1
- package/dist/validators/validateAndroidPressAction.js +3 -0
- package/dist/validators/validateAndroidPressAction.js.map +1 -1
- package/dist/validators/validateIOSNotification.js +5 -2
- package/dist/validators/validateIOSNotification.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/ios/NotifeeCore/NotifeeCore.m +36 -3
- package/ios/NotifeeCore/NotifeeCoreExtensionHelper.m +82 -3
- package/ios/NotifeeCore/NotifeeCoreFcmIdentity.h +91 -0
- package/package.json +1 -1
- package/server/README.md +5 -3
- package/server/dist/buildPayload.d.ts.map +1 -1
- package/server/dist/buildPayload.js +2 -0
- package/server/dist/buildPayload.js.map +1 -1
- package/server/dist/ios.d.ts.map +1 -1
- package/server/dist/ios.js +8 -1
- package/server/dist/ios.js.map +1 -1
- package/server/dist/serialize.d.ts +2 -0
- package/server/dist/serialize.d.ts.map +1 -1
- package/server/dist/serialize.js +6 -0
- package/server/dist/serialize.js.map +1 -1
- package/server/dist/types.d.ts +1 -1
- package/server/dist/types.d.ts.map +1 -1
- package/server/dist/validation.d.ts.map +1 -1
- package/server/dist/validation.js +160 -6
- package/server/dist/validation.js.map +1 -1
- package/server/src/buildPayload.ts +2 -0
- package/server/src/ios.ts +8 -1
- package/server/src/serialize.ts +8 -0
- package/server/src/types.ts +1 -0
- package/server/src/validation.ts +187 -6
- package/src/fcm/parseFcmPayload.ts +1 -0
- package/src/fcm/reconstructNotification.ts +105 -10
- package/src/internal/fcmContract.d.ts +57 -12
- package/src/validators/validateAndroidPressAction.ts +4 -0
- package/src/validators/validateIOSNotification.ts +7 -2
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseFcmPayload.js","sourceRoot":"","sources":["../../src/fcm/parseFcmPayload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,GAAG,2BAA2B,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
|
-
//
|
|
85
|
-
const pressAction = raw?.pressAction
|
|
86
|
-
if (pressAction
|
|
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
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
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 = {
|
|
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 = {
|
|
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;
|
|
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) ||
|
|
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.
|
|
1
|
+
export declare const version = "10.8.0";
|
package/dist/version.js
CHANGED
|
@@ -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
|
-
[
|
|
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
|
-
[
|
|
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
|
-
|
|
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
|
-
//
|
|
115
|
-
|
|
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
|
+
}
|