Skip to content

Commit 88e31f5

Browse files
committed
Add Identity Model ID to Deltas to track which user
* The model on a Delta for property change is the properties model. However, the identity is needed to send the request. * We have been setting the identity model as the current user's when these Deltas become Requests. * However, the timing can be buggy when we flush Deltas when users change. The Operation Repo and Property Executor use a dispatch queue so by the time the request is made, the user may have changed.
1 parent b89b243 commit 88e31f5

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/OSDelta.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727

2828
import Foundation
29+
import OneSignalCore
2930

3031
// TODO: Known Issue: Since these don't carry the app_id, it may have changed by the time Deltas become Requests, if app_id changes.
3132
// All requests requiring unique ID's will effectively be dropped.
@@ -34,6 +35,7 @@ open class OSDelta: NSObject, NSCoding {
3435
public let name: String
3536
public let deltaId: String
3637
public let timestamp: Date
38+
public let identityModelId: String
3739
public var model: OSModel
3840
public let property: String
3941
public let value: Any
@@ -42,10 +44,11 @@ open class OSDelta: NSObject, NSCoding {
4244
return "<OSDelta \(name) with property: \(property) value: \(value)>"
4345
}
4446

45-
public init(name: String, model: OSModel, property: String, value: Any) {
47+
public init(name: String, identityModelId: String, model: OSModel, property: String, value: Any) {
4648
self.name = name
4749
self.deltaId = UUID().uuidString
4850
self.timestamp = Date()
51+
self.identityModelId = identityModelId
4952
self.model = model
5053
self.property = property
5154
self.value = value
@@ -55,6 +58,7 @@ open class OSDelta: NSObject, NSCoding {
5558
coder.encode(name, forKey: "name")
5659
coder.encode(deltaId, forKey: "deltaId")
5760
coder.encode(timestamp, forKey: "timestamp")
61+
coder.encode(identityModelId, forKey: "identityModelId")
5862
coder.encode(model, forKey: "model")
5963
coder.encode(property, forKey: "property")
6064
coder.encode(value, forKey: "value")
@@ -64,17 +68,19 @@ open class OSDelta: NSObject, NSCoding {
6468
guard let name = coder.decodeObject(forKey: "name") as? String,
6569
let deltaId = coder.decodeObject(forKey: "deltaId") as? String,
6670
let timestamp = coder.decodeObject(forKey: "timestamp") as? Date,
71+
let identityModelId = coder.decodeObject(forKey: "identityModelId") as? String,
6772
let model = coder.decodeObject(forKey: "model") as? OSModel,
6873
let property = coder.decodeObject(forKey: "property") as? String,
6974
let value = coder.decodeObject(forKey: "value")
7075
else {
71-
// Log error
76+
OneSignalLog.onesignalLog(.LL_ERROR, message: "Unable to init OSDelta from cache")
7277
return nil
7378
}
7479

7580
self.name = name
7681
self.deltaId = deltaId
7782
self.timestamp = timestamp
83+
self.identityModelId = identityModelId
7884
self.model = model
7985
self.property = property
8086
self.value = value

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSIdentityModelStoreListener.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class OSIdentityModelStoreListener: OSModelStoreListener {
6060

6161
return OSDelta(
6262
name: name,
63+
identityModelId: args.model.modelId,
6364
model: args.model,
6465
property: args.property,
6566
value: args.newValue

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSPropertiesModelStoreListener.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class OSPropertiesModelStoreListener: OSModelStoreListener {
4747
func getUpdateModelDelta(_ args: OSModelChangedArgs) -> OSDelta? {
4848
return OSDelta(
4949
name: OS_UPDATE_PROPERTIES_DELTA,
50+
identityModelId: OneSignalUserManagerImpl.sharedInstance.user.identityModel.modelId,
5051
model: args.model,
5152
property: args.property,
5253
value: args.newValue

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSSubscriptionModelStoreListener.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class OSSubscriptionModelStoreListener: OSModelStoreListener {
3939
func getAddModelDelta(_ model: OSSubscriptionModel) -> OSDelta? {
4040
return OSDelta(
4141
name: OS_ADD_SUBSCRIPTION_DELTA,
42+
identityModelId: OneSignalUserManagerImpl.sharedInstance.user.identityModel.modelId,
4243
model: model,
4344
property: model.type.rawValue, // push, email, sms
4445
value: model.address ?? ""
@@ -51,6 +52,7 @@ class OSSubscriptionModelStoreListener: OSModelStoreListener {
5152
func getRemoveModelDelta(_ model: OSSubscriptionModel) -> OSDelta? {
5253
return OSDelta(
5354
name: OS_REMOVE_SUBSCRIPTION_DELTA,
55+
identityModelId: OneSignalUserManagerImpl.sharedInstance.user.identityModel.modelId,
5456
model: model,
5557
property: model.type.rawValue, // push, email, sms
5658
value: model.address ?? ""
@@ -60,6 +62,7 @@ class OSSubscriptionModelStoreListener: OSModelStoreListener {
6062
func getUpdateModelDelta(_ args: OSModelChangedArgs) -> OSDelta? {
6163
return OSDelta(
6264
name: OS_UPDATE_SUBSCRIPTION_DELTA,
65+
identityModelId: OneSignalUserManagerImpl.sharedInstance.user.identityModel.modelId,
6366
model: args.model,
6467
property: args.property,
6568
value: args.newValue

0 commit comments

Comments
 (0)