Skip to content

Commit 8e82234

Browse files
author
Evan Greer
committed
Merge branch 'embedded-no-diff-merge' into MOB-7609
2 parents f0b06c1 + 8e7eaed commit 8e82234

12 files changed

+158
-433
lines changed

swift-sdk/Internal/DependencyContainerProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ extension DependencyContainerProtocol {
5757
}
5858

5959
func createEmbeddedManager(config: IterableConfig,
60-
apiClient: ApiClientProtocol) -> IterableEmbeddedManagerProtocol {
60+
apiClient: ApiClientProtocol) -> IterableInternalEmbeddedManagerProtocol {
6161
IterableEmbeddedManager(apiClient: apiClient,
6262
urlDelegate: config.urlDelegate,
6363
customActionDelegate: config.customActionDelegate,

swift-sdk/Internal/EmptyEmbeddedManager.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@
55
import Foundation
66

77
class EmptyEmbeddedManager: IterableEmbeddedManagerProtocol {
8-
func resolveMessages(_ messages: [IterableEmbeddedMessage], completion: @escaping ([ResolvedMessage]) -> Void) {
9-
10-
}
11-
128
func addUpdateListener(_ listener: IterableEmbeddedUpdateDelegate) {
139

1410
}

swift-sdk/Internal/InternalIterableAPI.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
8282
self.dependencyContainer.createAuthManager(config: self.config)
8383
}()
8484

85-
lazy var embeddedManager: IterableEmbeddedManagerProtocol = {
85+
lazy var embeddedManager: IterableInternalEmbeddedManagerProtocol = {
8686
self.dependencyContainer.createEmbeddedManager(config: self.config,
8787
apiClient: self.apiClient)
8888
}()
@@ -685,7 +685,8 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
685685
customActionDelegate: config.customActionDelegate,
686686
urlOpener: urlOpener,
687687
allowedProtocols: config.allowedProtocols,
688-
inAppNotifiable: inAppManager)
688+
inAppNotifiable: inAppManager,
689+
embeddedNotifiable: embeddedManager)
689690

690691
handle(launchOptions: launchOptions)
691692

swift-sdk/Internal/InternalIterableAppIntegration.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,22 @@ struct InternalIterableAppIntegration {
117117
private let urlOpener: UrlOpenerProtocol?
118118
private let allowedProtocols: [String]
119119
private weak var inAppNotifiable: InAppNotifiable?
120+
private weak var embeddedNotifiable: EmbeddedNotifiable?
120121

121122
init(tracker: PushTrackerProtocol,
122123
urlDelegate: IterableURLDelegate? = nil,
123124
customActionDelegate: IterableCustomActionDelegate? = nil,
124125
urlOpener: UrlOpenerProtocol? = nil,
125126
allowedProtocols: [String] = [],
126-
inAppNotifiable: InAppNotifiable) {
127+
inAppNotifiable: InAppNotifiable,
128+
embeddedNotifiable: EmbeddedNotifiable) {
127129
self.tracker = tracker
128130
self.urlDelegate = urlDelegate
129131
self.customActionDelegate = customActionDelegate
130132
self.urlOpener = urlOpener
131133
self.allowedProtocols = allowedProtocols
132134
self.inAppNotifiable = inAppNotifiable
135+
self.embeddedNotifiable = embeddedNotifiable
133136
}
134137

135138
/**
@@ -147,6 +150,8 @@ struct InternalIterableAppIntegration {
147150
switch silentPush.notificationType {
148151
case .update:
149152
_ = inAppNotifiable?.scheduleSync()
153+
case .updateEmbedded:
154+
embeddedNotifiable?.syncMessages {}
150155
case .remove:
151156
if let messageId = silentPush.messageId {
152157
inAppNotifiable?.onInAppRemoved(messageId: messageId)

swift-sdk/Internal/IterableEmbeddedManager.swift

Lines changed: 9 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,11 @@
55
import Foundation
66
import UIKit
77

8-
public struct ResolvedMessage: Equatable {
9-
public let title: String?
10-
public let description: String?
11-
public var image: UIImage?
12-
public var imageAccessibilityLabel: String?
13-
public let buttonText: String?
14-
public let buttonTwoText: String?
15-
public let message: IterableEmbeddedMessage
16-
17-
init(title: String?,
18-
description: String?,
19-
image: UIImage?,
20-
imageAccessibilityLabel: String?,
21-
buttonText: String?,
22-
buttonTwoText: String?,
23-
message: IterableEmbeddedMessage) {
24-
self.title = title
25-
self.description = description
26-
self.image = image
27-
self.imageAccessibilityLabel = imageAccessibilityLabel
28-
self.buttonText = buttonText
29-
self.buttonTwoText = buttonTwoText
30-
self.message = message
31-
}
32-
33-
public static func ==(lhs: ResolvedMessage, rhs: ResolvedMessage) -> Bool {
34-
return lhs.title == rhs.title &&
35-
lhs.description == rhs.description &&
36-
lhs.image == rhs.image &&
37-
lhs.buttonText == rhs.buttonText &&
38-
lhs.buttonTwoText == rhs.buttonTwoText &&
39-
lhs.message == rhs.message
40-
}
8+
protocol IterableInternalEmbeddedManagerProtocol: IterableEmbeddedManagerProtocol, EmbeddedNotifiable {
9+
// we can add the internal delegate methods here
4110
}
4211

43-
class IterableEmbeddedManager: NSObject, IterableEmbeddedManagerProtocol {
12+
class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol {
4413
init(apiClient: ApiClientProtocol,
4514
urlDelegate: IterableURLDelegate?,
4615
customActionDelegate: IterableCustomActionDelegate?,
@@ -76,86 +45,13 @@ class IterableEmbeddedManager: NSObject, IterableEmbeddedManagerProtocol {
7645
return messages[placementId] ?? []
7746
}
7847

79-
public func resolveMessages(_ messages: [IterableEmbeddedMessage], completion: @escaping ([ResolvedMessage]) -> Void) {
80-
var resolvedMessages: [Int: ResolvedMessage] = [:]
81-
82-
let group = DispatchGroup()
83-
84-
for (index, message) in messages.enumerated() {
85-
group.enter()
86-
87-
let title = message.elements?.title
88-
let description = message.elements?.body
89-
let imageUrl = message.elements?.mediaUrl
90-
let imageAccessiblityLabel = message.elements?.mediaUrlCaption
91-
let buttonText = message.elements?.buttons?.first?.title
92-
let buttonTwoText = message.elements?.buttons?.count ?? 0 > 1 ? message.elements?.buttons?[1].title : nil
93-
94-
DispatchQueue.global().async {
95-
if let imageUrl = imageUrl, let url = URL(string: imageUrl) {
96-
var request = URLRequest(url: url)
97-
request.setValue("Mozilla/5.0 (iPhone; CPU iPhone OS 16_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Mobile/15E148 Safari/604.1", forHTTPHeaderField: "User-Agent")
98-
99-
let config = URLSessionConfiguration.default
100-
config.httpAdditionalHeaders = request.allHTTPHeaderFields
101-
102-
let session = URLSession(configuration: config)
103-
104-
session.dataTask(with: request) { (data, _, _) in
105-
defer { group.leave() }
106-
107-
guard let imageData = data else {
108-
print("Unable to load image data")
109-
return
110-
}
111-
112-
let resolvedMessage = ResolvedMessage(title: title,
113-
description: description,
114-
image: UIImage(data: imageData),
115-
imageAccessibilityLabel: imageAccessiblityLabel,
116-
buttonText: buttonText,
117-
buttonTwoText: buttonTwoText,
118-
message: message)
119-
120-
DispatchQueue.main.async {
121-
resolvedMessages[index] = resolvedMessage
122-
}
123-
124-
}.resume()
125-
} else {
126-
let resolvedMessage = ResolvedMessage(title: title,
127-
description: description,
128-
image: nil,
129-
imageAccessibilityLabel: nil,
130-
buttonText: buttonText,
131-
buttonTwoText: buttonTwoText,
132-
message: message)
133-
DispatchQueue.main.async {
134-
resolvedMessages[index] = resolvedMessage
135-
group.leave()
136-
}
137-
}
138-
}
139-
140-
}
141-
142-
group.notify(queue: .main) {
143-
let sortedResolvedMessages = resolvedMessages.sorted { $0.key < $1.key }.map { $0.value }
144-
completion(sortedResolvedMessages)
145-
}
146-
}
147-
14848
public func addUpdateListener(_ listener: IterableEmbeddedUpdateDelegate) {
14949
listeners.add(listener)
15050
}
15151

15252
public func removeUpdateListener(_ listener: IterableEmbeddedUpdateDelegate) {
15353
listeners.remove(listener)
15454
}
155-
156-
public func syncMessages(completion: @escaping () -> Void) {
157-
retrieveEmbeddedMessages(completion: completion)
158-
}
15955

16056
public func handleEmbeddedClick(message: IterableEmbeddedMessage, buttonIdentifier: String?, clickedUrl: String) {
16157
if let url = URL(string: clickedUrl) {
@@ -341,3 +237,9 @@ class IterableEmbeddedManager: NSObject, IterableEmbeddedManagerProtocol {
341237
}
342238
}
343239
}
240+
241+
extension IterableEmbeddedManager: EmbeddedNotifiable {
242+
public func syncMessages(completion: @escaping () -> Void) {
243+
retrieveEmbeddedMessages(completion: completion)
244+
}
245+
}

swift-sdk/Internal/MiscEmbeddedClasses.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ public class IterableEmbeddedImpression: NSObject, Codable {
3232
}
3333
}
3434

35+
protocol EmbeddedNotifiable: AnyObject {
36+
func syncMessages(completion: @escaping () -> Void)
37+
}
38+
3539
/// Encapsulates an Embedded Session
3640
final public class IterableEmbeddedSession: NSObject, Codable {
3741
/// UUID of the session

swift-sdk/Internal/NotificationHelper.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct ITBLSilentPushNotificationInfo {
1919
enum ITBLSilentPushNotificationType: String, Codable {
2020
case remove = "InAppRemove"
2121
case update = "InAppUpdate"
22+
case updateEmbedded = "UpdateEmbedded"
2223
}
2324

2425
static func parse(notification: [AnyHashable: Any]) -> ITBLSilentPushNotificationInfo? {

swift-sdk/IterableEmbeddedManagerProtocol.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import Foundation
77
public protocol IterableEmbeddedManagerProtocol {
88
func getMessages() -> [IterableEmbeddedMessage]
99
func getMessages(for placementId: Int) -> [IterableEmbeddedMessage]
10-
func resolveMessages(_ messages: [IterableEmbeddedMessage], completion: @escaping ([ResolvedMessage]) -> Void)
1110
func addUpdateListener(_ listener: IterableEmbeddedUpdateDelegate)
1211
func removeUpdateListener(_ listener: IterableEmbeddedUpdateDelegate)
1312

0 commit comments

Comments
 (0)