Commit 7bbad031 by Demid Merzlyakov

IOS-127: Tercept: add logs, refactor slilghtly.

parent 51e97f5d
...@@ -302,7 +302,6 @@ ...@@ -302,7 +302,6 @@
F2D8A706269D88D10060F36A /* x86_64.swiftinterface in Resources */ = {isa = PBXBuildFile; fileRef = F2D8A6DF269D88D10060F36A /* x86_64.swiftinterface */; }; F2D8A706269D88D10060F36A /* x86_64.swiftinterface in Resources */ = {isa = PBXBuildFile; fileRef = F2D8A6DF269D88D10060F36A /* x86_64.swiftinterface */; };
F2D8A70D269D93210060F36A /* TerceptSDKManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D8A70C269D93210060F36A /* TerceptSDKManager.swift */; }; F2D8A70D269D93210060F36A /* TerceptSDKManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D8A70C269D93210060F36A /* TerceptSDKManager.swift */; };
F2D8A722269F05200060F36A /* Dependency.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D8A721269F05200060F36A /* Dependency.swift */; }; F2D8A722269F05200060F36A /* Dependency.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D8A721269F05200060F36A /* Dependency.swift */; };
F2D8A74E269FFDF10060F36A /* TerceptSDKManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D8A74D269FFDF10060F36A /* TerceptSDKManagerTests.swift */; };
F2D8A7C9269FFFD50060F36A /* StubTerceptOptimizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D8A7C8269FFFD50060F36A /* StubTerceptOptimizer.swift */; }; F2D8A7C9269FFFD50060F36A /* StubTerceptOptimizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D8A7C8269FFFD50060F36A /* StubTerceptOptimizer.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
...@@ -657,7 +656,6 @@ ...@@ -657,7 +656,6 @@
F2D8A721269F05200060F36A /* Dependency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dependency.swift; sourceTree = "<group>"; }; F2D8A721269F05200060F36A /* Dependency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dependency.swift; sourceTree = "<group>"; };
F2D8A743269FFDC60060F36A /* 1WeatherTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = 1WeatherTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F2D8A743269FFDC60060F36A /* 1WeatherTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = 1WeatherTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
F2D8A747269FFDC60060F36A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; F2D8A747269FFDC60060F36A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
F2D8A74D269FFDF10060F36A /* TerceptSDKManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerceptSDKManagerTests.swift; sourceTree = "<group>"; };
F2D8A7C8269FFFD50060F36A /* StubTerceptOptimizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubTerceptOptimizer.swift; sourceTree = "<group>"; }; F2D8A7C8269FFFD50060F36A /* StubTerceptOptimizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubTerceptOptimizer.swift; sourceTree = "<group>"; };
FC2041C3048EAF6B296224F6 /* Pods-OneWeatherWidgetExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneWeatherWidgetExtension.debug.xcconfig"; path = "Target Support Files/Pods-OneWeatherWidgetExtension/Pods-OneWeatherWidgetExtension.debug.xcconfig"; sourceTree = "<group>"; }; FC2041C3048EAF6B296224F6 /* Pods-OneWeatherWidgetExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneWeatherWidgetExtension.debug.xcconfig"; path = "Target Support Files/Pods-OneWeatherWidgetExtension/Pods-OneWeatherWidgetExtension.debug.xcconfig"; sourceTree = "<group>"; };
FD761FE0D947B3A79121A941 /* Pods-OneWeatherNotificationServiceExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneWeatherNotificationServiceExtension.release.xcconfig"; path = "Target Support Files/Pods-OneWeatherNotificationServiceExtension/Pods-OneWeatherNotificationServiceExtension.release.xcconfig"; sourceTree = "<group>"; }; FD761FE0D947B3A79121A941 /* Pods-OneWeatherNotificationServiceExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneWeatherNotificationServiceExtension.release.xcconfig"; path = "Target Support Files/Pods-OneWeatherNotificationServiceExtension/Pods-OneWeatherNotificationServiceExtension.release.xcconfig"; sourceTree = "<group>"; };
...@@ -1736,7 +1734,6 @@ ...@@ -1736,7 +1734,6 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F2D8A7C8269FFFD50060F36A /* StubTerceptOptimizer.swift */, F2D8A7C8269FFFD50060F36A /* StubTerceptOptimizer.swift */,
F2D8A74D269FFDF10060F36A /* TerceptSDKManagerTests.swift */,
F227B22F26B7B97200DD7EBB /* TerceptSDKEnablerTests.swift */, F227B22F26B7B97200DD7EBB /* TerceptSDKEnablerTests.swift */,
); );
path = TerceptSDK; path = TerceptSDK;
...@@ -2382,7 +2379,6 @@ ...@@ -2382,7 +2379,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F2D8A74E269FFDF10060F36A /* TerceptSDKManagerTests.swift in Sources */,
F227B23026B7B97200DD7EBB /* TerceptSDKEnablerTests.swift in Sources */, F227B23026B7B97200DD7EBB /* TerceptSDKEnablerTests.swift in Sources */,
F2D8A7C9269FFFD50060F36A /* StubTerceptOptimizer.swift in Sources */, F2D8A7C9269FFFD50060F36A /* StubTerceptOptimizer.swift in Sources */,
); );
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import Foundation import Foundation
@testable import _Weather @testable import _Weather
class StubTerceptOptimizer: TerceptOpimizable { class StubTerceptOptimizer: TerceptOptimizer {
private let customTargettingKeys: [String : String?] private let customTargettingKeys: [String : String?]
private(set) var initParamsMethodParams: (String, String, [String: Any]?)? = nil private(set) var initParamsMethodParams: (String, String, [String: Any]?)? = nil
......
//
// TerceptSDKManagerTests.swift
// 1WeatherTests
//
// Created by Shailesh on 15/07/21.
//
import XCTest
class TerceptSDKManagerTests: XCTestCase {
private let adUnits = ["Test/Ad/1", "Test/Ad/2"]
func testInitParams() {
let stub = StubTerceptOptimizer(customTargettingKeys: [:])
XCTAssertNil(stub.initParamsMethodParams?.0)
XCTAssertNil(stub.initParamsMethodParams?.1)
XCTAssertNil(stub.initParamsMethodParams?.2)
_ = TerceptSDKManager(optimizable: stub, adUnitIDs: adUnits)
XCTAssertNotNil(stub.initParamsMethodParams?.0)
XCTAssertNotNil(stub.initParamsMethodParams?.1)
XCTAssertNotNil(stub.initParamsMethodParams?.2)
}
func testFetchAdUnitsKeys() {
let stub = StubTerceptOptimizer(customTargettingKeys: [:])
XCTAssertNil(stub.fetchMethodParams)
_ = TerceptSDKManager(optimizable: stub, adUnitIDs: adUnits)
XCTAssertEqual(adUnits, stub.fetchMethodParams)
}
func testFetchAdUnitsKeysCustomTargettingKeys() {
let customTargettingKeys = ["Custom Target Key": "Value"]
let stub = StubTerceptOptimizer(customTargettingKeys: customTargettingKeys)
let manager = TerceptSDKManager(optimizable: stub, adUnitIDs: adUnits)
let tracker = manager.getTracker(with: adUnits.first!)
XCTAssertEqual(customTargettingKeys, tracker.getCustomTrackableKeys())
}
func testSetCustomParameter() {
let customParam = ["Custom Param Key": "Custom Param Value"]
let stub = StubTerceptOptimizer(customTargettingKeys: [:])
XCTAssertNil(stub.setCustomParametersMethodParams)
let manager = TerceptSDKManager(optimizable: stub, adUnitIDs: adUnits)
manager.setCustomParameters(customParam)
XCTAssertEqual(customParam, stub.setCustomParametersMethodParams)
}
func testLogEvent() {
let stub = StubTerceptOptimizer(customTargettingKeys: [:])
XCTAssertNil(stub.logEventMethodParams)
let manager = TerceptSDKManager(optimizable: stub, adUnitIDs: adUnits)
let tracker = manager.getTracker(with: adUnits.first!)
for item in AdLifeCycleState.allCases {
tracker.recordAdState(item)
XCTAssertEqual(stub.logEventMethodParams?.0, adUnits.first!)
XCTAssertEqual(stub.logEventMethodParams?.1, item.rawValue)
XCTAssertTrue(stub.logEventMethodParams?.2.isEmpty == true)
}
}
func testSendEventData() {
let stub = StubTerceptOptimizer(customTargettingKeys: [:])
XCTAssertFalse(stub.sentEventDataCalled)
let manager = TerceptSDKManager(optimizable: stub, adUnitIDs: adUnits)
NotificationCenter.default.post(name: UIApplication.didEnterBackgroundNotification, object: nil)
XCTAssertTrue(stub.sentEventDataCalled)
}
func testTerceptInit() {
let sdkManager = TerceptSDKManager()
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
let configManager = ConfigManager()
configManager.config = AppConfig(popularCities: nil,
adConfig: AdConfig(),
ccpaUpdateInterval: nil,
nwsAlertsViaMoEngageEnabled: false,
showAttPrompt: false,
shortsLeftBelowCountKey: 0,
shortsLastNudgeEnabledKey: false,
shortsSwipeUpNudgeCountKey: 0,
terceptSDKTrackingEnabled: true)
sdkManager.dataUpdated(by: configManager)
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
sdkManager.canCollectData = true
XCTAssertTrue(sdkManager.logEvent("", "", [:]))
}
func testTerceptFirebaseToggleOff() {
let sdkManager = TerceptSDKManager()
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
let configManager = ConfigManager()
configManager.config = AppConfig(popularCities: nil,
adConfig: AdConfig(),
ccpaUpdateInterval: nil,
nwsAlertsViaMoEngageEnabled: false,
showAttPrompt: false,
shortsLeftBelowCountKey: 0,
shortsLastNudgeEnabledKey: false,
shortsSwipeUpNudgeCountKey: 0,
terceptSDKTrackingEnabled: false)
sdkManager.dataUpdated(by: configManager)
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
sdkManager.canCollectData = true
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
sdkManager.canCollectData = false
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
}
func testDataCollectionPermission() {
let sdkManager = TerceptSDKManager()
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
let configManager = ConfigManager()
configManager.config = AppConfig(popularCities: nil,
adConfig: AdConfig(),
ccpaUpdateInterval: nil,
nwsAlertsViaMoEngageEnabled: false,
showAttPrompt: false,
shortsLeftBelowCountKey: 0,
shortsLastNudgeEnabledKey: false,
shortsSwipeUpNudgeCountKey: 0,
terceptSDKTrackingEnabled: true)
sdkManager.dataUpdated(by: configManager)
sdkManager.canCollectData = true
XCTAssertTrue(sdkManager.logEvent("", "", [:]))
sdkManager.canCollectData = false
XCTAssertFalse(sdkManager.logEvent("", "", [:]))
}
}
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
// Created by Shailesh on 02/08/21. // Created by Shailesh on 02/08/21.
// //
//TODO: got to get rid of all of this...
struct TerceptConditionsObserver { struct TerceptConditionsObserver {
let initSDK: (() -> Void) let initSDK: (() -> Void)
let deinitSDK: (() -> Void) let deinitSDK: (() -> Void)
......
...@@ -7,8 +7,10 @@ ...@@ -7,8 +7,10 @@
import UIKit import UIKit
import TerceptSDK import TerceptSDK
import AlgoliaSearchClient
import OneWeatherAnalytics
protocol TerceptOpimizable: AdEventLoggable { protocol TerceptOptimizer: AdEventLoggable {
func fetch(_ adunits: [String]?) func fetch(_ adunits: [String]?)
func setCustomParameters(_ params: [String : String]) func setCustomParameters(_ params: [String : String])
func sendEventsData() func sendEventsData()
...@@ -16,15 +18,56 @@ protocol TerceptOpimizable: AdEventLoggable { ...@@ -16,15 +18,56 @@ protocol TerceptOpimizable: AdEventLoggable {
func initParams(_ IDFA: String, _ IDFV: String, _ params: [String : Any]?) func initParams(_ IDFA: String, _ IDFV: String, _ params: [String : Any]?)
} }
struct TerceptOptimizerWrapper: TerceptOptimizer {
private let wrapperOptimizer: TerceptSDK.TerceptOptimization
private let log = Logger(componentName: "Tercept")
public init(optimizer: TerceptSDK.TerceptOptimization) {
wrapperOptimizer = optimizer
}
func fetch(_ adunits: [String]?) {
log.info("fetch for ad units: \(adunits ?? [String]())")
wrapperOptimizer.fetch(adunits)
}
func setCustomParameters(_ params: [String : String]) {
log.info("set custom params: \(params)")
wrapperOptimizer.setCustomParameters(params)
}
func sendEventsData() {
log.info("send events data")
wrapperOptimizer.sendEventsData()
}
func getCustomTargetingKeys(_ adunit: String?) -> [String : String?] {
let result = wrapperOptimizer.getCustomTargetingKeys(adunit)
log.info("custom targeting keys for ad unit: \(adunit ?? "-"): \(result)")
return result
}
func initParams(_ IDFA: String, _ IDFV: String, _ params: [String : Any]?) {
log.info("Initialize with IDFA \(IDFA) IDFV \(IDFV) params: \(params ?? [String: Any]())")
wrapperOptimizer.initParams(IDFA, IDFV, params)
}
func logEvent(_ adunit: String?, _ event: String?, _ customParams: [String : Any]) -> Bool {
let result = wrapperOptimizer.logEvent(adunit, event, customParams)
log.info("log event \(event ?? "-") for ad ad unit: \(adunit ?? "-"); result: \(result)")
return result
}
}
protocol AdEventLoggable { protocol AdEventLoggable {
@discardableResult func logEvent(_ adunit: String?, _ event: String?, _ customParams: [String : Any]) -> Bool @discardableResult func logEvent(_ adunit: String?, _ event: String?, _ customParams: [String : Any]) -> Bool
} }
extension TerceptOptimization: TerceptOpimizable { }
final class TerceptSDKManager: AdEventLoggable, DependencyRepresentable { final class TerceptSDKManager: AdEventLoggable, DependencyRepresentable {
private var optimizer: TerceptOpimizable? private var optimizer: TerceptOptimizer?
private let enabler: TerceptSDKEnabler private let enabler: TerceptSDKEnabler
private let log = Logger(componentName: "Tercept")
private struct Constants { private struct Constants {
static let DFPCode: String = "120348554" static let DFPCode: String = "120348554"
static var IDFA: String { AppInfo.idfa ?? "UNKNOWN" } static var IDFA: String { AppInfo.idfa ?? "UNKNOWN" }
...@@ -44,33 +87,40 @@ final class TerceptSDKManager: AdEventLoggable, DependencyRepresentable { ...@@ -44,33 +87,40 @@ final class TerceptSDKManager: AdEventLoggable, DependencyRepresentable {
registerNotifications() registerNotifications()
} }
init(optimizable: TerceptOpimizable, adUnitIDs: [String]) { init(optimizer: TerceptOptimizer, adUnitIDs: [String]) {
self.optimizer = optimizable self.optimizer = optimizer
self.enabler = TerceptSDKEnabler() self.enabler = TerceptSDKEnabler()
attachObserver() attachObserver()
updateKeys() updateKeys()
optimizable.fetch(adUnitIDs) optimizer.fetch(adUnitIDs)
registerNotifications() registerNotifications()
fetchIfAvailable() fetchIfAvailable()
} }
//MARK:- Private //MARK:- Private
private func attachObserver() { private func attachObserver() {
//TODO: got to get rid of all of this...
self.enabler.attachObserver(observer: TerceptConditionsObserver(initSDK: initializeSDK, deinitSDK: deinitSDK)) self.enabler.attachObserver(observer: TerceptConditionsObserver(initSDK: initializeSDK, deinitSDK: deinitSDK))
} }
private func initializeSDK() { private func initializeSDK() {
optimizer = TerceptOptimization(Constants.DFPCode) log.info("Initialize the SDK")
optimizer = TerceptOptimizerWrapper(optimizer: TerceptOptimization(Constants.DFPCode))
updateKeys() updateKeys()
fetchIfAvailable() fetchIfAvailable()
} }
private func deinitSDK() { private func deinitSDK() {
log.info("Shut down the SDK")
optimizer = nil optimizer = nil
} }
private func updateKeys() { private func updateKeys() {
optimizer?.initParams(Constants.IDFA, Constants.IDFV, ["appVersion": Constants.version]) let idfa = Constants.IDFA
let idfv = Constants.IDFV
let params = ["appVersion": Constants.version]
log.info("Update keys: IDFA \(idfa) IDFV \(idfv)")
optimizer?.initParams(idfa, idfv, params)
} }
private func registerNotifications() { private func registerNotifications() {
...@@ -159,6 +209,8 @@ final class TerceptAdTracker: CustomTargetedAdLifeCycleTrackable { ...@@ -159,6 +209,8 @@ final class TerceptAdTracker: CustomTargetedAdLifeCycleTrackable {
} }
func recordAdState(_ state: AdLifeCycleState) { func recordAdState(_ state: AdLifeCycleState) {
// TODO: unravel all this.
// This will eventually be forwarded to the TerceptOptimizer above, thata will log the info into the console.
logger.logEvent(adUnitId, state.rawValue, [:]) logger.logEvent(adUnitId, state.rawValue, [:])
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment