Skip to content

Commit 0b6ddc8

Browse files
committed
Refactor create user to make the alias explicit
* The 2nd use of create user is passing an external ID to hydrate the OSID. Let's make it explicit by using the alias as a parameter and creating an additional initializer for the Create User Request. * Here I also removed encoding and decoding of the `path` property. This should not be decoded as it may not be encoded yet. The `prepareForExecution` will always generate the path. Other requests follow this pattern already.
1 parent 589bc34 commit 0b6ddc8

File tree

2 files changed

+22
-23
lines changed

2 files changed

+22
-23
lines changed

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Executors/OSUserExecutor.swift

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,10 @@ extension OSUserExecutor {
191191
}
192192

193193
/**
194-
This Create User call expects an Identity Model with external ID to hydrate the OneSignal ID
194+
This Create User call expects an external ID and the Identity Model to hydrate with the OneSignal ID
195195
*/
196-
static func createUser(identityModel: OSIdentityModel) {
197-
guard identityModel.externalId != nil else {
198-
OneSignalLog.onesignalLog(.LL_ERROR, message: "createUser(identityModel) called with missing external ID")
199-
return
200-
}
201-
202-
let request = OSRequestCreateUser(identityModel: identityModel, propertiesModel: nil, pushSubscriptionModel: nil, originalPushToken: nil)
196+
static func createUser(aliasLabel: String, aliasId: String, identityModel: OSIdentityModel) {
197+
let request = OSRequestCreateUser(aliasLabel: aliasLabel, aliasId: aliasId, identityModel: identityModel)
203198
appendToQueue(request)
204199
executePendingRequests()
205200
}
@@ -209,7 +204,7 @@ extension OSUserExecutor {
209204
return
210205
}
211206
guard request.prepareForExecution() else {
212-
// Currently there are no requirements needed before sending this request
207+
// Currently there are no requirements needed before sending this request, so this will set the path
213208
return
214209
}
215210
request.sentToClient = true
@@ -369,7 +364,7 @@ extension OSUserExecutor {
369364
createUser(OneSignalUserManagerImpl.sharedInstance.user)
370365
} else {
371366
// This will hydrate the OneSignal ID for any pending requests
372-
createUser(identityModel: request.identityModelToUpdate)
367+
createUser(aliasLabel: request.aliasLabel, aliasId: request.aliasId, identityModel: request.identityModelToUpdate)
373368
}
374369
} else if responseType == .invalid || responseType == .unauthorized {
375370
// Failed, no retry

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Requests/OSRequestCreateUser.swift

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class OSRequestCreateUser: OneSignalRequest, OSUserRequest {
6666
self.originalPushToken = pushSubscriptionModel.address
6767
}
6868

69-
init(identityModel: OSIdentityModel, propertiesModel: OSPropertiesModel?, pushSubscriptionModel: OSSubscriptionModel?, originalPushToken: String?) {
69+
init(identityModel: OSIdentityModel, propertiesModel: OSPropertiesModel, pushSubscriptionModel: OSSubscriptionModel, originalPushToken: String?) {
7070
self.identityModel = identityModel
7171
self.pushSubscriptionModel = pushSubscriptionModel
7272
self.originalPushToken = originalPushToken
@@ -82,18 +82,25 @@ class OSRequestCreateUser: OneSignalRequest, OSUserRequest {
8282
}
8383

8484
// Properties Object
85-
if let propertiesModel = propertiesModel {
86-
var propertiesObject: [String: Any] = [:]
87-
propertiesObject["language"] = propertiesModel.language
88-
propertiesObject["timezone_id"] = propertiesModel.timezoneId
89-
params["properties"] = propertiesObject
90-
}
85+
var propertiesObject: [String: Any] = [:]
86+
propertiesObject["language"] = propertiesModel.language
87+
propertiesObject["timezone_id"] = propertiesModel.timezoneId
88+
params["properties"] = propertiesObject
9189

9290
params["refresh_device_metadata"] = true
9391
self.parameters = params
94-
if let pushSub = pushSubscriptionModel {
95-
self.updatePushSubscriptionModel(pushSub)
96-
}
92+
self.updatePushSubscriptionModel(pushSubscriptionModel)
93+
self.method = POST
94+
}
95+
96+
init(aliasLabel: String, aliasId: String, identityModel: OSIdentityModel) {
97+
self.identityModel = identityModel
98+
self.stringDescription = "<OSRequestCreateUser with alias \(aliasLabel): \(aliasId)>"
99+
super.init()
100+
self.parameters = [
101+
"identity": [aliasLabel: aliasId],
102+
"refresh_device_metadata": true,
103+
]
97104
self.method = POST
98105
}
99106

@@ -103,7 +110,6 @@ class OSRequestCreateUser: OneSignalRequest, OSUserRequest {
103110
coder.encode(originalPushToken, forKey: "originalPushToken")
104111
coder.encode(parameters, forKey: "parameters")
105112
coder.encode(method.rawValue, forKey: "method") // Encodes as String
106-
coder.encode(path, forKey: "path")
107113
coder.encode(timestamp, forKey: "timestamp")
108114
}
109115

@@ -112,7 +118,6 @@ class OSRequestCreateUser: OneSignalRequest, OSUserRequest {
112118
let identityModel = coder.decodeObject(forKey: "identityModel") as? OSIdentityModel,
113119
let parameters = coder.decodeObject(forKey: "parameters") as? [String: Any],
114120
let rawMethod = coder.decodeObject(forKey: "method") as? UInt32,
115-
let path = coder.decodeObject(forKey: "path") as? String,
116121
let timestamp = coder.decodeObject(forKey: "timestamp") as? Date
117122
else {
118123
// Log error
@@ -125,7 +130,6 @@ class OSRequestCreateUser: OneSignalRequest, OSUserRequest {
125130
super.init()
126131
self.parameters = parameters
127132
self.method = HTTPMethod(rawValue: rawMethod)
128-
self.path = path
129133
self.timestamp = timestamp
130134
}
131135
}

0 commit comments

Comments
 (0)