@datalyr/react-native 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -141
- package/LICENSE +21 -0
- package/README.md +405 -217
- package/datalyr-react-native.podspec +31 -0
- package/ios/DatalyrNative.m +70 -0
- package/ios/DatalyrNative.swift +275 -0
- package/ios/DatalyrSKAdNetwork.m +26 -0
- package/lib/datalyr-sdk.d.ts +64 -3
- package/lib/datalyr-sdk.js +322 -3
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -2
- package/lib/integrations/index.d.ts +6 -0
- package/lib/integrations/index.js +6 -0
- package/lib/integrations/meta-integration.d.ts +76 -0
- package/lib/integrations/meta-integration.js +218 -0
- package/lib/integrations/tiktok-integration.d.ts +82 -0
- package/lib/integrations/tiktok-integration.js +356 -0
- package/lib/native/DatalyrNativeBridge.d.ts +31 -0
- package/lib/native/DatalyrNativeBridge.js +168 -0
- package/lib/native/index.d.ts +5 -0
- package/lib/native/index.js +5 -0
- package/lib/types.d.ts +29 -0
- package/package.json +10 -5
- package/src/datalyr-sdk-expo.ts +957 -0
- package/src/datalyr-sdk.ts +419 -19
- package/src/expo.ts +38 -18
- package/src/index.ts +5 -2
- package/src/integrations/index.ts +7 -0
- package/src/integrations/meta-integration.ts +238 -0
- package/src/integrations/tiktok-integration.ts +360 -0
- package/src/native/DatalyrNativeBridge.ts +271 -0
- package/src/native/index.ts +11 -0
- package/src/types.ts +39 -0
- package/src/utils-expo.ts +25 -3
- package/src/utils-interface.ts +38 -0
- package/EXPO_INSTALL.md +0 -297
- package/INSTALL.md +0 -402
- package/examples/attribution-example.tsx +0 -377
- package/examples/auto-events-example.tsx +0 -403
- package/examples/example.tsx +0 -250
- package/examples/skadnetwork-example.tsx +0 -380
- package/examples/test-implementation.tsx +0 -163
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native Bridge for Meta and TikTok SDKs
|
|
3
|
+
* Uses bundled native modules instead of separate npm packages
|
|
4
|
+
*/
|
|
5
|
+
import { NativeModules, Platform } from 'react-native';
|
|
6
|
+
// Native module is only available on iOS
|
|
7
|
+
const DatalyrNative = Platform.OS === 'ios' ? NativeModules.DatalyrNative : null;
|
|
8
|
+
/**
|
|
9
|
+
* Check if native module is available
|
|
10
|
+
*/
|
|
11
|
+
export const isNativeModuleAvailable = () => {
|
|
12
|
+
return DatalyrNative !== null;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Get SDK availability status
|
|
16
|
+
*/
|
|
17
|
+
export const getSDKAvailability = async () => {
|
|
18
|
+
if (!DatalyrNative) {
|
|
19
|
+
return { meta: false, tiktok: false };
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
return await DatalyrNative.getSDKAvailability();
|
|
23
|
+
}
|
|
24
|
+
catch (_a) {
|
|
25
|
+
return { meta: false, tiktok: false };
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
// MARK: - Meta SDK Bridge
|
|
29
|
+
export const MetaNativeBridge = {
|
|
30
|
+
async initialize(appId, clientToken, advertiserTrackingEnabled = false) {
|
|
31
|
+
if (!DatalyrNative)
|
|
32
|
+
return false;
|
|
33
|
+
try {
|
|
34
|
+
return await DatalyrNative.initializeMetaSDK(appId, clientToken || null, advertiserTrackingEnabled);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('[Datalyr/MetaNative] Initialize failed:', error);
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
async fetchDeferredAppLink() {
|
|
42
|
+
if (!DatalyrNative)
|
|
43
|
+
return null;
|
|
44
|
+
try {
|
|
45
|
+
return await DatalyrNative.fetchDeferredAppLink();
|
|
46
|
+
}
|
|
47
|
+
catch (_a) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
async logEvent(eventName, valueToSum, parameters) {
|
|
52
|
+
if (!DatalyrNative)
|
|
53
|
+
return false;
|
|
54
|
+
try {
|
|
55
|
+
return await DatalyrNative.logMetaEvent(eventName, valueToSum !== null && valueToSum !== void 0 ? valueToSum : null, parameters || null);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('[Datalyr/MetaNative] Log event failed:', error);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
async logPurchase(amount, currency, parameters) {
|
|
63
|
+
if (!DatalyrNative)
|
|
64
|
+
return false;
|
|
65
|
+
try {
|
|
66
|
+
return await DatalyrNative.logMetaPurchase(amount, currency, parameters || null);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error('[Datalyr/MetaNative] Log purchase failed:', error);
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
async setUserData(userData) {
|
|
74
|
+
if (!DatalyrNative)
|
|
75
|
+
return false;
|
|
76
|
+
try {
|
|
77
|
+
return await DatalyrNative.setMetaUserData(userData);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error('[Datalyr/MetaNative] Set user data failed:', error);
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
async clearUserData() {
|
|
85
|
+
if (!DatalyrNative)
|
|
86
|
+
return false;
|
|
87
|
+
try {
|
|
88
|
+
return await DatalyrNative.clearMetaUserData();
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error('[Datalyr/MetaNative] Clear user data failed:', error);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
async updateTrackingAuthorization(enabled) {
|
|
96
|
+
if (!DatalyrNative)
|
|
97
|
+
return false;
|
|
98
|
+
try {
|
|
99
|
+
return await DatalyrNative.updateMetaTrackingAuthorization(enabled);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error('[Datalyr/MetaNative] Update tracking failed:', error);
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
// MARK: - TikTok SDK Bridge
|
|
108
|
+
export const TikTokNativeBridge = {
|
|
109
|
+
async initialize(appId, tiktokAppId, accessToken, debug = false) {
|
|
110
|
+
if (!DatalyrNative)
|
|
111
|
+
return false;
|
|
112
|
+
try {
|
|
113
|
+
return await DatalyrNative.initializeTikTokSDK(appId, tiktokAppId, accessToken || null, debug);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error('[Datalyr/TikTokNative] Initialize failed:', error);
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
async trackEvent(eventName, eventId, properties) {
|
|
121
|
+
if (!DatalyrNative)
|
|
122
|
+
return false;
|
|
123
|
+
try {
|
|
124
|
+
return await DatalyrNative.trackTikTokEvent(eventName, eventId || null, properties || null);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error('[Datalyr/TikTokNative] Track event failed:', error);
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
async identify(externalId, email, phone) {
|
|
132
|
+
if (!DatalyrNative)
|
|
133
|
+
return false;
|
|
134
|
+
// Only call if we have at least one value
|
|
135
|
+
if (!externalId && !email && !phone)
|
|
136
|
+
return false;
|
|
137
|
+
try {
|
|
138
|
+
return await DatalyrNative.identifyTikTokUser(externalId || '', '', // externalUserName - not typically available
|
|
139
|
+
phone || '', email || '');
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error('[Datalyr/TikTokNative] Identify failed:', error);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
async logout() {
|
|
147
|
+
if (!DatalyrNative)
|
|
148
|
+
return false;
|
|
149
|
+
try {
|
|
150
|
+
return await DatalyrNative.logoutTikTok();
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error('[Datalyr/TikTokNative] Logout failed:', error);
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
async updateTrackingAuthorization(enabled) {
|
|
158
|
+
if (!DatalyrNative)
|
|
159
|
+
return false;
|
|
160
|
+
try {
|
|
161
|
+
return await DatalyrNative.updateTikTokTrackingAuthorization(enabled);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('[Datalyr/TikTokNative] Update tracking failed:', error);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
};
|
package/lib/types.d.ts
CHANGED
|
@@ -5,6 +5,33 @@ export interface AutoEventConfig {
|
|
|
5
5
|
trackPerformance?: boolean;
|
|
6
6
|
sessionTimeoutMs?: number;
|
|
7
7
|
}
|
|
8
|
+
export interface MetaConfig {
|
|
9
|
+
appId: string;
|
|
10
|
+
clientToken?: string;
|
|
11
|
+
enableDeferredDeepLink?: boolean;
|
|
12
|
+
enableAppEvents?: boolean;
|
|
13
|
+
advertiserTrackingEnabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface TikTokConfig {
|
|
16
|
+
appId: string;
|
|
17
|
+
tiktokAppId: string;
|
|
18
|
+
accessToken?: string;
|
|
19
|
+
enableAppEvents?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface DeferredDeepLinkResult {
|
|
22
|
+
url?: string;
|
|
23
|
+
source?: string;
|
|
24
|
+
fbclid?: string;
|
|
25
|
+
ttclid?: string;
|
|
26
|
+
utmSource?: string;
|
|
27
|
+
utmMedium?: string;
|
|
28
|
+
utmCampaign?: string;
|
|
29
|
+
utmContent?: string;
|
|
30
|
+
utmTerm?: string;
|
|
31
|
+
campaignId?: string;
|
|
32
|
+
adsetId?: string;
|
|
33
|
+
adId?: string;
|
|
34
|
+
}
|
|
8
35
|
export interface DatalyrConfig {
|
|
9
36
|
apiKey: string;
|
|
10
37
|
workspaceId?: string;
|
|
@@ -30,6 +57,8 @@ export interface DatalyrConfig {
|
|
|
30
57
|
retryDelay: number;
|
|
31
58
|
};
|
|
32
59
|
skadTemplate?: 'ecommerce' | 'gaming' | 'subscription';
|
|
60
|
+
meta?: MetaConfig;
|
|
61
|
+
tiktok?: TikTokConfig;
|
|
33
62
|
}
|
|
34
63
|
export interface EventData {
|
|
35
64
|
[key: string]: any;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datalyr/react-native",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Datalyr SDK for React Native & Expo - Server-side attribution tracking",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Datalyr SDK for React Native & Expo - Server-side attribution tracking with bundled Meta and TikTok SDKs",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
"files": [
|
|
15
15
|
"lib/",
|
|
16
16
|
"src/",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
17
|
+
"ios/",
|
|
18
|
+
"README.md",
|
|
19
|
+
"CHANGELOG.md",
|
|
20
|
+
"LICENSE",
|
|
21
|
+
"*.podspec"
|
|
19
22
|
],
|
|
20
23
|
"keywords": [
|
|
21
24
|
"react-native",
|
|
@@ -36,7 +39,9 @@
|
|
|
36
39
|
"google-attribution",
|
|
37
40
|
"ios-attribution",
|
|
38
41
|
"conversion-tracking",
|
|
39
|
-
"revenue-optimization"
|
|
42
|
+
"revenue-optimization",
|
|
43
|
+
"deferred-deep-linking",
|
|
44
|
+
"fbclid"
|
|
40
45
|
],
|
|
41
46
|
"author": "Datalyr",
|
|
42
47
|
"license": "MIT",
|