@apex-inc/capacitor-plugin 0.3.4 → 0.3.6
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/dist/definitions.d.ts +11 -3
- package/dist/definitions.d.ts.map +1 -1
- package/dist/esm/definitions.d.ts +11 -3
- package/dist/esm/definitions.d.ts.map +1 -1
- package/ios/Sources/ApexCapacitorPlugin/BatchSender.swift +233 -0
- package/ios/Sources/ApexCapacitorPluginBridge/ApexCapacitorPlugin.swift +132 -8
- package/package.json +1 -1
package/dist/definitions.d.ts
CHANGED
|
@@ -313,11 +313,19 @@ export interface ApexCapacitorPlugin {
|
|
|
313
313
|
}) => void): Promise<PluginListenerHandle>;
|
|
314
314
|
/**
|
|
315
315
|
* Fires when a push notification arrives while the app is in the
|
|
316
|
-
* foreground.
|
|
317
|
-
*
|
|
318
|
-
* the
|
|
316
|
+
* foreground. Since 0.3.5 the plugin registers as the
|
|
317
|
+
* `UNUserNotificationCenter` delegate by default, so the OS will
|
|
318
|
+
* also present a banner + play the sound while the app is open —
|
|
319
|
+
* customers don't have to wire that themselves.
|
|
319
320
|
*/
|
|
320
321
|
addListener(eventName: "pushReceived", listenerFunc: (event: PushReceivedEvent) => void): Promise<PluginListenerHandle>;
|
|
322
|
+
/**
|
|
323
|
+
* Fires when the user taps a push notification (whether tapped from
|
|
324
|
+
* the lock screen, banner, or notification center). Use this to
|
|
325
|
+
* route the app to the right screen — e.g. open a product detail
|
|
326
|
+
* when the push payload references a productId.
|
|
327
|
+
*/
|
|
328
|
+
addListener(eventName: "pushClicked", listenerFunc: (event: PushReceivedEvent) => void): Promise<PluginListenerHandle>;
|
|
321
329
|
/** Removes all listeners registered by this plugin instance. */
|
|
322
330
|
removeAllListeners(): Promise<void>;
|
|
323
331
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -313,11 +313,19 @@ export interface ApexCapacitorPlugin {
|
|
|
313
313
|
}) => void): Promise<PluginListenerHandle>;
|
|
314
314
|
/**
|
|
315
315
|
* Fires when a push notification arrives while the app is in the
|
|
316
|
-
* foreground.
|
|
317
|
-
*
|
|
318
|
-
* the
|
|
316
|
+
* foreground. Since 0.3.5 the plugin registers as the
|
|
317
|
+
* `UNUserNotificationCenter` delegate by default, so the OS will
|
|
318
|
+
* also present a banner + play the sound while the app is open —
|
|
319
|
+
* customers don't have to wire that themselves.
|
|
319
320
|
*/
|
|
320
321
|
addListener(eventName: "pushReceived", listenerFunc: (event: PushReceivedEvent) => void): Promise<PluginListenerHandle>;
|
|
322
|
+
/**
|
|
323
|
+
* Fires when the user taps a push notification (whether tapped from
|
|
324
|
+
* the lock screen, banner, or notification center). Use this to
|
|
325
|
+
* route the app to the right screen — e.g. open a product detail
|
|
326
|
+
* when the push payload references a productId.
|
|
327
|
+
*/
|
|
328
|
+
addListener(eventName: "pushClicked", listenerFunc: (event: PushReceivedEvent) => void): Promise<PluginListenerHandle>;
|
|
321
329
|
/** Removes all listeners registered by this plugin instance. */
|
|
322
330
|
removeAllListeners(): Promise<void>;
|
|
323
331
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
//
|
|
2
|
+
// BatchSender.swift
|
|
3
|
+
// Apex Capacitor Plugin
|
|
4
|
+
//
|
|
5
|
+
// Drains the NativeOfflineQueue by POSTing batches of events to
|
|
6
|
+
// `${apiBaseUrl}/api/events`. Mirrors the JS-side BatchSender so the
|
|
7
|
+
// on-disk queue isn't stranded.
|
|
8
|
+
//
|
|
9
|
+
// Before this file shipped (plugin <= 0.3.5), `track()` on iOS
|
|
10
|
+
// enqueued events to the native file-backed queue and `flushQueue()`
|
|
11
|
+
// was a no-op — events accumulated forever and never reached Apex.
|
|
12
|
+
// See MMP-205 friction-log F6 for the bug write-up.
|
|
13
|
+
//
|
|
14
|
+
// Concurrency model:
|
|
15
|
+
// - Serial DispatchQueue gates send attempts so two flushes don't
|
|
16
|
+
// race over the same batch.
|
|
17
|
+
// - URLSession callbacks come in on the URLSession's delegate
|
|
18
|
+
// queue; we hop back to the serial queue to mutate the offline
|
|
19
|
+
// queue (markSent / markFailed).
|
|
20
|
+
//
|
|
21
|
+
|
|
22
|
+
import Foundation
|
|
23
|
+
|
|
24
|
+
public final class NativeBatchSender {
|
|
25
|
+
|
|
26
|
+
public enum SendOutcome {
|
|
27
|
+
case success
|
|
28
|
+
case nonRetryable(Int)
|
|
29
|
+
case retryableExhausted(String)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private let apiBaseUrl: String
|
|
33
|
+
private let projectKey: String
|
|
34
|
+
private let platformHeader: String
|
|
35
|
+
private let batchSize: Int
|
|
36
|
+
private let maxRetries: Int
|
|
37
|
+
private let baseBackoffMs: Int
|
|
38
|
+
private let debug: Bool
|
|
39
|
+
private let urlSession: URLSession
|
|
40
|
+
|
|
41
|
+
private let serial = DispatchQueue(label: "inc.apex.batch-sender")
|
|
42
|
+
private var inFlight = false
|
|
43
|
+
|
|
44
|
+
public init(
|
|
45
|
+
apiBaseUrl: String,
|
|
46
|
+
projectKey: String,
|
|
47
|
+
platformHeader: String = "ios",
|
|
48
|
+
batchSize: Int = 50,
|
|
49
|
+
maxRetries: Int = 3,
|
|
50
|
+
baseBackoffMs: Int = 1000,
|
|
51
|
+
debug: Bool = false,
|
|
52
|
+
urlSession: URLSession = .shared
|
|
53
|
+
) {
|
|
54
|
+
// Strip trailing slashes; URL joining below assumes none.
|
|
55
|
+
var trimmed = apiBaseUrl
|
|
56
|
+
while trimmed.hasSuffix("/") { trimmed.removeLast() }
|
|
57
|
+
self.apiBaseUrl = trimmed
|
|
58
|
+
self.projectKey = projectKey
|
|
59
|
+
self.platformHeader = platformHeader
|
|
60
|
+
self.batchSize = max(1, batchSize)
|
|
61
|
+
self.maxRetries = max(1, maxRetries)
|
|
62
|
+
self.baseBackoffMs = max(0, baseBackoffMs)
|
|
63
|
+
self.debug = debug
|
|
64
|
+
self.urlSession = urlSession
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/// Drains the queue, one batch at a time, with exponential backoff
|
|
68
|
+
/// on retryable failures. Safe to call concurrently — only one
|
|
69
|
+
/// flush actually runs at a time; concurrent callers no-op.
|
|
70
|
+
public func flush(queue: NativeOfflineQueue, completion: @escaping (Int, Int) -> Void) {
|
|
71
|
+
serial.async { [weak self] in
|
|
72
|
+
guard let self = self else { completion(0, 0); return }
|
|
73
|
+
if self.inFlight {
|
|
74
|
+
// Caller will be picked up by the in-flight flush.
|
|
75
|
+
let remaining = (try? queue.size()) ?? 0
|
|
76
|
+
completion(0, remaining)
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
self.inFlight = true
|
|
80
|
+
|
|
81
|
+
var totalFlushed = 0
|
|
82
|
+
self.drainLoop(queue: queue, flushed: &totalFlushed) { [weak self] in
|
|
83
|
+
self?.inFlight = false
|
|
84
|
+
let remaining = (try? queue.size()) ?? 0
|
|
85
|
+
completion(totalFlushed, remaining)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private func drainLoop(
|
|
91
|
+
queue: NativeOfflineQueue,
|
|
92
|
+
flushed: inout Int,
|
|
93
|
+
done: @escaping () -> Void
|
|
94
|
+
) {
|
|
95
|
+
let batch: [NativeQueuedEvent]
|
|
96
|
+
do {
|
|
97
|
+
batch = try queue.peek(batchSize: batchSize)
|
|
98
|
+
} catch {
|
|
99
|
+
if debug { print("[apex-capacitor] peek failed: \(error)") }
|
|
100
|
+
done()
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
if batch.isEmpty {
|
|
104
|
+
done()
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
let localFlushed = flushed
|
|
109
|
+
sendBatchWithRetry(batch, attempt: 0) { [weak self] outcome in
|
|
110
|
+
guard let self = self else { done(); return }
|
|
111
|
+
self.serial.async {
|
|
112
|
+
let ids = batch.map { $0.id }
|
|
113
|
+
switch outcome {
|
|
114
|
+
case .success:
|
|
115
|
+
try? queue.markSent(ids: ids)
|
|
116
|
+
if self.debug { print("[apex-capacitor] flushed batch of \(batch.count)") }
|
|
117
|
+
var nextFlushed = localFlushed + batch.count
|
|
118
|
+
self.drainLoop(queue: queue, flushed: &nextFlushed, done: done)
|
|
119
|
+
// After the recursive call returns the outer flushed
|
|
120
|
+
// is no longer relevant — drain handles its own.
|
|
121
|
+
case .nonRetryable(let status):
|
|
122
|
+
if self.debug { print("[apex-capacitor] non-retryable HTTP \(status); leaving events queued") }
|
|
123
|
+
done()
|
|
124
|
+
case .retryableExhausted(let err):
|
|
125
|
+
try? queue.markFailed(ids: ids)
|
|
126
|
+
if self.debug { print("[apex-capacitor] retries exhausted: \(err)") }
|
|
127
|
+
done()
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private func sendBatchWithRetry(
|
|
134
|
+
_ batch: [NativeQueuedEvent],
|
|
135
|
+
attempt: Int,
|
|
136
|
+
completion: @escaping (SendOutcome) -> Void
|
|
137
|
+
) {
|
|
138
|
+
guard !batch.isEmpty else { completion(.success); return }
|
|
139
|
+
guard let url = URL(string: "\(apiBaseUrl)/api/events") else {
|
|
140
|
+
completion(.nonRetryable(0))
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// The server accepts `{ projectKey, events: [{ id, ...payload }] }`.
|
|
145
|
+
// We unwrap the queued envelope so the `id` lives at the top
|
|
146
|
+
// level of each event object (matches what /api/events expects
|
|
147
|
+
// and what the JS-side BatchSender produces).
|
|
148
|
+
let body: [String: Any] = [
|
|
149
|
+
"projectKey": projectKey,
|
|
150
|
+
"events": batch.map { ev -> [String: Any] in
|
|
151
|
+
var flat = ev.payload.mapValues { $0.value }
|
|
152
|
+
flat["id"] = ev.id
|
|
153
|
+
return flat
|
|
154
|
+
},
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
var request = URLRequest(url: url)
|
|
158
|
+
request.httpMethod = "POST"
|
|
159
|
+
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
|
|
160
|
+
request.setValue(projectKey, forHTTPHeaderField: "X-Apex-Project-Key")
|
|
161
|
+
request.setValue(platformHeader, forHTTPHeaderField: "X-Apex-Platform")
|
|
162
|
+
request.timeoutInterval = 20
|
|
163
|
+
|
|
164
|
+
do {
|
|
165
|
+
request.httpBody = try JSONSerialization.data(withJSONObject: body, options: [])
|
|
166
|
+
} catch {
|
|
167
|
+
completion(.nonRetryable(0))
|
|
168
|
+
return
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if debug { print("[apex-capacitor] POST \(url.absoluteString) (\(batch.count) events, attempt \(attempt + 1)/\(maxRetries))") }
|
|
172
|
+
|
|
173
|
+
let task = urlSession.dataTask(with: request) { [weak self] _, response, error in
|
|
174
|
+
guard let self = self else { return }
|
|
175
|
+
|
|
176
|
+
if let error = error {
|
|
177
|
+
self.retryOrFail(
|
|
178
|
+
batch: batch,
|
|
179
|
+
attempt: attempt,
|
|
180
|
+
errorMessage: error.localizedDescription,
|
|
181
|
+
completion: completion
|
|
182
|
+
)
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
guard let http = response as? HTTPURLResponse else {
|
|
187
|
+
self.retryOrFail(
|
|
188
|
+
batch: batch,
|
|
189
|
+
attempt: attempt,
|
|
190
|
+
errorMessage: "non-HTTP response",
|
|
191
|
+
completion: completion
|
|
192
|
+
)
|
|
193
|
+
return
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (200..<300).contains(http.statusCode) {
|
|
197
|
+
completion(.success)
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
if (400..<500).contains(http.statusCode) {
|
|
201
|
+
// Client error — don't retry; preserves events for
|
|
202
|
+
// inspection but stops hammering the server.
|
|
203
|
+
completion(.nonRetryable(http.statusCode))
|
|
204
|
+
return
|
|
205
|
+
}
|
|
206
|
+
// 5xx / unknown — retryable.
|
|
207
|
+
self.retryOrFail(
|
|
208
|
+
batch: batch,
|
|
209
|
+
attempt: attempt,
|
|
210
|
+
errorMessage: "HTTP \(http.statusCode)",
|
|
211
|
+
completion: completion
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
task.resume()
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
private func retryOrFail(
|
|
218
|
+
batch: [NativeQueuedEvent],
|
|
219
|
+
attempt: Int,
|
|
220
|
+
errorMessage: String,
|
|
221
|
+
completion: @escaping (SendOutcome) -> Void
|
|
222
|
+
) {
|
|
223
|
+
if attempt + 1 >= maxRetries {
|
|
224
|
+
completion(.retryableExhausted(errorMessage))
|
|
225
|
+
return
|
|
226
|
+
}
|
|
227
|
+
let backoffMs = baseBackoffMs * Int(pow(2.0, Double(attempt)))
|
|
228
|
+
if debug { print("[apex-capacitor] retry in \(backoffMs)ms (\(errorMessage))") }
|
|
229
|
+
DispatchQueue.global().asyncAfter(deadline: .now() + .milliseconds(backoffMs)) { [weak self] in
|
|
230
|
+
self?.sendBatchWithRetry(batch, attempt: attempt + 1, completion: completion)
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
import Foundation
|
|
14
14
|
import Capacitor
|
|
15
|
+
import UIKit
|
|
16
|
+
import UserNotifications
|
|
15
17
|
|
|
16
18
|
@objc(ApexCapacitorPlugin)
|
|
17
|
-
public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
19
|
+
public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin, UNUserNotificationCenterDelegate {
|
|
18
20
|
|
|
19
21
|
// CAPBridgedPlugin metadata for Capacitor 6+ runtime registration.
|
|
20
22
|
public let identifier = "ApexCapacitorPlugin"
|
|
@@ -69,6 +71,12 @@ public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
69
71
|
private var apiBaseUrl: String = ""
|
|
70
72
|
private var projectKey: String = ""
|
|
71
73
|
|
|
74
|
+
// MMP-205 — native batch sender. Drains offlineQueue to /api/events.
|
|
75
|
+
// Until 0.3.6 this was a no-op; events accumulated on disk and never
|
|
76
|
+
// reached the server. See friction-log F6.
|
|
77
|
+
private var batchSender: NativeBatchSender?
|
|
78
|
+
private var flushTimer: Timer?
|
|
79
|
+
|
|
72
80
|
public override func load() {
|
|
73
81
|
let defaults = UserDefaults.standard
|
|
74
82
|
visitorId = defaults.string(forKey: "apex.visitorId") ?? UUID().uuidString.lowercased()
|
|
@@ -79,28 +87,78 @@ public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
79
87
|
}
|
|
80
88
|
|
|
81
89
|
// MMP-177 — observe foreground pushes posted by the app's
|
|
82
|
-
// AppDelegate via the bridge notification.
|
|
90
|
+
// AppDelegate via the bridge notification (background path).
|
|
83
91
|
NotificationCenter.default.addObserver(
|
|
84
92
|
self,
|
|
85
93
|
selector: #selector(handlePushReceivedNotification(_:)),
|
|
86
94
|
name: ApexPushNotifications.didReceive,
|
|
87
95
|
object: nil
|
|
88
96
|
)
|
|
97
|
+
|
|
98
|
+
// MMP-182 — register as the UNUserNotificationCenter delegate so
|
|
99
|
+
// foreground pushes display banners by default. Without this iOS
|
|
100
|
+
// silently suppresses banners when the receiving app is open,
|
|
101
|
+
// which is the #1 confusion every customer hits on first test.
|
|
102
|
+
// Customers who need custom delegate behavior can set their own
|
|
103
|
+
// delegate after calling registerForPushNotifications().
|
|
104
|
+
UNUserNotificationCenter.current().delegate = self
|
|
89
105
|
}
|
|
90
106
|
|
|
91
107
|
@objc private func handlePushReceivedNotification(_ note: Notification) {
|
|
92
108
|
guard let userInfo = note.userInfo else { return }
|
|
109
|
+
notifyListeners("pushReceived", data: parsePushPayload(userInfo))
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// Builds the JS-side `pushReceived` / `pushClicked` payload from an
|
|
113
|
+
/// APNs userInfo dict. Extracted so willPresent + didReceive +
|
|
114
|
+
/// AppDelegate-bridge paths all share one shape.
|
|
115
|
+
private func parsePushPayload(_ userInfo: [AnyHashable: Any]) -> [String: Any] {
|
|
93
116
|
let aps = userInfo["aps"] as? [String: Any]
|
|
94
117
|
let alert = aps?["alert"] as? [String: Any]
|
|
95
118
|
var payload: [String: Any] = ["raw": userInfo]
|
|
96
119
|
if let title = alert?["title"] as? String { payload["title"] = title }
|
|
97
120
|
if let body = alert?["body"] as? String { payload["body"] = body }
|
|
98
121
|
var data: [String: Any] = [:]
|
|
99
|
-
for (k, v) in userInfo where k as? String != "aps" {
|
|
122
|
+
for (k, v) in userInfo where (k as? String) != "aps" {
|
|
100
123
|
if let key = k as? String { data[key] = v }
|
|
101
124
|
}
|
|
102
125
|
if !data.isEmpty { payload["data"] = data }
|
|
103
|
-
|
|
126
|
+
return payload
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// MARK: - UNUserNotificationCenterDelegate (MMP-182)
|
|
130
|
+
|
|
131
|
+
/// Fires when a push arrives while the app is in the foreground. We
|
|
132
|
+
/// explicitly opt in to banner + sound + badge so customers see
|
|
133
|
+
/// notifications regardless of whether the app is open. We also
|
|
134
|
+
/// forward the payload via the existing `pushReceived` listener so
|
|
135
|
+
/// app code can inspect it without relying on banners alone.
|
|
136
|
+
public func userNotificationCenter(
|
|
137
|
+
_ center: UNUserNotificationCenter,
|
|
138
|
+
willPresent notification: UNNotification,
|
|
139
|
+
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
|
|
140
|
+
) {
|
|
141
|
+
let userInfo = notification.request.content.userInfo
|
|
142
|
+
notifyListeners("pushReceived", data: parsePushPayload(userInfo))
|
|
143
|
+
if #available(iOS 14.0, *) {
|
|
144
|
+
completionHandler([.banner, .list, .sound, .badge])
|
|
145
|
+
} else {
|
|
146
|
+
completionHandler([.alert, .sound, .badge])
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/// Fires when the user taps a notification (foreground OR cold
|
|
151
|
+
/// start from the lock screen). Forwarded as a separate `pushClicked`
|
|
152
|
+
/// listener so app code can route to the right screen — e.g.,
|
|
153
|
+
/// open the linked product detail when the user taps a marketing push.
|
|
154
|
+
public func userNotificationCenter(
|
|
155
|
+
_ center: UNUserNotificationCenter,
|
|
156
|
+
didReceive response: UNNotificationResponse,
|
|
157
|
+
withCompletionHandler completionHandler: @escaping () -> Void
|
|
158
|
+
) {
|
|
159
|
+
let userInfo = response.notification.request.content.userInfo
|
|
160
|
+
notifyListeners("pushClicked", data: parsePushPayload(userInfo))
|
|
161
|
+
completionHandler()
|
|
104
162
|
}
|
|
105
163
|
|
|
106
164
|
// MARK: - Lifecycle
|
|
@@ -124,9 +182,56 @@ public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
124
182
|
fileURL: queueFile,
|
|
125
183
|
maxSize: call.getInt("offlineQueueMaxSize") ?? 1000
|
|
126
184
|
)
|
|
185
|
+
|
|
186
|
+
// MMP-205 — wire up the native batch sender so events actually
|
|
187
|
+
// leave the device. Kicks an immediate flush + starts a 30s
|
|
188
|
+
// periodic flush + flushes on every foreground transition.
|
|
189
|
+
batchSender = NativeBatchSender(
|
|
190
|
+
apiBaseUrl: apiBaseUrl,
|
|
191
|
+
projectKey: projectKey,
|
|
192
|
+
platformHeader: "ios",
|
|
193
|
+
debug: debug
|
|
194
|
+
)
|
|
195
|
+
scheduleFlushTimer()
|
|
196
|
+
observeForegroundForFlush()
|
|
197
|
+
kickFlush(reason: "initialize")
|
|
198
|
+
|
|
127
199
|
call.resolve()
|
|
128
200
|
}
|
|
129
201
|
|
|
202
|
+
/// Schedules a periodic 30s flush so events that arrive in bursts
|
|
203
|
+
/// (or during background) leave the device on a steady cadence.
|
|
204
|
+
private func scheduleFlushTimer() {
|
|
205
|
+
flushTimer?.invalidate()
|
|
206
|
+
DispatchQueue.main.async { [weak self] in
|
|
207
|
+
self?.flushTimer = Timer.scheduledTimer(withTimeInterval: 30.0, repeats: true) { [weak self] _ in
|
|
208
|
+
self?.kickFlush(reason: "timer")
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private func observeForegroundForFlush() {
|
|
214
|
+
NotificationCenter.default.addObserver(
|
|
215
|
+
forName: UIApplication.willEnterForegroundNotification,
|
|
216
|
+
object: nil,
|
|
217
|
+
queue: .main
|
|
218
|
+
) { [weak self] _ in
|
|
219
|
+
self?.kickFlush(reason: "foreground")
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/// Fire-and-forget flush. Safe to call freely; the sender's serial
|
|
224
|
+
/// queue ensures only one drain runs at a time.
|
|
225
|
+
private func kickFlush(reason: String) {
|
|
226
|
+
guard let queue = offlineQueue, let sender = batchSender else { return }
|
|
227
|
+
if debug { print("[apex-capacitor] flush kicked (\(reason))") }
|
|
228
|
+
sender.flush(queue: queue) { [weak self] flushed, remaining in
|
|
229
|
+
if self?.debug == true && (flushed > 0 || remaining > 0) {
|
|
230
|
+
print("[apex-capacitor] flush done — sent \(flushed), remaining \(remaining)")
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
130
235
|
// MARK: - ATT
|
|
131
236
|
|
|
132
237
|
@objc public func requestTrackingAuthorization(_ call: CAPPluginCall) {
|
|
@@ -310,6 +415,15 @@ public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
310
415
|
codablePayload[key] = AnyCodable(v)
|
|
311
416
|
}
|
|
312
417
|
}
|
|
418
|
+
|
|
419
|
+
// MMP-205 — stamp testMode + platform on every event so the
|
|
420
|
+
// server-side dashboards' filters work. Mirrors the JS-side
|
|
421
|
+
// BatchSender which does the same in web.ts.
|
|
422
|
+
if testMode {
|
|
423
|
+
codablePayload["testMode"] = AnyCodable(true)
|
|
424
|
+
}
|
|
425
|
+
codablePayload["platform"] = AnyCodable("ios")
|
|
426
|
+
codablePayload["timestamp"] = AnyCodable(ISO8601DateFormatter().string(from: Date()))
|
|
313
427
|
let event = NativeQueuedEvent(
|
|
314
428
|
id: id,
|
|
315
429
|
payload: codablePayload,
|
|
@@ -318,6 +432,10 @@ public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
318
432
|
)
|
|
319
433
|
do {
|
|
320
434
|
try queue.enqueue(event)
|
|
435
|
+
// MMP-205 — kick a flush after every track so single-event
|
|
436
|
+
// sessions don't sit in the queue until the periodic timer.
|
|
437
|
+
// The sender's serial gate makes this safe to spam.
|
|
438
|
+
kickFlush(reason: "track")
|
|
321
439
|
call.resolve()
|
|
322
440
|
} catch {
|
|
323
441
|
call.reject("Failed to enqueue event: \(error.localizedDescription)")
|
|
@@ -342,10 +460,16 @@ public class ApexCapacitorPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
342
460
|
}
|
|
343
461
|
|
|
344
462
|
@objc public func flushQueue(_ call: CAPPluginCall) {
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
//
|
|
348
|
-
|
|
463
|
+
// MMP-205 — properly drain the native queue via the native
|
|
464
|
+
// BatchSender. The previous no-op (events stranded on disk)
|
|
465
|
+
// is friction-log F6.
|
|
466
|
+
guard let queue = offlineQueue, let sender = batchSender else {
|
|
467
|
+
call.resolve(["flushed": 0, "remaining": 0])
|
|
468
|
+
return
|
|
469
|
+
}
|
|
470
|
+
sender.flush(queue: queue) { flushed, remaining in
|
|
471
|
+
call.resolve(["flushed": flushed, "remaining": remaining])
|
|
472
|
+
}
|
|
349
473
|
}
|
|
350
474
|
|
|
351
475
|
@objc public func setTestMode(_ call: CAPPluginCall) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apex-inc/capacitor-plugin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "Apex Capacitor plugin — iOS/Android attribution, events, deep linking, SKAN, and offline-tolerant tracking for Capacitor apps.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|