@@ -284,19 +284,35 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
284284 }
285285
286286 OneSignalLog . onesignalLog ( . LL_VERBOSE, message: " OSSubscriptionOperationExecutor: executeCreateSubscriptionRequest making request: \( request) " )
287- OneSignalCoreImpl . sharedClient ( ) . execute ( request) { result in
287+ OneSignalCoreImpl . sharedClient ( ) . execute ( request) { response in
288288 // On success, remove request from cache (even if not hydrating model), and hydrate model
289289 self . dispatchQueue. async {
290290 self . addRequestQueue. removeAll ( where: { $0 == request} )
291291 OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_ADD_REQUEST_QUEUE_KEY, withValue: self . addRequestQueue)
292292
293- guard let response = result ? [ " subscription " ] as? [ String : Any ] else {
293+ guard let response = response ? [ " subscription " ] as? [ String : Any ] else {
294294 OneSignalLog . onesignalLog ( . LL_ERROR, message: " Unabled to parse response to create subscription request " )
295295 if inBackground {
296296 OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
297297 }
298298 return
299299 }
300+
301+ if let onesignalId = request. identityModel. onesignalId {
302+ if let rywToken = response [ " ryw_token " ] as? String
303+ {
304+ let rywDelay = response [ " ryw_delay " ] as? NSNumber
305+ OSConsistencyManager . shared. setRywTokenAndDelay (
306+ id: onesignalId,
307+ key: OSIamFetchOffsetKey . subscriptionUpdate,
308+ value: OSReadYourWriteData ( rywToken: rywToken, rywDelay: rywDelay)
309+ )
310+ } else {
311+ // handle a potential regression where ryw_token is no longer returned by API
312+ OSConsistencyManager . shared. resolveConditionsWithID ( id: OSIamFetchReadyCondition . CONDITIONID)
313+ }
314+ }
315+
300316 request. subscriptionModel. hydrate ( response)
301317 if inBackground {
302318 OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
@@ -393,7 +409,7 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
393409 OSBackgroundTaskManager . beginBackgroundTask ( backgroundTaskIdentifier)
394410 }
395411
396- OneSignalCoreImpl . sharedClient ( ) . execute ( request) { _ in
412+ OneSignalCoreImpl . sharedClient ( ) . execute ( request) { response in
397413 // On success, remove request from cache. No model hydration occurs.
398414 // For example, if app restarts and we read in operations between sending this off and getting the response
399415 self . dispatchQueue. async {
@@ -403,6 +419,21 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
403419 OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
404420 }
405421 }
422+
423+ if let onesignalId = OneSignalUserManagerImpl . sharedInstance. onesignalId {
424+ if let rywToken = response ? [ " ryw_token " ] as? String
425+ {
426+ let rywDelay = response ? [ " ryw_delay " ] as? NSNumber
427+ OSConsistencyManager . shared. setRywTokenAndDelay (
428+ id: onesignalId,
429+ key: OSIamFetchOffsetKey . subscriptionUpdate,
430+ value: OSReadYourWriteData ( rywToken: rywToken, rywDelay: rywDelay)
431+ )
432+ } else {
433+ // handle a potential regression where ryw_token is no longer returned by API
434+ OSConsistencyManager . shared. resolveConditionsWithID ( id: OSIamFetchReadyCondition . CONDITIONID)
435+ }
436+ }
406437 } onFailure: { error in
407438 OneSignalLog . onesignalLog ( . LL_ERROR, message: " OSSubscriptionOperationExecutor update subscription request failed with error: \( error. debugDescription) " )
408439 self . dispatchQueue. async {
0 commit comments