Skip to content

Commit 5726b6a

Browse files
author
Rodrigo Gomez Palacio
committed
Flush delta queue on start
Motivation: we need to flush the delta queue on start in order to immediately trigger updates that would return a RYW token so we can unblock IAM fetch as soon as possible.
1 parent 8fe259a commit 5726b6a

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/OSOperationRepo.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,21 @@ public class OSOperationRepo: NSObject {
107107
// TODO: We can make this method internal once there is no manual adding of a Delta except through stores.
108108
This can happen when session data and purchase data use the model / store / listener infrastructure.
109109
*/
110-
public func enqueueDelta(_ delta: OSDelta) {
110+
public func enqueueDelta(_ delta: OSDelta, flush: Bool = false) {
111111
guard !OneSignalConfigManager.shouldAwaitAppIdAndLogMissingPrivacyConsent(forMethod: nil) else {
112112
return
113113
}
114114
start()
115115
self.dispatchQueue.async {
116116
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "OSOperationRepo enqueueDelta: \(delta)")
117117
self.deltaQueue.append(delta)
118+
118119
// Persist the deltas (including new delta) to storage
119120
OneSignalUserDefaults.initShared().saveCodeableData(forKey: OS_OPERATION_REPO_DELTA_QUEUE_KEY, withValue: self.deltaQueue)
121+
122+
if flush {
123+
self.flushDeltaQueue()
124+
}
120125
}
121126
}
122127

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ extension OneSignalUserManagerImpl {
551551

552552
userExecutor!.executePendingRequests()
553553
OSOperationRepo.sharedInstance.paused = false
554-
updatePropertiesDeltas(property: .session_count, value: 1)
554+
updatePropertiesDeltas(property: .session_count, value: 1, flush: true)
555555

556556
// Fetch the user's data if there is a onesignal_id
557557
if let onesignalId = onesignalId {
@@ -567,7 +567,7 @@ extension OneSignalUserManagerImpl {
567567
/// It enqueues an OSDelta to the Operation Repo.
568568
///
569569
/// - Parameter property:Expected inputs are `.session_time"`, `.session_count"`, and `.purchases"`.
570-
func updatePropertiesDeltas(property: OSPropertiesSupportedProperty, value: Any) {
570+
func updatePropertiesDeltas(property: OSPropertiesSupportedProperty, value: Any, flush: Bool = false) {
571571
guard !OneSignalConfigManager.shouldAwaitAppIdAndLogMissingPrivacyConsent(forMethod: "updatePropertiesDeltas") else {
572572
return
573573
}
@@ -583,7 +583,7 @@ extension OneSignalUserManagerImpl {
583583
property: property.rawValue,
584584
value: value
585585
)
586-
OSOperationRepo.sharedInstance.enqueueDelta(delta)
586+
OSOperationRepo.sharedInstance.enqueueDelta(delta, flush: flush)
587587
}
588588

589589
/// Time processors forward the session time to this method.

iOS_SDK/OneSignalSDK/OneSignalUserTests/OneSignalUserTests.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,8 @@ final class OneSignalUserTests: XCTestCase {
8787
/* When */
8888

8989
OneSignalUserManagerImpl.sharedInstance.sendSessionTime(100)
90-
91-
// This adds a `session_count` property with value of 1
92-
// It also sets `refresh_device_metadata` to `true`
93-
OneSignalUserManagerImpl.sharedInstance.startNewSession()
90+
91+
OneSignalUserManagerImpl.sharedInstance.updatePropertiesDeltas(property: .session_count, value: 1, flush: false)
9492

9593
OneSignalUserManagerImpl.sharedInstance.setLanguage("lang_1")
9694

@@ -108,7 +106,6 @@ final class OneSignalUserTests: XCTestCase {
108106

109107
OneSignalUserManagerImpl.sharedInstance.addTags(["a": "a", "b": "b", "c": "c"])
110108

111-
OneSignalUserManagerImpl.sharedInstance.startNewSession()
112109

113110
let purchases = [
114111
["sku": "sku1", "amount": "1.25", "iso": "USD"],
@@ -118,6 +115,10 @@ final class OneSignalUserTests: XCTestCase {
118115
OneSignalUserManagerImpl.sharedInstance.sendPurchases(purchases as [[String: AnyObject]])
119116

120117
OneSignalUserManagerImpl.sharedInstance.setLocation(latitude: 111.111, longitude: 222.222)
118+
119+
// This adds a `session_count` property with value of 1
120+
// It also sets `refresh_device_metadata` to `true`
121+
OneSignalUserManagerImpl.sharedInstance.startNewSession()
121122

122123
/* Then */
123124

0 commit comments

Comments
 (0)