-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathNimbusUnityRequestInterceptor.swift
109 lines (87 loc) · 3.16 KB
/
NimbusUnityRequestInterceptor.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//
// NimbusUnityRequestInterceptor.swift
// NimbusUnityKit
//
// Created on 6/2/21.
// Copyright © 2021 Nimbus Advertising Solutions Inc. All rights reserved.
//
@_exported import NimbusRequestKit
import UnityAds
public class NimbusUnityRequestInterceptor: NSObject {
var isSupported: Bool {
UnityAds.isSupported()
}
var isInitialized: Bool {
UnityAds.isInitialized()
}
var token: String? {
UnityAds.getToken()
}
public init(gameId: String) {
super.init()
let metadata = UADSMetaData(category: "headerbidding")
metadata?.setRaw("mode", value: "enabled")
metadata?.commit()
UnityAds.setDebugMode(Nimbus.shared.logLevel != .off)
UnityAds.initialize(
gameId,
testMode: Nimbus.shared.testMode,
initializationDelegate: self
)
Nimbus.shared.logger.log("Unity provider initialized", level: .info)
}
}
// MARK: NimbusRequestInterceptor
/// :nodoc:
extension NimbusUnityRequestInterceptor: NimbusRequestInterceptor {
/// :nodoc:
public func modifyRequest(request: NimbusRequest) {
Nimbus.shared.logger.log("Modifying NimbusRequest for Unity", level: .debug)
guard request.impressions.first?.video?.isRewarded == true else {
Nimbus.shared.logger.log(
"NimbusRequest is not a rewarded ad request, skipping Unity ads modification",
level: .debug
)
return
}
guard isSupported else {
Nimbus.shared.logger.log("UnityAds not supported on current device", level: .error)
return
}
guard isInitialized else {
Nimbus.shared.logger.log("UnityAds not initialized", level: .error)
return
}
guard let token else {
Nimbus.shared.logger.log("UnityAds token absent", level: .error)
return
}
if request.user == nil { request.user = NimbusUser() }
if request.user?.extensions == nil { request.user?.extensions = [:] }
request.user?.extensions?["unity_buyeruid"] = NimbusCodable(token)
request.device.hardwareVersion = UIDevice.current.nimbusModelName
}
/// :nodoc:
public func didCompleteNimbusRequest(with response: NimbusAd) {
Nimbus.shared.logger.log("Completed NimbusRequest with Unity", level: .debug)
}
/// :nodoc:
public func didFailNimbusRequest(with error: NimbusError) {
Nimbus.shared.logger.log("Failed NimbusRequest with Unity", level: .error)
}
}
// MARK: UnityAdsInitializationDelegate
/// :nodoc:
extension NimbusUnityRequestInterceptor: UnityAdsInitializationDelegate {
/// :nodoc:
public func initializationComplete() {
Nimbus.shared.logger.log("Unity SDK initialization completed!", level: .debug)
}
/// :nodoc:
public func initializationFailed(
_ error: UnityAdsInitializationError,
withMessage message: String
) {
Nimbus.shared.logger.log("Unity SDK initialization failed: \(message)", level: .error)
}
}