Skip to content

Commit 535ac2a

Browse files
committed
🔧Added placement IDs as list
1 parent abbab6a commit 535ac2a

File tree

9 files changed

+53
-14
lines changed

9 files changed

+53
-14
lines changed

swift-sdk/Core/Constants.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ enum JsonKey {
316316
enum Embedded {
317317
static let packageName = "packageName"
318318
static let sdkVersion = "SDKVersion"
319+
static let placementIds = "placementIds"
319320
}
320321

321322
enum Header {

swift-sdk/Core/Protocols/IterableEmbeddedManagerProtocol.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ public protocol IterableEmbeddedManagerProtocol {
1010
func addUpdateListener(_ listener: IterableEmbeddedUpdateDelegate)
1111
func removeUpdateListener(_ listener: IterableEmbeddedUpdateDelegate)
1212

13-
func syncMessages(completion: @escaping () -> Void)
13+
func syncMessages(placementIds: [Int]?, completion: @escaping () -> Void)
1414
func handleEmbeddedClick(message: IterableEmbeddedMessage, buttonIdentifier: String?, clickedUrl: String)
1515
func reset()
1616
}
17+
18+
public extension IterableEmbeddedManagerProtocol {
19+
func syncMessages(completion: @escaping () -> Void) {
20+
syncMessages(placementIds: nil, completion: completion)
21+
}
22+
}

swift-sdk/Internal/EmptyEmbeddedManager.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ class EmptyEmbeddedManager: IterableInternalEmbeddedManagerProtocol {
2323

2424
func syncMessages(completion: @escaping () -> Void) {
2525

26+
}
27+
28+
func syncMessages(placementIds: [Int]?, completion: @escaping () -> Void) {
29+
2630
}
2731

2832
public func handleEmbeddedClick(message: IterableEmbeddedMessage, buttonIdentifier: String?, clickedUrl: String) {

swift-sdk/Internal/IterableEmbeddedManager.swift

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
161161
syncMessages { }
162162
}
163163

164-
private func retrieveEmbeddedMessages(completion: @escaping () -> Void) {
165-
apiClient.getEmbeddedMessages()
164+
private func retrieveEmbeddedMessages(placementIds: [Int]?, completion: @escaping () -> Void) {
165+
apiClient.getEmbeddedMessages(placementIds: placementIds)
166166
.onCompletion(
167167
receiveValue: { embeddedMessagesPayload in
168168
let placements = embeddedMessagesPayload.placements
@@ -172,7 +172,18 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
172172
fetchedMessagesDict[placement.placementId!] = placement.embeddedMessages
173173
}
174174

175-
let processor = EmbeddedMessagingProcessor(currentMessages: self.messages,
175+
let currentMessagesSnapshot: [Int: [IterableEmbeddedMessage]] = self.messageProcessingQueue.sync {
176+
self.messages
177+
}
178+
179+
if let placementIds, !placementIds.isEmpty {
180+
let requestedPlacementIds = Set(placementIds)
181+
for (placementId, currentMessages) in currentMessagesSnapshot where !requestedPlacementIds.contains(placementId) {
182+
fetchedMessagesDict[placementId] = currentMessages
183+
}
184+
}
185+
186+
let processor = EmbeddedMessagingProcessor(currentMessages: currentMessagesSnapshot,
176187
fetchedMessages: fetchedMessagesDict)
177188

178189
self.setMessages(processor)
@@ -245,8 +256,12 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
245256

246257
extension IterableEmbeddedManager: EmbeddedNotifiable {
247258
public func syncMessages(completion: @escaping () -> Void) {
248-
if (enableEmbeddedMessaging) {
249-
retrieveEmbeddedMessages(completion: completion)
259+
syncMessages(placementIds: nil, completion: completion)
260+
}
261+
262+
public func syncMessages(placementIds: [Int]?, completion: @escaping () -> Void) {
263+
if enableEmbeddedMessaging {
264+
retrieveEmbeddedMessages(placementIds: placementIds, completion: completion)
250265
}
251266
}
252267
}

swift-sdk/Internal/api-client/ApiClient.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,8 @@ extension ApiClient: ApiClientProtocol {
300300

301301
// MARK: - Embedded Messaging
302302

303-
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError> {
304-
let result = createRequestCreator().flatMap { $0.createGetEmbeddedMessagesRequest() }
303+
func getEmbeddedMessages(placementIds: [Int]?) -> Pending<PlacementsPayload, SendRequestError> {
304+
let result = createRequestCreator().flatMap { $0.createGetEmbeddedMessagesRequest(placementIds: placementIds) }
305305
return send(iterableRequestResult: result)
306306
}
307307

swift-sdk/Internal/api-client/ApiClientProtocol.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protocol ApiClientProtocol: AnyObject {
6060

6161
func trackConsent(consentTimestamp: Int64, email: String?, userId: String?, isUserKnown: Bool) -> Pending<SendRequestValue, SendRequestError>
6262

63-
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError>
63+
func getEmbeddedMessages(placementIds: [Int]?) -> Pending<PlacementsPayload, SendRequestError>
6464

6565
@discardableResult func track(embeddedMessageReceived message: IterableEmbeddedMessage) -> Pending<SendRequestValue, SendRequestError>
6666

@@ -72,3 +72,9 @@ protocol ApiClientProtocol: AnyObject {
7272

7373
@discardableResult func track(embeddedSession: IterableEmbeddedSession) -> Pending<SendRequestValue, SendRequestError>
7474
}
75+
76+
extension ApiClientProtocol {
77+
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError> {
78+
getEmbeddedMessages(placementIds: nil)
79+
}
80+
}

swift-sdk/Internal/api-client/Request/RequestCreator.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ struct RequestCreator {
500500

501501
// MARK: - Embedded Messaging Request Calls
502502

503-
func createGetEmbeddedMessagesRequest() -> Result<IterableRequest, IterableError> {
503+
func createGetEmbeddedMessagesRequest(placementIds: [Int]?) -> Result<IterableRequest, IterableError> {
504504
if case .none = auth.emailOrUserId {
505505
ITBError(Self.authMissingMessage)
506506
return .failure(IterableError.general(description: Self.authMissingMessage))
@@ -514,6 +514,10 @@ struct RequestCreator {
514514
args[JsonKey.Embedded.packageName] = packageName
515515
}
516516

517+
if let placementIds, !placementIds.isEmpty {
518+
args[JsonKey.Embedded.placementIds] = placementIds.map(String.init).joined(separator: ",")
519+
}
520+
517521
setCurrentUser(inDict: &args)
518522

519523
return .success(.get(createGetRequest(forPath: Const.Path.getEmbeddedMessages, withArgs: args as! [String: String])))

tests/unit-tests/BlankApiClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class BlankApiClient: ApiClientProtocol {
114114
Pending()
115115
}
116116

117-
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError> {
117+
func getEmbeddedMessages(placementIds: [Int]?) -> Pending<PlacementsPayload, SendRequestError> {
118118
Pending()
119119
}
120120

tests/unit-tests/EmbeddedManagerTests.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -366,16 +366,19 @@ final class EmbeddedManagerTests: XCTestCase {
366366
invalidApiKey = true
367367
}
368368

369-
override func getEmbeddedMessages() -> IterableSDK.Pending<IterableSDK.PlacementsPayload, IterableSDK.SendRequestError> {
369+
override func getEmbeddedMessages(placementIds: [Int]?) -> IterableSDK.Pending<IterableSDK.PlacementsPayload, IterableSDK.SendRequestError> {
370370
if invalidApiKey {
371371
return FailPending(error: IterableSDK.SendRequestError(reason: "Invalid API Key"))
372372
}
373373

374374
if newMessages {
375375
var placements: [Placement] = []
376+
let requested = Set(placementIds ?? [])
376377
for (placementId, messages) in mockMessages {
377-
let placement = Placement(placementId: placementId, embeddedMessages: messages)
378-
placements.append(placement)
378+
if placementIds == nil || requested.contains(placementId) {
379+
let placement = Placement(placementId: placementId, embeddedMessages: messages)
380+
placements.append(placement)
381+
}
379382
}
380383

381384
let payload = PlacementsPayload(placements: placements)

0 commit comments

Comments
 (0)