appsprint-react-native 0.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/LICENSE +21 -0
- package/README.md +173 -0
- package/android/build.gradle +39 -0
- package/android/libs/appsprint-sdk.aar +0 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/kotlin/com/appsprint/AppSprintBridgeModule.kt +182 -0
- package/android/src/main/kotlin/com/appsprint/AppSprintPackage.kt +16 -0
- package/app.plugin.js +3 -0
- package/appsprint-react-native.podspec +23 -0
- package/ios/AppSprintBridge.m +59 -0
- package/ios/AppSprintBridge.swift +210 -0
- package/ios/AppSprintSDK.xcframework/Info.plist +44 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/AppSprintSDK +0 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Headers/AppSprintSDK-Swift.h +3 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Info.plist +0 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios.abi.json +4952 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios.package.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64/AppSprintSDK.framework/Modules/module.modulemap +4 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/AppSprintSDK +0 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Headers/AppSprintSDK-Swift.h +3 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Info.plist +0 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +4952 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +4952 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/AppSprintSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +165 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/Modules/module.modulemap +4 -0
- package/ios/AppSprintSDK.xcframework/ios-arm64_x86_64-simulator/AppSprintSDK.framework/_CodeSignature/CodeResources +101 -0
- package/lib/commonjs/AppSprint.js +50 -0
- package/lib/commonjs/NativeAppSprint.js +50 -0
- package/lib/commonjs/index.js +20 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/module/AppSprint.js +46 -0
- package/lib/module/NativeAppSprint.js +47 -0
- package/lib/module/index.js +5 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/typescript/AppSprint.d.ts +18 -0
- package/lib/typescript/NativeAppSprint.d.ts +4 -0
- package/lib/typescript/index.d.ts +4 -0
- package/lib/typescript/types.d.ts +60 -0
- package/package.json +56 -0
- package/plugin/build/index.d.ts +10 -0
- package/plugin/build/index.js +22 -0
- package/plugin/src/index.ts +27 -0
- package/src/AppSprint.ts +74 -0
- package/src/NativeAppSprint.ts +52 -0
- package/src/index.ts +13 -0
- package/src/types.ts +93 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import React
|
|
3
|
+
import AppSprintSDK
|
|
4
|
+
|
|
5
|
+
@objc(AppSprintModule)
|
|
6
|
+
class AppSprintBridge: NSObject {
|
|
7
|
+
|
|
8
|
+
@objc static func requiresMainQueueSetup() -> Bool { return false }
|
|
9
|
+
|
|
10
|
+
// MARK: - Core SDK
|
|
11
|
+
|
|
12
|
+
@objc func configure(_ config: NSDictionary,
|
|
13
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
14
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
15
|
+
let apiKey = (config["apiKey"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
|
16
|
+
guard !apiKey.isEmpty else {
|
|
17
|
+
reject("CONFIGURE_ERROR", "AppSprint.configure requires a non-empty apiKey.", nil)
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
Task { @MainActor in
|
|
22
|
+
let apiUrl = config["apiUrl"] as? String
|
|
23
|
+
let enableAppleAds = config["enableAppleAdsAttribution"] as? Bool ?? true
|
|
24
|
+
let isDebug = config["isDebug"] as? Bool ?? false
|
|
25
|
+
let logLevelRaw = config["logLevel"] as? Int
|
|
26
|
+
let customerUserId = config["customerUserId"] as? String
|
|
27
|
+
|
|
28
|
+
let logLevel: AppSprintLogLevel
|
|
29
|
+
if let raw = logLevelRaw, let level = AppSprintLogLevel(rawValue: raw) {
|
|
30
|
+
logLevel = level
|
|
31
|
+
} else {
|
|
32
|
+
logLevel = isDebug ? .debug : .warn
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var sdkConfig = AppSprintConfig(
|
|
36
|
+
apiKey: apiKey,
|
|
37
|
+
enableAppleAdsAttribution: enableAppleAds,
|
|
38
|
+
isDebug: isDebug,
|
|
39
|
+
logLevel: logLevel,
|
|
40
|
+
customerUserId: customerUserId
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
if let urlString = apiUrl, let url = URL(string: urlString) {
|
|
44
|
+
sdkConfig = AppSprintConfig(
|
|
45
|
+
apiKey: apiKey,
|
|
46
|
+
apiURL: url,
|
|
47
|
+
enableAppleAdsAttribution: enableAppleAds,
|
|
48
|
+
isDebug: isDebug,
|
|
49
|
+
logLevel: logLevel,
|
|
50
|
+
customerUserId: customerUserId
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
await AppSprint.shared.configure(sdkConfig)
|
|
55
|
+
resolve(nil)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@objc func sendEvent(_ eventType: String,
|
|
60
|
+
name: String?,
|
|
61
|
+
revenue: NSNumber?,
|
|
62
|
+
currency: String?,
|
|
63
|
+
parameters: NSDictionary?,
|
|
64
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
65
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
66
|
+
Task { @MainActor in
|
|
67
|
+
let type = AppSprintEventType(rawValue: eventType) ?? .custom
|
|
68
|
+
|
|
69
|
+
var params: [String: Any]? = nil
|
|
70
|
+
if let parameters = parameters as? [String: Any] {
|
|
71
|
+
params = parameters
|
|
72
|
+
}
|
|
73
|
+
if let rev = revenue?.doubleValue {
|
|
74
|
+
if params == nil { params = [:] }
|
|
75
|
+
params?["revenue"] = rev
|
|
76
|
+
}
|
|
77
|
+
if let cur = currency {
|
|
78
|
+
if params == nil { params = [:] }
|
|
79
|
+
params?["currency"] = cur
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
await AppSprint.shared.sendEvent(type, name: name, params: params)
|
|
83
|
+
resolve(nil)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@objc func sendTestEvent(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
88
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
89
|
+
Task { @MainActor in
|
|
90
|
+
let result = await AppSprint.shared.sendTestEvent()
|
|
91
|
+
resolve(["success": result.success, "message": result.message])
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@objc func flush(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
96
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
97
|
+
Task { @MainActor in
|
|
98
|
+
await AppSprint.shared.flush()
|
|
99
|
+
resolve(nil)
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@objc func clearData(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
104
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
105
|
+
Task { @MainActor in
|
|
106
|
+
AppSprint.shared.clearData()
|
|
107
|
+
resolve(nil)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@objc func setCustomerUserId(_ userId: String,
|
|
112
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
113
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
114
|
+
Task { @MainActor in
|
|
115
|
+
await AppSprint.shared.setCustomerUserId(userId)
|
|
116
|
+
resolve(nil)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@objc func enableAppleAdsAttribution(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
121
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
122
|
+
Task { @MainActor in
|
|
123
|
+
AppSprint.shared.enableAppleAdsAttribution()
|
|
124
|
+
resolve(nil)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@objc func getAppSprintId(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
129
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
130
|
+
Task { @MainActor in
|
|
131
|
+
let id = AppSprint.shared.getAppSprintId()
|
|
132
|
+
resolve(id as Any)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@objc func getAttribution(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
137
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
138
|
+
Task { @MainActor in
|
|
139
|
+
guard let attr = AppSprint.shared.getAttribution() else {
|
|
140
|
+
resolve(NSNull())
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
var dict: [String: Any] = [
|
|
144
|
+
"source": attr.source,
|
|
145
|
+
"confidence": attr.confidence,
|
|
146
|
+
]
|
|
147
|
+
if let campaignName = attr.campaignName { dict["campaignName"] = campaignName }
|
|
148
|
+
if let utmSource = attr.utmSource { dict["utmSource"] = utmSource }
|
|
149
|
+
if let utmMedium = attr.utmMedium { dict["utmMedium"] = utmMedium }
|
|
150
|
+
if let utmCampaign = attr.utmCampaign { dict["utmCampaign"] = utmCampaign }
|
|
151
|
+
resolve(dict)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@objc func isInitialized(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
156
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
157
|
+
Task { @MainActor in
|
|
158
|
+
resolve(AppSprint.shared.isInitialized)
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@objc func isSdkDisabled(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
163
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
164
|
+
Task { @MainActor in
|
|
165
|
+
resolve(AppSprint.shared.isSdkDisabled())
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@objc func destroy(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
170
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
171
|
+
Task { @MainActor in
|
|
172
|
+
AppSprint.shared.destroy()
|
|
173
|
+
resolve(nil)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// MARK: - Utility (device info, ATT)
|
|
178
|
+
|
|
179
|
+
@objc func getDeviceInfo(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
180
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
181
|
+
Task { @MainActor in
|
|
182
|
+
let info = AppSprintNative.getDeviceInfo()
|
|
183
|
+
var dict: [String: Any] = [:]
|
|
184
|
+
if let m = info.deviceModel { dict["deviceModel"] = m }
|
|
185
|
+
if let w = info.screenWidth { dict["screenWidth"] = w }
|
|
186
|
+
if let h = info.screenHeight { dict["screenHeight"] = h }
|
|
187
|
+
if let l = info.locale { dict["locale"] = l }
|
|
188
|
+
if let t = info.timezone { dict["timezone"] = t }
|
|
189
|
+
if let o = info.osVersion { dict["osVersion"] = o }
|
|
190
|
+
if let v = info.idfv { dict["idfv"] = v }
|
|
191
|
+
if let a = info.idfa { dict["idfa"] = a }
|
|
192
|
+
if let token = info.adServicesToken { dict["adServicesToken"] = token }
|
|
193
|
+
resolve(dict)
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
@objc func getAdServicesToken(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
198
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
199
|
+
let token = AppSprintNative.getAdServicesToken()
|
|
200
|
+
resolve(token as Any)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
@objc func requestTrackingAuthorization(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
204
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
205
|
+
Task {
|
|
206
|
+
let authorized = await AppSprintNative.requestTrackingAuthorization()
|
|
207
|
+
resolve(authorized)
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>AvailableLibraries</key>
|
|
6
|
+
<array>
|
|
7
|
+
<dict>
|
|
8
|
+
<key>BinaryPath</key>
|
|
9
|
+
<string>AppSprintSDK.framework/AppSprintSDK</string>
|
|
10
|
+
<key>LibraryIdentifier</key>
|
|
11
|
+
<string>ios-arm64</string>
|
|
12
|
+
<key>LibraryPath</key>
|
|
13
|
+
<string>AppSprintSDK.framework</string>
|
|
14
|
+
<key>SupportedArchitectures</key>
|
|
15
|
+
<array>
|
|
16
|
+
<string>arm64</string>
|
|
17
|
+
</array>
|
|
18
|
+
<key>SupportedPlatform</key>
|
|
19
|
+
<string>ios</string>
|
|
20
|
+
</dict>
|
|
21
|
+
<dict>
|
|
22
|
+
<key>BinaryPath</key>
|
|
23
|
+
<string>AppSprintSDK.framework/AppSprintSDK</string>
|
|
24
|
+
<key>LibraryIdentifier</key>
|
|
25
|
+
<string>ios-arm64_x86_64-simulator</string>
|
|
26
|
+
<key>LibraryPath</key>
|
|
27
|
+
<string>AppSprintSDK.framework</string>
|
|
28
|
+
<key>SupportedArchitectures</key>
|
|
29
|
+
<array>
|
|
30
|
+
<string>arm64</string>
|
|
31
|
+
<string>x86_64</string>
|
|
32
|
+
</array>
|
|
33
|
+
<key>SupportedPlatform</key>
|
|
34
|
+
<string>ios</string>
|
|
35
|
+
<key>SupportedPlatformVariant</key>
|
|
36
|
+
<string>simulator</string>
|
|
37
|
+
</dict>
|
|
38
|
+
</array>
|
|
39
|
+
<key>CFBundlePackageType</key>
|
|
40
|
+
<string>XFWK</string>
|
|
41
|
+
<key>XCFrameworkFormatVersion</key>
|
|
42
|
+
<string>1.0</string>
|
|
43
|
+
</dict>
|
|
44
|
+
</plist>
|
|
Binary file
|