@@ -246,12 +246,24 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
246246 request. subscriptionModel. hydrate ( response)
247247 } onFailure: { error in
248248 OneSignalLog . onesignalLog ( . LL_ERROR, message: " OSSubscriptionOperationExecutor create subscription request failed with error: \( error. debugDescription) " )
249- // TODO: Differentiate error cases
250- // If the error is not retryable, remove from cache and queue
251- if let nsError = error as? NSError ,
252- nsError. code < 500 && nsError. code != 0 {
253- self . addRequestQueue. removeAll ( where: { $0 == request} )
254- OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_ADD_REQUEST_QUEUE_KEY, withValue: self . addRequestQueue)
249+ if let nsError = error as? NSError {
250+ let responseType = OSNetworkingUtils . getResponseStatusType ( nsError. code)
251+ if responseType == . missing {
252+ self . addRequestQueue. removeAll ( where: { $0 == request} )
253+ OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_ADD_REQUEST_QUEUE_KEY, withValue: self . addRequestQueue)
254+ // Logout if the user in the SDK is the same
255+ guard OneSignalUserManagerImpl . sharedInstance. isCurrentUser ( request. identityModel)
256+ else {
257+ return
258+ }
259+ // The subscription has been deleted along with the user, so remove the subscription_id but keep the same push subscription model
260+ OneSignalUserManagerImpl . sharedInstance. pushSubscriptionModelStore. getModels ( ) [ OS_PUSH_SUBSCRIPTION_MODEL_KEY] ? . subscriptionId = nil
261+ OneSignalUserManagerImpl . sharedInstance. _logout ( )
262+ } else if responseType != . retryable {
263+ // Fail, no retry, remove from cache and queue
264+ self . addRequestQueue. removeAll ( where: { $0 == request} )
265+ OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_ADD_REQUEST_QUEUE_KEY, withValue: self . addRequestQueue)
266+ }
255267 }
256268 }
257269 }
@@ -276,12 +288,14 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
276288
277289 } onFailure: { error in
278290 OneSignalLog . onesignalLog ( . LL_ERROR, message: " OSSubscriptionOperationExecutor delete subscription request failed with error: \( error. debugDescription) " )
279- // TODO: Differentiate error cases
280- // If the error is not retryable, remove from cache and queue
281- if let nsError = error as? NSError ,
282- nsError. code < 500 && nsError. code != 0 {
283- self . removeRequestQueue. removeAll ( where: { $0 == request} )
284- OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_REMOVE_REQUEST_QUEUE_KEY, withValue: self . removeRequestQueue)
291+ if let nsError = error as? NSError {
292+ let responseType = OSNetworkingUtils . getResponseStatusType ( nsError. code)
293+ if responseType != . retryable {
294+ // Fail, no retry, remove from cache and queue
295+ // If this request returns a missing status, that is ok as this is a delete request
296+ self . removeRequestQueue. removeAll ( where: { $0 == request} )
297+ OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_REMOVE_REQUEST_QUEUE_KEY, withValue: self . removeRequestQueue)
298+ }
285299 }
286300 }
287301 }
@@ -306,12 +320,13 @@ class OSSubscriptionOperationExecutor: OSOperationExecutor {
306320
307321 } onFailure: { error in
308322 OneSignalLog . onesignalLog ( . LL_ERROR, message: " OSSubscriptionOperationExecutor update subscription request failed with error: \( error. debugDescription) " )
309- // TODO: Differentiate error cases
310- // If the error is not retryable, remove from cache and queue
311- if let nsError = error as? NSError ,
312- nsError. code < 500 && nsError. code != 0 {
313- self . updateRequestQueue. removeAll ( where: { $0 == request} )
314- OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_UPDATE_REQUEST_QUEUE_KEY, withValue: self . updateRequestQueue)
323+ if let nsError = error as? NSError {
324+ let responseType = OSNetworkingUtils . getResponseStatusType ( nsError. code)
325+ if responseType != . retryable {
326+ // Fail, no retry, remove from cache and queue
327+ self . updateRequestQueue. removeAll ( where: { $0 == request} )
328+ OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_SUBSCRIPTION_EXECUTOR_UPDATE_REQUEST_QUEUE_KEY, withValue: self . updateRequestQueue)
329+ }
315330 }
316331 }
317332 }
0 commit comments