Skip to content

Commit 6170817

Browse files
authored
EUID Support (#19)
1 parent 03095c0 commit 6170817

File tree

7 files changed

+150
-9
lines changed

7 files changed

+150
-9
lines changed

Development/UID2GoogleIMADevelopmentApp/UID2GoogleIMADevelopmentApp/Info.plist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
44
<dict>
5+
<key>UID2EnvironmentEUID</key>
6+
<false/>
57
<key>UIMainStoryboardFile~ipad</key>
68
<string>iPad</string>
79
<key>UIMainStoryboardFile</key>

Development/UID2GoogleIMADevelopmentApp/UID2GoogleIMADevelopmentApp/ViewController.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,16 @@ class ViewController: UIViewController, IMAAdsLoaderDelegate, IMAAdsManagerDeleg
2828
private var contentPlayhead: IMAAVPlayerContentPlayhead?
2929
private let adsLoader = IMAAdsLoader(settings: nil)
3030
private var adsManager: IMAAdsManager?
31-
31+
32+
private let manager: UID2Manager = {
33+
let isEUID = Bundle.main.object(forInfoDictionaryKey: "UID2EnvironmentEUID") as? Bool ?? false
34+
if isEUID {
35+
return EUIDManager.shared
36+
} else {
37+
return UID2Manager.shared
38+
}
39+
}()
40+
3241
// MARK: - View controller lifecycle methods
3342

3443
override func viewDidLoad() {
@@ -69,7 +78,7 @@ class ViewController: UIViewController, IMAAdsLoaderDelegate, IMAAdsManagerDeleg
6978
refreshResponseKey: uid2IdentityFromFile.refreshResponseKey)
7079

7180
Task {
72-
await UID2Manager.shared.setIdentity(uid2Identity)
81+
await manager.setIdentity(uid2Identity)
7382
}
7483
} catch {
7584
print("Error loading UID2Identity")

RELEASE_PROCESS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Version Numbering follows [Semantic Versioning](https://semver.org) standards.
1515
*https://github.com/IABTechLab/uid2-ios-plugin-google-ima/blob/ac286e2c9241c04c001ff7a42a4cbb1dfc2c80b9/Package.swift#L18
1616
* Update / Confirm `adapterVersion()` in `UID2IMASecureSignalsAdapter.swift` is set to expected version
1717
* https://github.com/IABTechLab/uid2-ios-plugin-google-ima/blob/ac286e2c9241c04c001ff7a42a4cbb1dfc2c80b9/Sources/UID2IMAPlugin/UID2IMASecureSignalsAdapter.swift#L24-L30
18+
* Update / Confirm `adapterVersion()` in `EUIDIMASecureSignalsAdapter.swift` is set to expected version
19+
* https://github.com/IABTechLab/uid2-ios-plugin-google-ima/blob/d5278ce634aa228712d9a6dae032232df7f2a434/Sources/UID2IMAPlugin/EUIDIMASecureSignalsAdapter.swift#L22-L28
1820
* Update / Confirm `version` and `source.tag` in `UID2IMAPlugin.podspec.json` are set to expected version
1921
* https://github.com/IABTechLab/uid2-ios-plugin-google-ima/blob/main/UID2IMAPlugin.podspec.jsonL6-L12
2022
* Add and / or Edit any ADRs that support this release
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
//
2+
// EUIDIMASecureSignalsAdapter.swift
3+
//
4+
5+
import Foundation
6+
import GoogleInteractiveMediaAds
7+
import UID2
8+
9+
@available(iOS 13.0, *)
10+
@objc(EUIDIMASecureSignalsAdapter)
11+
public class EUIDIMASecureSignalsAdapter: NSObject {
12+
13+
required public override init() {
14+
// Ensure UID2Manager has started
15+
_ = EUIDManager.shared
16+
}
17+
18+
}
19+
20+
@available(iOS 13, *)
21+
extension EUIDIMASecureSignalsAdapter: IMASecureSignalsAdapter {
22+
23+
public static func adapterVersion() -> IMAVersion {
24+
let version = IMAVersion()
25+
version.majorVersion = 1
26+
version.minorVersion = 0
27+
version.patchVersion = 0
28+
return version
29+
}
30+
31+
public static func adSDKVersion() -> IMAVersion {
32+
let sdkVersion = UID2SDKProperties.getUID2SDKVersion()
33+
let version = IMAVersion()
34+
version.majorVersion = sdkVersion.major
35+
version.minorVersion = sdkVersion.minor
36+
version.patchVersion = sdkVersion.patch
37+
return version
38+
}
39+
40+
public func collectSignals(completion: @escaping IMASignalCompletionHandler) {
41+
Task {
42+
guard let advertisingToken = await EUIDManager.shared.getAdvertisingToken() else {
43+
completion(nil, AdvertisingTokenNotFoundError())
44+
return
45+
}
46+
completion(advertisingToken, nil)
47+
}
48+
}
49+
}

Sources/UID2IMAPlugin/UID2IMASecureSignalsAdapter.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,18 @@ extension UID2IMASecureSignalsAdapter: IMASecureSignalsAdapter {
2525

2626
public static func adapterVersion() -> IMAVersion {
2727
let version = IMAVersion()
28-
version.majorVersion = 0
29-
version.minorVersion = 4
28+
version.majorVersion = 1
29+
version.minorVersion = 0
3030
version.patchVersion = 0
3131
return version
3232
}
3333

3434
public static func adSDKVersion() -> IMAVersion {
35+
let sdkVersion = UID2SDKProperties.getUID2SDKVersion()
3536
let version = IMAVersion()
36-
version.majorVersion = UID2SDKProperties.getUID2SDKVersion().major
37-
version.minorVersion = UID2SDKProperties.getUID2SDKVersion().minor
38-
version.patchVersion = UID2SDKProperties.getUID2SDKVersion().patch
37+
version.majorVersion = sdkVersion.major
38+
version.minorVersion = sdkVersion.minor
39+
version.patchVersion = sdkVersion.patch
3940
return version
4041
}
4142

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
//
2+
// EUIDIMASecureSignalsAdapterTests.swift
3+
//
4+
5+
import XCTest
6+
import GoogleInteractiveMediaAds
7+
import UID2
8+
import UID2IMAPlugin
9+
10+
final class EUIDIMASecureSignalsAdapterTests: XCTestCase {
11+
/// 🟩 - IMA Adapter Request Signal Success
12+
func testRequestSignalsSuccess() async throws {
13+
// Seed the sample UID2Identity data in the UID2Manager
14+
await EUIDManager.shared.setAutomaticRefreshEnabled(false)
15+
await EUIDManager.shared.setIdentity(
16+
UID2Identity(
17+
advertisingToken: "euid-test-token",
18+
refreshToken: "refresh-token",
19+
identityExpires: Date(timeIntervalSinceNow: 60 * 60).millisecondsSince1970,
20+
refreshFrom: Date(timeIntervalSinceNow: 60 * 40).millisecondsSince1970,
21+
refreshExpires: Date(timeIntervalSinceNow: 60 * 50).millisecondsSince1970,
22+
refreshResponseKey: ""
23+
)
24+
)
25+
26+
let signal = try await EUIDIMASecureSignalsAdapter().collectSignals()
27+
28+
// Confirm that Adapter returns expected data
29+
XCTAssertEqual("euid-test-token", signal)
30+
}
31+
32+
/// 🟥 - GMA Adapter Request Signal Error No Identity
33+
func testRequestSignalsNoIdentity() async throws {
34+
// Ensure no identity is set
35+
await EUIDManager.shared.resetIdentity()
36+
37+
let result = await Task<String?, Error> {
38+
try await EUIDIMASecureSignalsAdapter().collectSignals()
39+
}.result
40+
XCTAssertThrowsError(try result.get()) { error in
41+
let adapterError = error as? AdvertisingTokenNotFoundError
42+
XCTAssertEqual(AdvertisingTokenNotFoundError(), adapterError)
43+
}
44+
}
45+
46+
/// 🟥 - IMA Adapter Request Signal No Advertising Token Error
47+
func testRequestSignalsNoAdvertisingToken() async throws {
48+
// Set an identity with an invalid advertisingToken
49+
await EUIDManager.shared.setAutomaticRefreshEnabled(false)
50+
await EUIDManager.shared.setIdentity(
51+
UID2Identity(
52+
advertisingToken: "",
53+
refreshToken: "refresh-token",
54+
identityExpires: Date(timeIntervalSinceNow: 60 * 60).millisecondsSince1970,
55+
refreshFrom: Date(timeIntervalSinceNow: 60 * 40).millisecondsSince1970,
56+
refreshExpires: Date(timeIntervalSinceNow: 60 * 50).millisecondsSince1970,
57+
refreshResponseKey: ""
58+
)
59+
)
60+
61+
let result = await Task<String?, Error> {
62+
try await EUIDIMASecureSignalsAdapter().collectSignals()
63+
}.result
64+
XCTAssertThrowsError(try result.get()) { error in
65+
let adapterError = error as? AdvertisingTokenNotFoundError
66+
XCTAssertEqual(AdvertisingTokenNotFoundError(), adapterError)
67+
}
68+
}
69+
70+
func testAdSDKVersion() async throws {
71+
let adSDKVersion = EUIDIMASecureSignalsAdapter.adSDKVersion()
72+
let sdkVersion = await EUIDManager.shared.sdkVersion
73+
74+
XCTAssertEqual(sdkVersion.major, adSDKVersion.majorVersion)
75+
XCTAssertEqual(sdkVersion.minor, adSDKVersion.minorVersion)
76+
XCTAssertEqual(sdkVersion.patch, adSDKVersion.patchVersion)
77+
}
78+
}

UID2IMAPlugin.podspec.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
"summary": "A plugin for integrating UID2 and Google IMA into iOS applications.",
44
"homepage": "https://unifiedid.com/",
55
"license": "Apache License, Version 2.0",
6-
"version": "0.4.0",
6+
"version": "1.0.0",
77
"authors": {
88
"David Snabel-Caunt": "[email protected]"
99
},
1010
"source": {
1111
"git": "https://github.com/IABTechLab/uid2-ios-plugin-google-ima.git",
12-
"tag": "v0.4.0"
12+
"tag": "v1.0.0"
1313
},
1414
"platforms": {
1515
"ios": "12.0"

0 commit comments

Comments
 (0)