@@ -103,7 +103,7 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
103103 OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_IDENTITY_EXECUTOR_DELTA_QUEUE_KEY, withValue: self . deltaQueue)
104104 }
105105
106- func processDeltaQueue( ) {
106+ func processDeltaQueue( inBackground : Bool ) {
107107 if !deltaQueue. isEmpty {
108108 OneSignalLog . onesignalLog ( . LL_VERBOSE, message: " OSIdentityOperationExecutor processDeltaQueue with queue: \( deltaQueue) " )
109109 }
@@ -139,10 +139,10 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
139139
140140 OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_IDENTITY_EXECUTOR_DELTA_QUEUE_KEY, withValue: self . deltaQueue) // This should be empty, can remove instead?
141141
142- processRequestQueue ( )
142+ processRequestQueue ( inBackground : inBackground )
143143 }
144144
145- func processRequestQueue( ) {
145+ func processRequestQueue( inBackground : Bool ) {
146146 let requestQueue : [ OneSignalRequest ] = addRequestQueue + removeRequestQueue
147147
148148 if requestQueue. isEmpty {
@@ -154,16 +154,16 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
154154 return first. timestamp < second. timestamp
155155 } ) {
156156 if request. isKind ( of: OSRequestAddAliases . self) , let addAliasesRequest = request as? OSRequestAddAliases {
157- executeAddAliasesRequest ( addAliasesRequest)
157+ executeAddAliasesRequest ( addAliasesRequest, inBackground : inBackground )
158158 } else if request. isKind ( of: OSRequestRemoveAlias . self) , let removeAliasRequest = request as? OSRequestRemoveAlias {
159- executeRemoveAliasRequest ( removeAliasRequest)
159+ executeRemoveAliasRequest ( removeAliasRequest, inBackground : inBackground )
160160 } else {
161161 OneSignalLog . onesignalLog ( . LL_DEBUG, message: " OSIdentityOperationExecutor.processRequestQueue met incompatible OneSignalRequest type: \( request) . " )
162162 }
163163 }
164164 }
165165
166- func executeAddAliasesRequest( _ request: OSRequestAddAliases ) {
166+ func executeAddAliasesRequest( _ request: OSRequestAddAliases , inBackground : Bool ) {
167167 guard !request. sentToClient else {
168168 return
169169 }
@@ -174,11 +174,19 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
174174
175175 OneSignalLog . onesignalLog ( . LL_VERBOSE, message: " OSIdentityOperationExecutor: executeAddAliasesRequest making request: \( request) " )
176176
177+ let backgroundTaskIdentifier = IDENTITY_EXECUTOR_BACKGROUND_TASK + UUID( ) . uuidString
178+ if ( inBackground) {
179+ OSBackgroundTaskManager . beginBackgroundTask ( backgroundTaskIdentifier)
180+ }
181+
177182 OneSignalClient . shared ( ) . execute ( request) { _ in
178183 // No hydration from response
179184 // On success, remove request from cache
180185 self . addRequestQueue. removeAll ( where: { $0 == request} )
181186 OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_IDENTITY_EXECUTOR_ADD_REQUEST_QUEUE_KEY, withValue: self . addRequestQueue)
187+ if ( inBackground) {
188+ OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
189+ }
182190 } onFailure: { error in
183191 OneSignalLog . onesignalLog ( . LL_ERROR, message: " OSIdentityOperationExecutor add aliases request failed with error: \( error. debugDescription) " )
184192 if let nsError = error as? NSError {
@@ -190,6 +198,9 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
190198 // Logout if the user in the SDK is the same
191199 guard OneSignalUserManagerImpl . sharedInstance. isCurrentUser ( request. identityModel)
192200 else {
201+ if ( inBackground) {
202+ OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
203+ }
193204 return
194205 }
195206 // The subscription has been deleted along with the user, so remove the subscription_id but keep the same push subscription model
@@ -210,10 +221,13 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
210221 OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_IDENTITY_EXECUTOR_ADD_REQUEST_QUEUE_KEY, withValue: self . addRequestQueue)
211222 }
212223 }
224+ if ( inBackground) {
225+ OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
226+ }
213227 }
214228 }
215229
216- func executeRemoveAliasRequest( _ request: OSRequestRemoveAlias ) {
230+ func executeRemoveAliasRequest( _ request: OSRequestRemoveAlias , inBackground : Bool ) {
217231 guard !request. sentToClient else {
218232 return
219233 }
@@ -224,11 +238,19 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
224238
225239 OneSignalLog . onesignalLog ( . LL_VERBOSE, message: " OSIdentityOperationExecutor: executeRemoveAliasRequest making request: \( request) " )
226240
241+ let backgroundTaskIdentifier = IDENTITY_EXECUTOR_BACKGROUND_TASK + UUID( ) . uuidString
242+ if ( inBackground) {
243+ OSBackgroundTaskManager . beginBackgroundTask ( backgroundTaskIdentifier)
244+ }
245+
227246 OneSignalClient . shared ( ) . execute ( request) { _ in
228247 // There is nothing to hydrate
229248 // On success, remove request from cache
230249 self . removeRequestQueue. removeAll ( where: { $0 == request} )
231250 OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_IDENTITY_EXECUTOR_REMOVE_REQUEST_QUEUE_KEY, withValue: self . removeRequestQueue)
251+ if ( inBackground) {
252+ OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
253+ }
232254 } onFailure: { error in
233255 OneSignalLog . onesignalLog ( . LL_ERROR, message: " OSIdentityOperationExecutor remove alias request failed with error: \( error. debugDescription) " )
234256
@@ -241,6 +263,9 @@ class OSIdentityOperationExecutor: OSOperationExecutor {
241263 OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_IDENTITY_EXECUTOR_REMOVE_REQUEST_QUEUE_KEY, withValue: self . removeRequestQueue)
242264 }
243265 }
266+ if ( inBackground) {
267+ OSBackgroundTaskManager . endBackgroundTask ( backgroundTaskIdentifier)
268+ }
244269 }
245270 }
246271}
0 commit comments