Skip to content

Commit 7d7f13d

Browse files
committed
Add convenience accessor to the push subscription model
* On the user manager * We access the push subscription model via the model store instead of via `user.pushSubscriptionModel`. * If privacy consent is set in a wrong order, we may have sent requests, but hydrate on a mock user. * However, we want to set tokens and subscription ID on the actual push subscription model.
1 parent ea6c30c commit 7d7f13d

File tree

5 files changed

+18
-9
lines changed

5 files changed

+18
-9
lines changed

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSIdentityOperationExecutor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
193193
return
194194
}
195195
// The subscription has been deleted along with the user, so remove the subscription_id but keep the same push subscription model
196-
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY]?.subscriptionId = nil
196+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId = nil
197197
OneSignalUserManagerImpl.sharedInstance._logout()
198198
} else if responseType == .conflict {
199199
self.addRequestQueue.removeAll(where: { $0 == request})

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSPropertyOperationExecutor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class OSPropertyOperationExecutor: OSOperationExecutor {
152152
return
153153
}
154154
// The subscription has been deleted along with the user, so remove the subscription_id but keep the same push subscription model
155-
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY]?.subscriptionId = nil
155+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId = nil
156156
OneSignalUserManagerImpl.sharedInstance._logout()
157157
} else if responseType != .retryable {
158158
// Fail, no retry, remove from cache and queue

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSSubscriptionOperationExecutor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
264264
return
265265
}
266266
// The subscription has been deleted along with the user, so remove the subscription_id but keep the same push subscription model
267-
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY]?.subscriptionId = nil
267+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId = nil
268268
OneSignalUserManagerImpl.sharedInstance._logout()
269269
} else if responseType != .retryable {
270270
// Fail, no retry, remove from cache and queue

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSUserRequests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,12 @@ class OSUserExecutor {
201201
// Ideally we only get push subscription for this device in the response, not others
202202

203203
// Hydrate the push subscription if we don't already have a subscription ID AND token matches the original request
204-
if (OneSignalUserManagerImpl.sharedInstance.user.pushSubscriptionModel.subscriptionId == nil),
204+
if (OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId == nil),
205205
let subscriptionObject = parseSubscriptionObjectResponse(response) {
206206
for subModel in subscriptionObject {
207207
if subModel["type"] as? String == "iOSPush",
208208
areTokensEqual(tokenA: originalPushToken, tokenB: subModel["token"] as? String) { // response may have "" token or no token
209-
OneSignalUserManagerImpl.sharedInstance.user.pushSubscriptionModel.hydrate(subModel)
209+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.hydrate(subModel)
210210
if let subId = subModel["id"] as? String {
211211
OSNotificationsManager.setPushSubscriptionId(subId)
212212
}
@@ -384,7 +384,7 @@ class OSUserExecutor {
384384
let responseType = OSNetworkingUtils.getResponseStatusType(nsError.code)
385385
if responseType != .retryable {
386386
// Fail, no retry, remove the subscription_id but keep the same push subscription model
387-
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY]?.subscriptionId = nil
387+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId = nil
388388
removeFromQueue(request)
389389
}
390390
}
@@ -453,7 +453,7 @@ class OSUserExecutor {
453453
return
454454
}
455455
// The subscription has been deleted along with the user, so remove the subscription_id but keep the same push subscription model
456-
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY]?.subscriptionId = nil
456+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId = nil
457457
OneSignalUserManagerImpl.sharedInstance._logout()
458458
}
459459
} else {
@@ -532,7 +532,7 @@ class OSUserExecutor {
532532
// If this is a on-new-session's fetch user call, check that the subscription still exists
533533
if request.onNewSession,
534534
OneSignalUserManagerImpl.sharedInstance.isCurrentUser(request.identityModel),
535-
let subId = OneSignalUserManagerImpl.sharedInstance.user.pushSubscriptionModel.subscriptionId,
535+
let subId = OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId,
536536
let subscriptionObjects = parseSubscriptionObjectResponse(response)
537537
{
538538
var subscriptionExists = false
@@ -564,7 +564,7 @@ class OSUserExecutor {
564564
return
565565
}
566566
// The subscription has been deleted along with the user, so remove the subscription_id but keep the same push subscription model
567-
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY]?.subscriptionId = nil
567+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModel?.subscriptionId = nil
568568
OneSignalUserManagerImpl.sharedInstance._logout()
569569
} else if responseType != .retryable {
570570
// If the error is not retryable, remove from cache and queue

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
9494
return _user?.identityModel.onesignalId
9595
}
9696

97+
/**
98+
Convenience accessor. We access the push subscription model via the model store instead of via`user.pushSubscriptionModel`.
99+
If privacy consent is set in a wrong order, we may have sent requests, but hydrate on a mock user.
100+
However, we want to set tokens and subscription ID on the actual push subscription model.
101+
*/
102+
var pushSubscriptionModel: OSSubscriptionModel? {
103+
return pushSubscriptionModelStore.getModel(key: OS_PUSH_SUBSCRIPTION_MODEL_KEY)
104+
}
105+
97106
@objc public var pushSubscriptionId: String? {
98107
return _user?.pushSubscriptionModel.subscriptionId
99108
}

0 commit comments

Comments
 (0)