@datalyr/react-native 1.5.0 → 1.6.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/CHANGELOG.md +39 -0
- package/README.md +82 -121
- package/android/build.gradle +0 -7
- package/android/src/main/java/com/datalyr/reactnative/DatalyrNativeModule.java +2 -380
- package/android/src/main/java/com/datalyr/reactnative/DatalyrPackage.java +1 -1
- package/datalyr-react-native.podspec +3 -7
- package/expo-module.config.json +4 -1
- package/ios/DatalyrNativeModule.swift +0 -266
- package/lib/datalyr-sdk.d.ts +14 -5
- package/lib/datalyr-sdk.js +90 -144
- package/lib/http-client.js +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/integrations/index.d.ts +3 -4
- package/lib/integrations/index.js +3 -4
- package/lib/native/DatalyrNativeBridge.d.ts +6 -22
- package/lib/native/DatalyrNativeBridge.js +6 -147
- package/lib/native/index.d.ts +1 -1
- package/lib/native/index.js +1 -1
- package/lib/types.d.ts +5 -19
- package/package.json +3 -5
- package/src/datalyr-sdk-expo.ts +96 -140
- package/src/datalyr-sdk.ts +102 -174
- package/src/http-client.ts +2 -2
- package/src/index.ts +1 -1
- package/src/integrations/index.ts +3 -4
- package/src/native/DatalyrNativeBridge.ts +6 -241
- package/src/native/index.ts +0 -2
- package/src/types.ts +11 -26
- package/src/utils-expo.ts +2 -2
- package/ios/DatalyrObjCExceptionCatcher.h +0 -14
- package/ios/DatalyrObjCExceptionCatcher.m +0 -30
- package/lib/integrations/meta-integration.d.ts +0 -77
- package/lib/integrations/meta-integration.js +0 -219
- package/lib/integrations/tiktok-integration.d.ts +0 -83
- package/lib/integrations/tiktok-integration.js +0 -360
- package/src/integrations/meta-integration.ts +0 -239
- package/src/integrations/tiktok-integration.ts +0 -363
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Native Bridge for
|
|
3
|
-
*
|
|
2
|
+
* Native Bridge for Apple Search Ads, Play Install Referrer, and Advertiser Info
|
|
3
|
+
*
|
|
4
|
+
* Conversion event routing to ad platforms (Meta, TikTok, Google) is handled
|
|
5
|
+
* server-side via the postback system — no client-side ad SDKs needed.
|
|
4
6
|
*
|
|
5
7
|
* Supported Platforms:
|
|
6
|
-
* - iOS:
|
|
7
|
-
* - Android:
|
|
8
|
+
* - iOS: Apple Search Ads (AdServices), IDFA/ATT
|
|
9
|
+
* - Android: Play Install Referrer, GAID
|
|
8
10
|
*/
|
|
9
11
|
|
|
10
12
|
import { NativeModules, Platform } from 'react-native';
|
|
@@ -48,48 +50,6 @@ export interface PlayInstallReferrerData {
|
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
interface DatalyrNativeModule {
|
|
51
|
-
// Meta SDK Methods
|
|
52
|
-
initializeMetaSDK(
|
|
53
|
-
appId: string,
|
|
54
|
-
clientToken: string | null,
|
|
55
|
-
advertiserTrackingEnabled: boolean
|
|
56
|
-
): Promise<boolean>;
|
|
57
|
-
fetchDeferredAppLink(): Promise<string | null>;
|
|
58
|
-
logMetaEvent(
|
|
59
|
-
eventName: string,
|
|
60
|
-
valueToSum: number | null,
|
|
61
|
-
parameters: Record<string, any> | null
|
|
62
|
-
): Promise<boolean>;
|
|
63
|
-
logMetaPurchase(
|
|
64
|
-
amount: number,
|
|
65
|
-
currency: string,
|
|
66
|
-
parameters: Record<string, any> | null
|
|
67
|
-
): Promise<boolean>;
|
|
68
|
-
setMetaUserData(userData: Record<string, string | undefined>): Promise<boolean>;
|
|
69
|
-
clearMetaUserData(): Promise<boolean>;
|
|
70
|
-
updateMetaTrackingAuthorization(enabled: boolean): Promise<boolean>;
|
|
71
|
-
|
|
72
|
-
// TikTok SDK Methods
|
|
73
|
-
initializeTikTokSDK(
|
|
74
|
-
appId: string,
|
|
75
|
-
tiktokAppId: string,
|
|
76
|
-
accessToken: string | null,
|
|
77
|
-
debug: boolean
|
|
78
|
-
): Promise<boolean>;
|
|
79
|
-
trackTikTokEvent(
|
|
80
|
-
eventName: string,
|
|
81
|
-
eventId: string | null,
|
|
82
|
-
properties: Record<string, any> | null
|
|
83
|
-
): Promise<boolean>;
|
|
84
|
-
identifyTikTokUser(
|
|
85
|
-
externalId: string,
|
|
86
|
-
externalUserName: string,
|
|
87
|
-
phoneNumber: string,
|
|
88
|
-
email: string
|
|
89
|
-
): Promise<boolean>;
|
|
90
|
-
logoutTikTok(): Promise<boolean>;
|
|
91
|
-
updateTikTokTrackingAuthorization(enabled: boolean): Promise<boolean>;
|
|
92
|
-
|
|
93
53
|
// Advertiser Info (IDFA, IDFV, GAID, ATT Status)
|
|
94
54
|
getAdvertiserInfo(): Promise<{
|
|
95
55
|
idfa?: string;
|
|
@@ -104,8 +64,6 @@ interface DatalyrNativeModule {
|
|
|
104
64
|
|
|
105
65
|
// SDK Availability
|
|
106
66
|
getSDKAvailability(): Promise<{
|
|
107
|
-
meta: boolean;
|
|
108
|
-
tiktok: boolean;
|
|
109
67
|
appleSearchAds: boolean;
|
|
110
68
|
playInstallReferrer?: boolean;
|
|
111
69
|
}>;
|
|
@@ -146,14 +104,10 @@ export const isNativeModuleAvailable = (): boolean => {
|
|
|
146
104
|
* Get SDK availability status for all platforms
|
|
147
105
|
*/
|
|
148
106
|
export const getSDKAvailability = async (): Promise<{
|
|
149
|
-
meta: boolean;
|
|
150
|
-
tiktok: boolean;
|
|
151
107
|
appleSearchAds: boolean;
|
|
152
108
|
playInstallReferrer: boolean;
|
|
153
109
|
}> => {
|
|
154
110
|
const defaultAvailability = {
|
|
155
|
-
meta: false,
|
|
156
|
-
tiktok: false,
|
|
157
111
|
appleSearchAds: false,
|
|
158
112
|
playInstallReferrer: false,
|
|
159
113
|
};
|
|
@@ -174,195 +128,6 @@ export const getSDKAvailability = async (): Promise<{
|
|
|
174
128
|
}
|
|
175
129
|
};
|
|
176
130
|
|
|
177
|
-
// MARK: - Meta SDK Bridge
|
|
178
|
-
|
|
179
|
-
export const MetaNativeBridge = {
|
|
180
|
-
async initialize(
|
|
181
|
-
appId: string,
|
|
182
|
-
clientToken?: string,
|
|
183
|
-
advertiserTrackingEnabled: boolean = false
|
|
184
|
-
): Promise<boolean> {
|
|
185
|
-
if (!DatalyrNative) return false;
|
|
186
|
-
|
|
187
|
-
try {
|
|
188
|
-
return await DatalyrNative.initializeMetaSDK(
|
|
189
|
-
appId,
|
|
190
|
-
clientToken || null,
|
|
191
|
-
advertiserTrackingEnabled
|
|
192
|
-
);
|
|
193
|
-
} catch (error) {
|
|
194
|
-
console.error('[Datalyr/MetaNative] Initialize failed:', error);
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
},
|
|
198
|
-
|
|
199
|
-
async fetchDeferredAppLink(): Promise<string | null> {
|
|
200
|
-
if (!DatalyrNative) return null;
|
|
201
|
-
|
|
202
|
-
try {
|
|
203
|
-
return await DatalyrNative.fetchDeferredAppLink();
|
|
204
|
-
} catch {
|
|
205
|
-
return null;
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
|
|
209
|
-
async logEvent(
|
|
210
|
-
eventName: string,
|
|
211
|
-
valueToSum?: number,
|
|
212
|
-
parameters?: Record<string, any>
|
|
213
|
-
): Promise<boolean> {
|
|
214
|
-
if (!DatalyrNative) return false;
|
|
215
|
-
|
|
216
|
-
try {
|
|
217
|
-
return await DatalyrNative.logMetaEvent(
|
|
218
|
-
eventName,
|
|
219
|
-
valueToSum ?? null,
|
|
220
|
-
parameters || null
|
|
221
|
-
);
|
|
222
|
-
} catch (error) {
|
|
223
|
-
console.error('[Datalyr/MetaNative] Log event failed:', error);
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
|
|
228
|
-
async logPurchase(
|
|
229
|
-
amount: number,
|
|
230
|
-
currency: string,
|
|
231
|
-
parameters?: Record<string, any>
|
|
232
|
-
): Promise<boolean> {
|
|
233
|
-
if (!DatalyrNative) return false;
|
|
234
|
-
|
|
235
|
-
try {
|
|
236
|
-
return await DatalyrNative.logMetaPurchase(amount, currency, parameters || null);
|
|
237
|
-
} catch (error) {
|
|
238
|
-
console.error('[Datalyr/MetaNative] Log purchase failed:', error);
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
|
|
243
|
-
async setUserData(userData: Record<string, string | undefined>): Promise<boolean> {
|
|
244
|
-
if (!DatalyrNative) return false;
|
|
245
|
-
|
|
246
|
-
try {
|
|
247
|
-
return await DatalyrNative.setMetaUserData(userData);
|
|
248
|
-
} catch (error) {
|
|
249
|
-
console.error('[Datalyr/MetaNative] Set user data failed:', error);
|
|
250
|
-
return false;
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
|
|
254
|
-
async clearUserData(): Promise<boolean> {
|
|
255
|
-
if (!DatalyrNative) return false;
|
|
256
|
-
|
|
257
|
-
try {
|
|
258
|
-
return await DatalyrNative.clearMetaUserData();
|
|
259
|
-
} catch (error) {
|
|
260
|
-
console.error('[Datalyr/MetaNative] Clear user data failed:', error);
|
|
261
|
-
return false;
|
|
262
|
-
}
|
|
263
|
-
},
|
|
264
|
-
|
|
265
|
-
async updateTrackingAuthorization(enabled: boolean): Promise<boolean> {
|
|
266
|
-
if (!DatalyrNative) return false;
|
|
267
|
-
|
|
268
|
-
try {
|
|
269
|
-
return await DatalyrNative.updateMetaTrackingAuthorization(enabled);
|
|
270
|
-
} catch (error) {
|
|
271
|
-
console.error('[Datalyr/MetaNative] Update tracking failed:', error);
|
|
272
|
-
return false;
|
|
273
|
-
}
|
|
274
|
-
},
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
// MARK: - TikTok SDK Bridge
|
|
278
|
-
|
|
279
|
-
export const TikTokNativeBridge = {
|
|
280
|
-
async initialize(
|
|
281
|
-
appId: string,
|
|
282
|
-
tiktokAppId: string,
|
|
283
|
-
accessToken?: string,
|
|
284
|
-
debug: boolean = false
|
|
285
|
-
): Promise<boolean> {
|
|
286
|
-
if (!DatalyrNative) return false;
|
|
287
|
-
|
|
288
|
-
try {
|
|
289
|
-
return await DatalyrNative.initializeTikTokSDK(
|
|
290
|
-
appId,
|
|
291
|
-
tiktokAppId,
|
|
292
|
-
accessToken || null,
|
|
293
|
-
debug
|
|
294
|
-
);
|
|
295
|
-
} catch (error) {
|
|
296
|
-
console.error('[Datalyr/TikTokNative] Initialize failed:', error);
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
},
|
|
300
|
-
|
|
301
|
-
async trackEvent(
|
|
302
|
-
eventName: string,
|
|
303
|
-
eventId?: string,
|
|
304
|
-
properties?: Record<string, any>
|
|
305
|
-
): Promise<boolean> {
|
|
306
|
-
if (!DatalyrNative) return false;
|
|
307
|
-
|
|
308
|
-
try {
|
|
309
|
-
return await DatalyrNative.trackTikTokEvent(
|
|
310
|
-
eventName,
|
|
311
|
-
eventId || null,
|
|
312
|
-
properties || null
|
|
313
|
-
);
|
|
314
|
-
} catch (error) {
|
|
315
|
-
console.error('[Datalyr/TikTokNative] Track event failed:', error);
|
|
316
|
-
return false;
|
|
317
|
-
}
|
|
318
|
-
},
|
|
319
|
-
|
|
320
|
-
async identify(
|
|
321
|
-
externalId?: string,
|
|
322
|
-
email?: string,
|
|
323
|
-
phone?: string
|
|
324
|
-
): Promise<boolean> {
|
|
325
|
-
if (!DatalyrNative) return false;
|
|
326
|
-
|
|
327
|
-
// Only call if we have at least one value
|
|
328
|
-
if (!externalId && !email && !phone) return false;
|
|
329
|
-
|
|
330
|
-
try {
|
|
331
|
-
return await DatalyrNative.identifyTikTokUser(
|
|
332
|
-
externalId || '',
|
|
333
|
-
'', // externalUserName - not typically available
|
|
334
|
-
phone || '',
|
|
335
|
-
email || ''
|
|
336
|
-
);
|
|
337
|
-
} catch (error) {
|
|
338
|
-
console.error('[Datalyr/TikTokNative] Identify failed:', error);
|
|
339
|
-
return false;
|
|
340
|
-
}
|
|
341
|
-
},
|
|
342
|
-
|
|
343
|
-
async logout(): Promise<boolean> {
|
|
344
|
-
if (!DatalyrNative) return false;
|
|
345
|
-
|
|
346
|
-
try {
|
|
347
|
-
return await DatalyrNative.logoutTikTok();
|
|
348
|
-
} catch (error) {
|
|
349
|
-
console.error('[Datalyr/TikTokNative] Logout failed:', error);
|
|
350
|
-
return false;
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
|
|
354
|
-
async updateTrackingAuthorization(enabled: boolean): Promise<boolean> {
|
|
355
|
-
if (!DatalyrNative) return false;
|
|
356
|
-
|
|
357
|
-
try {
|
|
358
|
-
return await DatalyrNative.updateTikTokTrackingAuthorization(enabled);
|
|
359
|
-
} catch (error) {
|
|
360
|
-
console.error('[Datalyr/TikTokNative] Update tracking failed:', error);
|
|
361
|
-
return false;
|
|
362
|
-
}
|
|
363
|
-
},
|
|
364
|
-
};
|
|
365
|
-
|
|
366
131
|
// MARK: - Apple Search Ads Bridge (iOS only)
|
|
367
132
|
|
|
368
133
|
export const AppleSearchAdsNativeBridge = {
|
package/src/native/index.ts
CHANGED
|
@@ -6,8 +6,6 @@ export { SKAdNetworkBridge } from './SKAdNetworkBridge';
|
|
|
6
6
|
export {
|
|
7
7
|
isNativeModuleAvailable,
|
|
8
8
|
getSDKAvailability,
|
|
9
|
-
MetaNativeBridge,
|
|
10
|
-
TikTokNativeBridge,
|
|
11
9
|
AdvertiserInfoBridge,
|
|
12
10
|
} from './DatalyrNativeBridge';
|
|
13
11
|
export type { AdvertiserInfo } from './DatalyrNativeBridge';
|
package/src/types.ts
CHANGED
|
@@ -7,29 +7,13 @@ export interface AutoEventConfig {
|
|
|
7
7
|
sessionTimeoutMs?: number;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
//
|
|
11
|
-
export interface MetaConfig {
|
|
12
|
-
appId: string; // Facebook App ID
|
|
13
|
-
clientToken?: string; // Client Token for advanced features
|
|
14
|
-
enableDeferredDeepLink?: boolean; // Default: true
|
|
15
|
-
enableAppEvents?: boolean; // Default: true
|
|
16
|
-
advertiserTrackingEnabled?: boolean; // iOS ATT status (auto-detected if not set)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// TikTok SDK Configuration
|
|
20
|
-
export interface TikTokConfig {
|
|
21
|
-
appId: string; // Your App ID (for Datalyr)
|
|
22
|
-
tiktokAppId: string; // TikTok App ID
|
|
23
|
-
accessToken?: string; // Access Token for Events API
|
|
24
|
-
enableAppEvents?: boolean; // Default: true
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Deferred Deep Link Result (from platform SDKs)
|
|
10
|
+
// Deferred Deep Link Result (from Play Install Referrer on Android)
|
|
28
11
|
export interface DeferredDeepLinkResult {
|
|
29
12
|
url?: string;
|
|
30
13
|
source?: string;
|
|
31
14
|
fbclid?: string;
|
|
32
15
|
ttclid?: string;
|
|
16
|
+
gclid?: string;
|
|
33
17
|
utmSource?: string;
|
|
34
18
|
utmMedium?: string;
|
|
35
19
|
utmCampaign?: string;
|
|
@@ -51,8 +35,6 @@ export interface DeferredDeepLinkResult {
|
|
|
51
35
|
* enableAutoEvents: true,
|
|
52
36
|
* enableAttribution: true,
|
|
53
37
|
* skadTemplate: 'ecommerce',
|
|
54
|
-
* meta: { appId: 'FB_APP_ID' },
|
|
55
|
-
* tiktok: { appId: 'APP_ID', tiktokAppId: 'TIKTOK_APP_ID' },
|
|
56
38
|
* });
|
|
57
39
|
* ```
|
|
58
40
|
*/
|
|
@@ -135,11 +117,6 @@ export interface DatalyrConfig {
|
|
|
135
117
|
/** SKAdNetwork template for automatic conversion value encoding (iOS only) */
|
|
136
118
|
skadTemplate?: 'ecommerce' | 'gaming' | 'subscription';
|
|
137
119
|
|
|
138
|
-
/** Meta (Facebook) SDK Configuration */
|
|
139
|
-
meta?: MetaConfig;
|
|
140
|
-
|
|
141
|
-
/** TikTok SDK Configuration */
|
|
142
|
-
tiktok?: TikTokConfig;
|
|
143
120
|
}
|
|
144
121
|
// Event Types
|
|
145
122
|
export interface EventData {
|
|
@@ -250,4 +227,12 @@ export interface AttributionData {
|
|
|
250
227
|
content?: string;
|
|
251
228
|
clickId?: string;
|
|
252
229
|
installTime?: string;
|
|
253
|
-
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Third-Party Integration Attributes
|
|
233
|
+
|
|
234
|
+
/** Flat dictionary for Superwall's setUserAttributes() */
|
|
235
|
+
export type SuperwallAttributes = Record<string, string>;
|
|
236
|
+
|
|
237
|
+
/** Flat dictionary for RevenueCat's Purchases.setAttributes() */
|
|
238
|
+
export type RevenueCatAttributes = Record<string, string>;
|
package/src/utils-expo.ts
CHANGED
|
@@ -319,8 +319,8 @@ export const validateEventName = (eventName: string): boolean => {
|
|
|
319
319
|
return false;
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
-
// Allow letters, numbers, underscores, and
|
|
323
|
-
const validPattern =
|
|
322
|
+
// Allow letters, numbers, underscores, hyphens, and $ prefix (for system events like $identify)
|
|
323
|
+
const validPattern = /^\$?[a-zA-Z0-9_-]+$/;
|
|
324
324
|
return validPattern.test(eventName);
|
|
325
325
|
};
|
|
326
326
|
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#import <Foundation/Foundation.h>
|
|
2
|
-
|
|
3
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
4
|
-
|
|
5
|
-
/// Catches ObjC NSExceptions (from Meta/TikTok SDKs) and converts them to NSErrors.
|
|
6
|
-
/// Swift's do/try/catch cannot catch NSExceptions — they propagate through Hermes
|
|
7
|
-
/// and cause EXC_BAD_ACCESS (SIGSEGV) crashes.
|
|
8
|
-
@interface DatalyrObjCExceptionCatcher : NSObject
|
|
9
|
-
|
|
10
|
-
+ (BOOL)tryBlock:(void(NS_NOESCAPE ^)(void))block error:(NSError *_Nullable *_Nullable)error;
|
|
11
|
-
|
|
12
|
-
@end
|
|
13
|
-
|
|
14
|
-
NS_ASSUME_NONNULL_END
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
#import "DatalyrObjCExceptionCatcher.h"
|
|
2
|
-
|
|
3
|
-
@implementation DatalyrObjCExceptionCatcher
|
|
4
|
-
|
|
5
|
-
+ (BOOL)tryBlock:(void(NS_NOESCAPE ^)(void))block error:(NSError **)error {
|
|
6
|
-
@try {
|
|
7
|
-
block();
|
|
8
|
-
return YES;
|
|
9
|
-
}
|
|
10
|
-
@catch (NSException *exception) {
|
|
11
|
-
if (error) {
|
|
12
|
-
NSString *description = exception.reason ?: exception.name;
|
|
13
|
-
NSDictionary *userInfo = @{
|
|
14
|
-
NSLocalizedDescriptionKey: description,
|
|
15
|
-
@"ExceptionName": exception.name ?: @"Unknown",
|
|
16
|
-
};
|
|
17
|
-
if (exception.userInfo) {
|
|
18
|
-
NSMutableDictionary *merged = [userInfo mutableCopy];
|
|
19
|
-
[merged addEntriesFromDictionary:exception.userInfo];
|
|
20
|
-
userInfo = merged;
|
|
21
|
-
}
|
|
22
|
-
*error = [NSError errorWithDomain:@"com.datalyr.objc-exception"
|
|
23
|
-
code:-1
|
|
24
|
-
userInfo:userInfo];
|
|
25
|
-
}
|
|
26
|
-
return NO;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
@end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Meta (Facebook) SDK Integration
|
|
3
|
-
* Uses bundled native iOS SDK for deferred deep linking, event forwarding, and Advanced Matching
|
|
4
|
-
*/
|
|
5
|
-
import { MetaConfig, DeferredDeepLinkResult } from '../types';
|
|
6
|
-
/**
|
|
7
|
-
* Meta Integration class for handling Facebook SDK operations
|
|
8
|
-
* Uses native iOS SDK bundled via CocoaPods (no additional npm packages required)
|
|
9
|
-
*/
|
|
10
|
-
export declare class MetaIntegration {
|
|
11
|
-
private config;
|
|
12
|
-
private initialized;
|
|
13
|
-
private available;
|
|
14
|
-
private debug;
|
|
15
|
-
private deferredDeepLinkData;
|
|
16
|
-
/**
|
|
17
|
-
* Initialize Meta SDK with configuration
|
|
18
|
-
* Supported on both iOS and Android via native modules
|
|
19
|
-
*/
|
|
20
|
-
initialize(config: MetaConfig, debug?: boolean): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Update tracking authorization status (call after ATT prompt)
|
|
23
|
-
*/
|
|
24
|
-
updateTrackingAuthorization(enabled: boolean): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Fetch deferred deep link from Meta SDK
|
|
27
|
-
* This captures fbclid for installs that went through App Store
|
|
28
|
-
*/
|
|
29
|
-
fetchDeferredDeepLink(): Promise<DeferredDeepLinkResult | null>;
|
|
30
|
-
/**
|
|
31
|
-
* Parse deep link URL to extract attribution parameters
|
|
32
|
-
*/
|
|
33
|
-
private parseDeepLinkUrl;
|
|
34
|
-
/**
|
|
35
|
-
* Log purchase event to Meta
|
|
36
|
-
*/
|
|
37
|
-
logPurchase(value: number, currency: string, parameters?: Record<string, any>): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Log custom event to Meta
|
|
40
|
-
*/
|
|
41
|
-
logEvent(eventName: string, valueToSum?: number, parameters?: Record<string, any>): Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* Set user data for Advanced Matching (improves conversion attribution)
|
|
44
|
-
* Note: Meta's Advanced Matching uses these specific fields - externalId is not supported
|
|
45
|
-
*/
|
|
46
|
-
setUserData(userData: {
|
|
47
|
-
email?: string;
|
|
48
|
-
firstName?: string;
|
|
49
|
-
lastName?: string;
|
|
50
|
-
phone?: string;
|
|
51
|
-
dateOfBirth?: string;
|
|
52
|
-
gender?: string;
|
|
53
|
-
city?: string;
|
|
54
|
-
state?: string;
|
|
55
|
-
zip?: string;
|
|
56
|
-
country?: string;
|
|
57
|
-
}): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Clear user data (call on logout)
|
|
60
|
-
*/
|
|
61
|
-
clearUserData(): Promise<void>;
|
|
62
|
-
/**
|
|
63
|
-
* Get cached deferred deep link data
|
|
64
|
-
*/
|
|
65
|
-
getDeferredDeepLinkData(): DeferredDeepLinkResult | null;
|
|
66
|
-
/**
|
|
67
|
-
* Check if Meta SDK is available and initialized
|
|
68
|
-
*/
|
|
69
|
-
isAvailable(): boolean;
|
|
70
|
-
/**
|
|
71
|
-
* Check if Meta SDK native module is installed
|
|
72
|
-
*/
|
|
73
|
-
isInstalled(): boolean;
|
|
74
|
-
private log;
|
|
75
|
-
private logError;
|
|
76
|
-
}
|
|
77
|
-
export declare const metaIntegration: MetaIntegration;
|