@loyalytics/swan-react-native-sdk 2.7.0 → 2.7.1-beta.1
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/ios/SwanNotificationContentExtension/Info.plist +2 -0
- package/ios/SwanNotificationContentExtension/MainInterface.storyboard +1 -2
- package/ios/SwanNotificationContentExtension/NotificationViewController.swift +14 -5
- package/ios/SwanNotificationContentExtension/templates/CarouselView.swift +6 -11
- package/lib/commonjs/index.js +57 -5
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/SharedCredentialsManager.js +26 -0
- package/lib/commonjs/utils/SharedCredentialsManager.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/index.js +57 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/SharedCredentialsManager.js +26 -0
- package/lib/module/utils/SharedCredentialsManager.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/utils/SharedCredentialsManager.d.ts +13 -0
- package/lib/typescript/commonjs/src/utils/SharedCredentialsManager.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/version.d.ts +1 -1
- package/lib/typescript/commonjs/src/version.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/utils/SharedCredentialsManager.d.ts +13 -0
- package/lib/typescript/module/src/utils/SharedCredentialsManager.d.ts.map +1 -1
- package/lib/typescript/module/src/version.d.ts +1 -1
- package/lib/typescript/module/src/version.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -177,6 +177,32 @@ class SharedCredentialsManager {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Peek at template click data without clearing it.
|
|
182
|
+
* Used by createNotificationOpenedHandler to check if Content Extension
|
|
183
|
+
* wrote click data, without racing with checkPendingCarouselClick.
|
|
184
|
+
*
|
|
185
|
+
* @returns Click data object or null if no pending click data
|
|
186
|
+
*/
|
|
187
|
+
static async peekTemplateClickData() {
|
|
188
|
+
const accessor = getAppGroupAccessor();
|
|
189
|
+
if (!accessor) return null;
|
|
190
|
+
if (_reactNative.Platform.OS !== 'ios') {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
const clickDataRaw = await accessor.getItem('swanTemplateClickData', this.APP_GROUP_ID);
|
|
195
|
+
if (!clickDataRaw) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const clickData = typeof clickDataRaw === 'string' ? JSON.parse(clickDataRaw) : clickDataRaw;
|
|
199
|
+
return clickData;
|
|
200
|
+
} catch (error) {
|
|
201
|
+
_Logger.default.error('[SharedCredentials] Failed to peek template click data:', error);
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
180
206
|
/**
|
|
181
207
|
* Check if iOS Notification Service Extension is active/configured
|
|
182
208
|
* Returns true if App Group is accessible (meaning NES is configured)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeBase","_interopRequireDefault","_Logger","e","__esModule","default","SwanAppGroup","NativeModules","SharedGroupPreferences","getAppGroupAccessor","SharedCredentialsManager","APP_GROUP_ID","CREDENTIALS_KEY","saveToAppGroup","credentials","accessor","Logger","log","Platform","OS","credentialsJson","JSON","stringify","credentialsBase64","Base64","encode","setItem","appId","deviceId","hasCDID","cdid","isProduction","error","readFromAppGroup","getItem","decode","parse","clearFromAppGroup","setAppGroupId","appGroupId","getAppGroupId","readTemplateClickData","clickDataRaw","clickData","isNotificationServiceExtensionActive","isNesActive","exports"],"sourceRoot":"../../../src","sources":["utils/SharedCredentialsManager.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeBase","_interopRequireDefault","_Logger","e","__esModule","default","SwanAppGroup","NativeModules","SharedGroupPreferences","getAppGroupAccessor","SharedCredentialsManager","APP_GROUP_ID","CREDENTIALS_KEY","saveToAppGroup","credentials","accessor","Logger","log","Platform","OS","credentialsJson","JSON","stringify","credentialsBase64","Base64","encode","setItem","appId","deviceId","hasCDID","cdid","isProduction","error","readFromAppGroup","getItem","decode","parse","clearFromAppGroup","setAppGroupId","appGroupId","getAppGroupId","readTemplateClickData","clickDataRaw","clickData","peekTemplateClickData","isNotificationServiceExtensionActive","isNesActive","exports"],"sourceRoot":"../../../src","sources":["utils/SharedCredentialsManager.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -8,5 +8,5 @@ exports.SDK_VERSION = void 0;
|
|
|
8
8
|
// This file is generated from package.json version during build.
|
|
9
9
|
// See scripts/generate-version.js
|
|
10
10
|
|
|
11
|
-
const SDK_VERSION = exports.SDK_VERSION = '2.7.
|
|
11
|
+
const SDK_VERSION = exports.SDK_VERSION = '2.7.1-beta.1';
|
|
12
12
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SDK_VERSION","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAA;AACA;AACA;;AAEO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,
|
|
1
|
+
{"version":3,"names":["SDK_VERSION","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAA;AACA;AACA;;AAEO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,cAAc","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -138,8 +138,17 @@ const directAckSentIds = new Set();
|
|
|
138
138
|
export function _resetClickDedup() {
|
|
139
139
|
processedClickIds.clear();
|
|
140
140
|
directAckSentIds.clear();
|
|
141
|
+
_lastCarouselClickHandledAt = 0;
|
|
141
142
|
}
|
|
142
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Timestamp of the last iOS carousel click handled by checkPendingCarouselClick().
|
|
146
|
+
* Used by createNotificationOpenedHandler to detect when checkPendingCarouselClick
|
|
147
|
+
* already consumed the one-time App Group click data, avoiding a duplicate
|
|
148
|
+
* NOTIFICATION_OPENED emission with the wrong (default) route.
|
|
149
|
+
*/
|
|
150
|
+
let _lastCarouselClickHandledAt = 0;
|
|
151
|
+
|
|
143
152
|
/**
|
|
144
153
|
* Notification deep link payload
|
|
145
154
|
* Emitted when user clicks on a push notification
|
|
@@ -1884,6 +1893,12 @@ export default class SwanSDK {
|
|
|
1884
1893
|
return;
|
|
1885
1894
|
}
|
|
1886
1895
|
|
|
1896
|
+
// Signal that we handled this iOS carousel click, so
|
|
1897
|
+
// createNotificationOpenedHandler can skip its duplicate emit.
|
|
1898
|
+
if (Platform.OS === 'ios') {
|
|
1899
|
+
_lastCarouselClickHandledAt = Date.now();
|
|
1900
|
+
}
|
|
1901
|
+
|
|
1887
1902
|
// Send click ACK
|
|
1888
1903
|
if (messageId) {
|
|
1889
1904
|
this.sendNotificationAck(messageId, 'clicked');
|
|
@@ -3815,16 +3830,53 @@ export function createNotificationOpenedHandler() {
|
|
|
3815
3830
|
// For carousel notifications, the default route is in 'defaultRoute' field
|
|
3816
3831
|
let route = notificationData.route || notificationData.defaultRoute;
|
|
3817
3832
|
|
|
3818
|
-
// For carousel on iOS,
|
|
3833
|
+
// For carousel on iOS, Content Extension writes per-item click data to
|
|
3834
|
+
// App Group. Two handlers race to read it:
|
|
3835
|
+
// 1. checkPendingCarouselClick() — fires on AppState 'active'
|
|
3836
|
+
// 2. This handler — fires on Firebase onNotificationOpenedApp
|
|
3837
|
+
//
|
|
3838
|
+
// readTemplateClickData() is destructive (clears after read), so the
|
|
3839
|
+
// second reader gets null and falls back to defaultRoute — wrong.
|
|
3840
|
+
//
|
|
3841
|
+
// Fix: peek (non-destructive) to check if data exists. If it does,
|
|
3842
|
+
// defer to checkPendingCarouselClick which has exponential backoff
|
|
3843
|
+
// and is the canonical iOS carousel click handler.
|
|
3844
|
+
// If no data: either already consumed or simple tap (no Content Extension).
|
|
3819
3845
|
if (isIOSCarousel) {
|
|
3820
3846
|
try {
|
|
3821
|
-
const clickData = await SharedCredentialsManager.
|
|
3847
|
+
const clickData = await SharedCredentialsManager.peekTemplateClickData();
|
|
3822
3848
|
if (clickData?.route) {
|
|
3823
|
-
|
|
3824
|
-
|
|
3849
|
+
// Content Extension click data exists — checkPendingCarouselClick
|
|
3850
|
+
// will read it (with backoff) and emit NOTIFICATION_OPENED.
|
|
3851
|
+
// Send ACKs here too as safety net: if app is already foregrounded,
|
|
3852
|
+
// AppState won't transition to 'active' so checkPendingCarouselClick
|
|
3853
|
+
// may never fire.
|
|
3854
|
+
Logger.log('[SwanSDK] iOS carousel click data found, deferring to checkPendingCarouselClick');
|
|
3855
|
+
if (messageId) {
|
|
3856
|
+
await sdkInstance.sendNotificationAck(messageId, 'delivered');
|
|
3857
|
+
}
|
|
3858
|
+
if (messageId) {
|
|
3859
|
+
await sdkInstance.sendNotificationAck(messageId, 'clicked');
|
|
3860
|
+
}
|
|
3861
|
+
return;
|
|
3862
|
+
}
|
|
3863
|
+
|
|
3864
|
+
// No click data from peek. Either:
|
|
3865
|
+
// (a) checkPendingCarouselClick already consumed it
|
|
3866
|
+
// (b) Simple tap — no Content Extension interaction
|
|
3867
|
+
// Brief wait then check if (a).
|
|
3868
|
+
await new Promise(r => setTimeout(r, 300));
|
|
3869
|
+
if (Date.now() - _lastCarouselClickHandledAt < 5000) {
|
|
3870
|
+
Logger.log('[SwanSDK] iOS carousel click already handled by checkPendingCarouselClick');
|
|
3871
|
+
if (messageId) {
|
|
3872
|
+
await sdkInstance.sendNotificationAck(messageId, 'clicked');
|
|
3873
|
+
}
|
|
3874
|
+
return;
|
|
3825
3875
|
}
|
|
3876
|
+
// Case (b): simple tap, proceed with defaultRoute below
|
|
3877
|
+
Logger.log('[SwanSDK] iOS carousel simple tap, using defaultRoute:', route);
|
|
3826
3878
|
} catch (err) {
|
|
3827
|
-
Logger.warn('[SwanSDK] Failed to
|
|
3879
|
+
Logger.warn('[SwanSDK] Failed to peek Content Extension click data:', err);
|
|
3828
3880
|
}
|
|
3829
3881
|
}
|
|
3830
3882
|
const deepLinkPayload = {
|