Skip to content

Commit ae07c49

Browse files
authored
Merge pull request #665 from Iterable/anelson/mob-6648-update-getmessages
[MOB-6648] update get messages to pull messages from placement
2 parents 01e2392 + 0bad7d4 commit ae07c49

9 files changed

+56
-26
lines changed

swift-sdk/Internal/ApiClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ extension ApiClient: ApiClientProtocol {
219219

220220
// MARK: - Embedded Messaging
221221

222-
func getEmbeddedMessages() -> Pending<EmbeddedMessagesPayload, SendRequestError> {
222+
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError> {
223223
let result = createRequestCreator().flatMap { $0.createGetEmbeddedMessagesRequest() }
224224
return send(iterableRequestResult: result)
225225
}

swift-sdk/Internal/ApiClientProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ protocol ApiClientProtocol: AnyObject {
4646

4747
func getRemoteConfiguration() -> Pending<RemoteConfiguration, SendRequestError>
4848

49-
func getEmbeddedMessages() -> Pending<EmbeddedMessagesPayload, SendRequestError>
49+
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError>
5050

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

swift-sdk/Internal/EmbeddedMessagingSerialization.swift

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,23 @@ struct AnyDecodable: Decodable {
3737

3838

3939
struct EmbeddedMessagingSerialization {
40-
static func encode(messages: [IterableEmbeddedMessage]) -> Data {
41-
guard let encoded = try? JSONEncoder().encode(EmbeddedMessagesPayload(embeddedMessages: messages)) else {
42-
ITBError("unable to encode embedded messages into JSON payload")
40+
static func encode(placements: [Placement]) -> Data {
41+
guard let encoded = try? JSONEncoder().encode(PlacementsPayload(placements: placements)) else {
42+
ITBError("unable to encode placements into JSON payload")
4343
return Data()
4444
}
4545

4646
return encoded
4747
}
4848

49-
static func decode(messages: Data) -> [IterableEmbeddedMessage] {
50-
guard let decoded = try? JSONDecoder().decode(EmbeddedMessagesPayload.self, from: messages) else {
51-
ITBError("unable to decode JSON payload into embedded messages")
49+
static func decode(placements: Data) -> [IterableEmbeddedMessage] {
50+
guard let decoded = try? JSONDecoder().decode(PlacementsPayload.self, from: placements) else {
51+
ITBError("unable to decode JSON payload into placements")
5252
return []
5353
}
5454

55-
return decoded.embeddedMessages
55+
let messages = decoded.placements.flatMap { $0.embeddedMessages }
56+
return messages
5657
}
5758

5859
static func encode(payload: [AnyHashable: Any]?) -> Data? {
@@ -72,10 +73,15 @@ struct EmbeddedMessagingSerialization {
7273
}
7374
}
7475

75-
struct EmbeddedMessagesPayload: Codable {
76+
struct Placement: Codable {
77+
let placementId: Int?
7678
let embeddedMessages: [IterableEmbeddedMessage]
7779
}
7880

81+
struct PlacementsPayload: Codable {
82+
let placements: [Placement]
83+
}
84+
7985
extension IterableEmbeddedMessage: Codable {
8086
enum CodingKeys: String, CodingKey {
8187
case metadata

swift-sdk/Internal/EmptyEmbeddedManager.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ class EmptyEmbeddedManager: IterableEmbeddedManagerProtocol {
1717
func getMessages() -> [IterableEmbeddedMessage] {
1818
return []
1919
}
20+
21+
func getMessages(for placementId: Int) -> [IterableEmbeddedMessage] {
22+
return []
23+
}
2024

2125
func syncMessages(completion: @escaping () -> Void) {
2226

swift-sdk/Internal/IterableEmbeddedManager.swift

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ class IterableEmbeddedManager: NSObject, IterableEmbeddedManagerProtocol {
2323
return messages
2424
}
2525

26+
public func getMessages(for placementId: Int) -> [IterableEmbeddedMessage] {
27+
28+
return messages.filter { $0.metadata.placementId == placementId }
29+
}
30+
2631
public func addUpdateListener(_ listener: IterableEmbeddedUpdateDelegate) {
2732
listeners.add(listener)
2833
}
@@ -58,23 +63,29 @@ class IterableEmbeddedManager: NSObject, IterableEmbeddedManagerProtocol {
5863

5964

6065
private func retrieveEmbeddedMessages(completion: @escaping () -> Void) {
66+
print("retrieve embeddeded messages")
6167
apiClient.getEmbeddedMessages()
6268
.onCompletion(
6369
receiveValue: { embeddedMessagesPayload in
64-
let fetchedMessages = embeddedMessagesPayload.embeddedMessages
6570

66-
// TODO: decide if parsing errors should be accounted for here
67-
68-
let processor = EmbeddedMessagingProcessor(currentMessages: self.messages,
69-
fetchedMessages: fetchedMessages)
70-
71-
self.setMessages(processor)
72-
self.trackNewlyRetrieved(processor)
73-
self.notifyUpdateDelegates(processor)
74-
completion()
75-
},
71+
print("got embeddedMessagesPayload")
72+
print(embeddedMessagesPayload)
73+
let placements = embeddedMessagesPayload.placements
74+
let fetchedMessages = placements.flatMap { $0.embeddedMessages }
75+
76+
// TODO: decide if parsing errors should be accounted for here
77+
78+
let processor = EmbeddedMessagingProcessor(currentMessages: self.messages,
79+
fetchedMessages: fetchedMessages)
80+
81+
self.setMessages(processor)
82+
self.trackNewlyRetrieved(processor)
83+
self.notifyUpdateDelegates(processor)
84+
completion()
85+
},
7686

7787
receiveError: { sendRequestError in
88+
print("receive error: \(sendRequestError)")
7889
//TODO: This check can go away once eligibility based retrieval comes in place.
7990
if sendRequestError.reason == "SUBSCRIPTION_INACTIVE" ||
8091
sendRequestError.reason == "Invalid API Key" {

swift-sdk/IterableEmbeddedManagerProtocol.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Foundation
66

77
@objc public protocol IterableEmbeddedManagerProtocol {
88
func getMessages() -> [IterableEmbeddedMessage]
9+
func getMessages(for placementId: Int) -> [IterableEmbeddedMessage]
910

1011
func addUpdateListener(_ listener: IterableEmbeddedUpdateDelegate)
1112
func removeUpdateListener(_ listener: IterableEmbeddedUpdateDelegate)

swift-sdk/IterableEmbeddedMessage.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ public final class IterableEmbeddedMessage: NSObject {
1818
self.payload = payload
1919
}
2020

21-
convenience init(messageId: String, campaignId: Int? = nil, isProof: Bool? = nil) {
22-
let metadata = EmbeddedMessageMetadata(messageId: messageId, campaignId: campaignId, isProof: isProof)
21+
convenience init(messageId: String, campaignId: Int? = nil, isProof: Bool? = nil, placementId: Int? = nil) {
22+
let metadata = EmbeddedMessageMetadata(messageId: messageId, campaignId: campaignId, isProof: isProof, placementId: placementId)
2323

2424
self.init(metadata: metadata)
2525
}
@@ -30,6 +30,14 @@ extension IterableEmbeddedMessage {
3030
public let messageId: String
3131
public let campaignId: Int?
3232
public let isProof: Bool?
33+
public let placementId: Int?
34+
35+
init(messageId: String, campaignId: Int? = nil, isProof: Bool? = nil, placementId: Int? = nil) {
36+
self.messageId = messageId
37+
self.campaignId = campaignId
38+
self.isProof = isProof
39+
self.placementId = placementId
40+
}
3341
}
3442

3543
public struct EmbeddedMessageElements: Codable {

tests/embedded-messaging-tests/EmbeddedManagerTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ final class EmbeddedManagerTests: XCTestCase {
7474
return ids.map { IterableEmbeddedMessage(messageId: $0) }
7575
}
7676

77-
override func getEmbeddedMessages() -> IterableSDK.Pending<IterableSDK.EmbeddedMessagesPayload, IterableSDK.SendRequestError> {
77+
override func getEmbeddedMessages() -> IterableSDK.Pending<IterableSDK.PlacementsPayload, IterableSDK.SendRequestError> {
7878
if newMessages {
79-
let messages = EmbeddedMessagesPayload(embeddedMessages: makeBlankMessagesList(with: ["1"]))
79+
let messages = PlacementsPayload(placements: [Placement(placementId: 0, embeddedMessages: makeBlankMessagesList(with: ["1"]))])
8080

8181
return Fulfill(value: messages)
8282
}

tests/unit-tests/BlankApiClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class BlankApiClient: ApiClientProtocol {
7979
Pending()
8080
}
8181

82-
func getEmbeddedMessages() -> Pending<EmbeddedMessagesPayload, SendRequestError> {
82+
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError> {
8383
Pending()
8484
}
8585

0 commit comments

Comments
 (0)