@@ -38,11 +38,19 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
38
38
}
39
39
40
40
public func getMessages( ) -> [ IterableEmbeddedMessage ] {
41
- return Array ( messages. values. flatMap { $0 } )
41
+ var result : [ IterableEmbeddedMessage ] = [ ]
42
+ messageProcessingQueue. sync {
43
+ result = Array ( messages. values. flatMap { $0 } )
44
+ }
45
+ return result
42
46
}
43
47
44
48
public func getMessages( for placementId: Int ) -> [ IterableEmbeddedMessage ] {
45
- return messages [ placementId] ?? [ ]
49
+ var result : [ IterableEmbeddedMessage ] = [ ]
50
+ messageProcessingQueue. sync {
51
+ result = messages [ placementId] ?? [ ]
52
+ }
53
+ return result
46
54
}
47
55
48
56
public func addUpdateListener( _ listener: IterableEmbeddedUpdateDelegate ) {
@@ -130,6 +138,7 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
130
138
private let urlOpener : UrlOpenerProtocol
131
139
private let allowedProtocols : [ String ]
132
140
private var messages : [ Int : [ IterableEmbeddedMessage ] ] = [ : ]
141
+ private let messageProcessingQueue = DispatchQueue ( label: " com.iterable.embedded.messages " , qos: . userInitiated)
133
142
private var listeners : NSHashTable < IterableEmbeddedUpdateDelegate > = NSHashTable ( options: [ . weakMemory] )
134
143
private var trackedMessageIds : Set < String > = Set ( )
135
144
private var enableEmbeddedMessaging : Bool
@@ -187,15 +196,19 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
187
196
}
188
197
189
198
private func setMessages( _ processor: EmbeddedMessagingProcessor ) {
190
- messages = processor. processedMessagesList ( )
191
- cleanUpTrackedMessageIds ( messages)
199
+ messageProcessingQueue. sync {
200
+ messages = processor. processedMessagesList ( )
201
+ cleanUpTrackedMessageIds ( messages)
202
+ }
192
203
}
193
204
194
205
private func cleanUpTrackedMessageIds( _ currentMessages: [ Int : [ IterableEmbeddedMessage ] ] ) {
195
206
let currentUniqueKeys = Set ( currentMessages. flatMap { placement, messages in
196
207
messages. map { " \( placement) - \( $0. metadata. messageId) " }
197
208
} )
198
- trackedMessageIds = trackedMessageIds. intersection ( currentUniqueKeys)
209
+ messageProcessingQueue. sync {
210
+ trackedMessageIds = trackedMessageIds. intersection ( currentUniqueKeys)
211
+ }
199
212
}
200
213
201
214
private func trackNewlyRetrieved( _ processor: EmbeddedMessagingProcessor ) {
@@ -204,9 +217,11 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
204
217
let messageId = message. metadata. messageId
205
218
let uniqueKey = " \( placementId) - \( messageId) "
206
219
207
- if !trackedMessageIds. contains ( uniqueKey) {
208
- IterableAPI . track ( embeddedMessageReceived: message)
209
- trackedMessageIds. insert ( uniqueKey)
220
+ messageProcessingQueue. sync {
221
+ if !trackedMessageIds. contains ( uniqueKey) {
222
+ IterableAPI . track ( embeddedMessageReceived: message)
223
+ trackedMessageIds. insert ( uniqueKey)
224
+ }
210
225
}
211
226
}
212
227
}
0 commit comments