Skip to content

Commit 977456e

Browse files
runnerrunner
authored andcommitted
Release
1 parent 4658009 commit 977456e

File tree

373 files changed

+7795
-2762
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

373 files changed

+7795
-2762
lines changed

Example/UnityAdsExample/ViewController.m

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#import "ViewController.h"
2-
2+
#import "USRVDeviceLog.h"
33
static NSString *const kDefaultGameId = @"14850";
44
static NSString *const kGameIdKey = @"adsExampleAppGameId";
55

@@ -66,11 +66,12 @@ - (IBAction)initializeButtonTapped: (id)sender {
6666
self.gameIdTextField.enabled = NO;
6767
self.testModeSwitch.enabled = NO;
6868

69-
[UnityAds setDebugMode: true];
70-
69+
[UnityAds setDebugMode: false];
70+
[USRVDeviceLog setLogLevel: -1];
7171
[UnityAds initialize: gameId
7272
testMode: self.testMode
7373
initializationDelegate: self];
74+
[USRVDeviceLog setLogLevel: -1];
7475
} /* initializeButtonTapped */
7576

7677
- (IBAction)interstitialLoadButtonTapped: (id)sender {
@@ -116,6 +117,20 @@ - (IBAction)bannerButtonTapped: (id)sender {
116117
}
117118
}
118119

120+
- (void)enableLoad: (BOOL)loadEnabled show: (BOOL)showEnabled forPlacementId: (NSString *)placementId {
121+
if ([placementId isEqualToString: self.interstitialPlacementId]) {
122+
[self toggleButtons: @[self.interstitialShowButton]
123+
enabled: showEnabled];
124+
[self toggleButtons: @[self.interstitialLoadButton]
125+
enabled: loadEnabled];
126+
} else if ([placementId isEqualToString: self.rewardedPlacementId]) {
127+
[self toggleButtons: @[self.rewardedShowButton]
128+
enabled: showEnabled];
129+
[self toggleButtons: @[self.rewardedLoadButton]
130+
enabled: loadEnabled];
131+
}
132+
}
133+
119134
#pragma mark UnityAdsInitializationDelegate
120135

121136
- (void)initializationComplete {
@@ -135,17 +150,9 @@ - (void)initializationFailed: (UnityAdsInitializationError)error
135150
- (void)unityAdsAdLoaded: (NSString *)placementId {
136151
NSLog(@"UnityAds adLoaded");
137152

138-
if ([placementId isEqualToString: self.interstitialPlacementId]) {
139-
[self toggleButtons: @[self.interstitialShowButton]
140-
enabled: YES];
141-
[self toggleButtons: @[self.interstitialLoadButton]
142-
enabled: NO];
143-
} else if ([placementId isEqualToString: self.rewardedPlacementId]) {
144-
[self toggleButtons: @[self.rewardedShowButton]
145-
enabled: YES];
146-
[self toggleButtons: @[self.rewardedLoadButton]
147-
enabled: NO];
148-
}
153+
[self enableLoad: NO
154+
show: YES
155+
forPlacementId: placementId];
149156
}
150157

151158
- (void)unityAdsAdFailedToLoad: (NSString *)placementId withError: (UnityAdsLoadError)error withMessage: (NSString *)message {
@@ -156,21 +163,17 @@ - (void)unityAdsAdFailedToLoad: (NSString *)placementId withError: (UnityAdsLoad
156163
- (void)unityAdsShowComplete: (NSString *)placementId withFinishState: (UnityAdsShowCompletionState)state {
157164
NSLog(@"UnityAds showComplete %@ %ld", placementId, state);
158165

159-
if ([placementId isEqualToString: self.interstitialPlacementId]) {
160-
[self toggleButtons: @[self.interstitialShowButton]
161-
enabled: NO];
162-
[self toggleButtons: @[self.interstitialLoadButton]
163-
enabled: YES];
164-
} else if ([placementId isEqualToString: self.rewardedPlacementId]) {
165-
[self toggleButtons: @[self.rewardedShowButton]
166-
enabled: NO];
167-
[self toggleButtons: @[self.rewardedLoadButton]
168-
enabled: YES];
169-
}
166+
[self enableLoad: YES
167+
show: NO
168+
forPlacementId: placementId];
170169
}
171170

172-
- (void)unityAdsShowFailed: (NSString *)adUnitId withError: (UnityAdsShowError)error withMessage: (NSString *)message {
171+
- (void)unityAdsShowFailed: (NSString *)placementId withError: (UnityAdsShowError)error withMessage: (NSString *)message {
173172
NSLog(@"UnityAds showFailed %@ %ld", message, error);
173+
174+
[self enableLoad: YES
175+
show: NO
176+
forPlacementId: placementId];
174177
}
175178

176179
- (void)unityAdsShowStart: (NSString *)adUnitId {

SourceCode/Private/AR/Configuration/UADSARModuleConfiguration.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ - (BOOL)initModuleState: (USRVConfiguration *)configuration {
1616
return true;
1717
}
1818

19-
- (BOOL)initErrorState: (USRVConfiguration *)configuration state: (NSString *)state message: (NSString *)message {
19+
- (BOOL)initErrorState: (USRVConfiguration *)configuration code: (UADSErrorState)stateCode message: (NSString *)message {
2020
return true;
2121
}
2222

SourceCode/Private/Ads/Api/UADSApiGMAScar/UADSApiGMAScar.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ + (UADSGMAScar *)facade {
2424
}
2525

2626
+ (void)WebViewExposed_getVersion: (USRVWebViewCallback *)callback {
27+
[self sendAvailabilityMetrics];
28+
2729
[callback invoke: self.facade.sdkVersion, nil];
2830
}
2931

@@ -121,4 +123,16 @@ + (void)sendEvent: (id<UADSWebViewEvent>)event {
121123
[self.eventSender sendEvent: event];
122124
}
123125

126+
+ (void)sendAvailabilityMetrics {
127+
if (self.facade.isGADExists) {
128+
[self sendEvent:[GMAWebViewEvent newScarPresent]];
129+
130+
if (!self.facade.isGADSupported) {
131+
[self sendEvent:[GMAWebViewEvent newScarUnsupported]];
132+
}
133+
} else {
134+
[self sendEvent:[GMAWebViewEvent newScarNotPresent]];
135+
}
136+
}
137+
124138
@end
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
#import "USRVWebViewCallback.h"
12
@interface UADSApiToken : NSObject
3+
+ (void)WebViewExposed_getNativeGeneratedToken: (USRVWebViewCallback *)callback;
24
@end

SourceCode/Private/Ads/Api/UADSApiToken.m

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
#import "UADSApiToken.h"
22
#import "USRVWebViewCallback.h"
33
#import "UADSTokenStorage.h"
4-
#import "UADSHeaderBiddingTokenReaderBuilder.h"
4+
#import "UADSServiceProvider.h"
5+
#import "UADSWebViewEvent.h"
6+
7+
NSString *const kTokenEventName = @"TOKEN_NATIVE_DATA";
8+
NSString *const kTokenCategoryName = @"TOKEN";
59

610
@implementation UADSApiToken
711

@@ -25,8 +29,27 @@ + (void)WebViewExposed_setPeekMode: (NSNumber *)value callback: (USRVWebViewCall
2529
[callback invoke: nil];
2630
}
2731

32+
+ (void)WebViewExposed_getNativeGeneratedToken: (USRVWebViewCallback *)callback {
33+
34+
[self.serviceProvider.nativeTokenGenerator getToken:^(UADSHeaderBiddingToken * _Nullable token) {
35+
UADSWebViewEventBase *event = [UADSWebViewEventBase newWithCategory: kTokenCategoryName
36+
withEvent: kTokenEventName
37+
withParams: @[token.value]];
38+
[self.webViewEventSender sendEvent: event];
39+
}];
40+
[callback invoke: nil];
41+
}
42+
2843
+ (id<UADSHeaderBiddingTokenCRUD>)tokenStorage {
29-
return UADSHeaderBiddingTokenReaderBuilder.sharedInstance.defaultReader;
44+
return self.serviceProvider.hbTokenReader;
45+
}
46+
47+
+ (UADSServiceProvider *)serviceProvider {
48+
return UADSServiceProvider.sharedInstance;
49+
}
50+
51+
+ (id<UADSWebViewEventSender>)webViewEventSender {
52+
return self.serviceProvider.webViewEventSender;
3053
}
3154

3255
@end

SourceCode/Private/Ads/Configuration/UADSAdsModuleConfiguration.m

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
#import "UADSWebViewShowOperation.H"
33
#import "UADSTokenStorage.h"
44
#import "UADSAbstractModule.h"
5-
#import "UADSHeaderBiddingTokenReaderBuilder.h"
6-
5+
#import "UADSServiceProvider.h"
76
@implementation UADSAdsModuleConfiguration
87

98
- (NSArray<NSString *> *)getWebAppApiClassList {
@@ -21,7 +20,7 @@ @implementation UADSAdsModuleConfiguration
2120

2221
- (BOOL)resetState: (USRVConfiguration *)configuration {
2322
[self setConfigurationToRequiredModules: configuration];
24-
[[UADSTokenStorage sharedInstance] deleteTokens];
23+
[UADSServiceProvider.sharedInstance.hbTokenReader deleteTokens];
2524
return true;
2625
}
2726

@@ -30,9 +29,9 @@ - (BOOL)initModuleState: (USRVConfiguration *)configuration {
3029
return true;
3130
}
3231

33-
- (BOOL)initErrorState: (USRVConfiguration *)configuration state: (NSString *)state message: (NSString *)message {
34-
[UADSHeaderBiddingTokenReaderBuilder.sharedInstance.defaultReader setInitToken: nil];
35-
[UADSHeaderBiddingTokenReaderBuilder.sharedInstance.defaultReader deleteTokens];
32+
- (BOOL)initErrorState: (USRVConfiguration *)configuration code: (UADSErrorState)stateCode message: (NSString *)message {
33+
[UADSServiceProvider.sharedInstance.hbTokenReader setInitToken: nil];
34+
[UADSServiceProvider.sharedInstance.hbTokenReader deleteTokens];
3635

3736
return true;
3837
}

SourceCode/Private/Ads/Load/UADSAbstractModule/UADSAbstractModule.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
#import <UIKit/UIKit.h>
55
#import "UADSWebViewInvoker.h"
66
#import "UADSAbstractModuleOperationBasicObject.h"
7-
#import "UADSInternalErrorLogger.h"
7+
#import "UADSTimerFactory.h"
8+
#import "UADSEventHandler.h"
89
NS_ASSUME_NONNULL_BEGIN
910

1011
static NSString *const kUnityAdsNotSupportedMessage = @"Unity Ads is not supported for this device";
@@ -16,7 +17,8 @@ typedef NSDictionary<NSString *, id<UADSAbstractModuleOperationObject> > UADSAbs
1617
// Contains common initialization flow for sharedInstances.
1718
+ (instancetype)newSharedModule;
1819
+ (instancetype) newWithInvoker: (id<UADSWebViewInvoker>)invoker
19-
andErrorHandler: (id<UADSInternalErrorHandler>)errorHandler;
20+
andEventHandler: (id<UADSEventHandler>)eventHandler
21+
timerFactory: (id<UADSTimerFactory>)timerFactory;
2022
+ (instancetype) createDefaultModule;
2123
+ (instancetype) sharedInstance;
2224
+ (void)setConfiguration: (USRVConfiguration *)config;
@@ -28,6 +30,7 @@ typedef NSDictionary<NSString *, id<UADSAbstractModuleOperationObject> > UADSAbs
2830

2931
- (id<UADSAbstractModuleOperationObject>)createEventWithPlacementID: (NSString *)placementID
3032
withOptions: (id<UADSDictionaryConvertible>)options
33+
timer: (id<UADSRepeatableTimer>)timer
3134
withDelegate: (id<UADSAbstractModuleDelegate>)delegate;
3235

3336
- (UADSInternalError *_Nullable)executionErrorForPlacementID: (NSString *)placementID;
@@ -37,6 +40,8 @@ typedef NSDictionary<NSString *, id<UADSAbstractModuleOperationObject> > UADSAbs
3740
- (_Nullable id)getDelegateForIDAndRemove: (NSString *)listenerID;
3841
- (NSInteger) operationOperationTimeoutMs;
3942
- (id<UADSAbstractModuleOperationObject>)getOperationWithID: (NSString *)operationID;
43+
- (void)handleSuccess: (NSString *)operationID;
44+
- (void)catchError: (UADSInternalError *)error forId: (NSString *)operationID;
4045
@end
4146

4247
NS_ASSUME_NONNULL_END

SourceCode/Private/Ads/Load/UADSAbstractModule/UADSAbstractModule.m

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#import "UADSAbstractModule.h"
22
#import "USRVConfiguration.h"
3-
#import "NSMutableDictionary + SafeRemoval.h"
3+
#import "NSMutableDictionary+SafeRemoval.h"
44

55
static NSString *const kUADSOperationExpirationMessage = @"%@ method timeout after %li for listener ID %@";
66
static NSString *const kUADSAbstractModuleErrorMessage = @"UADSAbstractModule cannot continue with the empty placement ID";
@@ -13,17 +13,20 @@ @interface UADSAbstractModule ()
1313
@property (nonatomic, strong) dispatch_queue_t synchronizedQueue;
1414
@property (nonatomic, strong) dispatch_queue_t invokeQueue;
1515
@property (nonatomic, strong) id<UADSWebViewInvoker> invoker;
16-
@property (nonatomic, strong) id<UADSInternalErrorHandler> errorHandler;
16+
@property (nonatomic, strong) id<UADSTimerFactory> timerFactory;
17+
@property (nonatomic, strong) id<UADSEventHandler> eventHandler;
1718
@end
1819

1920
@implementation UADSAbstractModule
2021

2122
+ (instancetype)newWithInvoker: (id<UADSWebViewInvoker>)invoker
22-
andErrorHandler: (id<UADSInternalErrorHandler>)errorHandler {
23+
andEventHandler: (id<UADSEventHandler>)eventHandler
24+
timerFactory: (id<UADSTimerFactory>)timerFactory {
2325
UADSAbstractModule *module = [self new];
2426

2527
module.invoker = invoker;
26-
module.errorHandler = errorHandler;
28+
module.eventHandler = eventHandler;
29+
module.timerFactory = timerFactory;
2730
return module;
2831
}
2932

@@ -79,8 +82,10 @@ - (void)executeForPlacement: (NSString *)placementId
7982

8083
id<UADSAbstractModuleOperationObject> operation = [self createEventWithPlacementID: safePlacementID
8184
withOptions: options
85+
timer: [self.timerFactory timerWithAppLifeCycle]
8286
withDelegate: delegate];
8387

88+
[_eventHandler eventStarted: operation.id];
8489
[self saveOperation: operation];
8590

8691

@@ -105,15 +110,31 @@ - (UADSInternalError *_Nullable)executionErrorForPlacementID: (NSString *)placem
105110

106111
- (id<UADSAbstractModuleOperationObject>)createEventWithPlacementID: (NSString *)placementID
107112
withOptions: (id<UADSDictionaryConvertible>)options
113+
timer: (id<UADSRepeatableTimer>)timer
108114
withDelegate: (id<UADSAbstractModuleDelegate>)delegate {
109115
NSAssert(NO, @"Cannot use abstract class");
110116
return nil;
111117
}
112118

119+
- (void)handleSuccess: (NSString *)operationID {
120+
[self.eventHandler onSuccess: operationID];
121+
}
122+
123+
- (void)catchError: (UADSInternalError *)error forId: (nonnull NSString *)operationID {
124+
[self.eventHandler catchError: error
125+
forId: operationID];
126+
}
127+
113128
- (void)logErrorAndNotifyDelegate: (id<UADSAbstractModuleDelegate>)delegate
114129
errorParams: (UADSInternalError *)error
115130
forPlacementID: (NSString *)placementID {
116-
[_errorHandler catchError: error];
131+
// Send both start and failure metrics to align total number of calls.
132+
NSString *failedId = [NSUUID UUID].UUIDString;
133+
134+
[_eventHandler eventStarted: failedId];
135+
[self catchError: error
136+
forId: failedId];
137+
117138
[delegate didFailWithError: error
118139
forPlacementID: placementID];
119140
}
@@ -179,7 +200,8 @@ - (void)notifyDelegateWithInternalError: (UADSInternalError *_Nullable)error
179200
id<UADSAbstractModuleOperationObject> operation = [self getOperationWithID: operationID];
180201

181202
GUARD(operation);
182-
[_errorHandler catchError: error];
203+
[self catchError: error
204+
forId: operationID];
183205
[operation.delegate didFailWithError: error
184206
forPlacementID: operation.placementID];
185207
}

SourceCode/Private/Ads/Load/UADSAbstractModule/UADSAbstractModuleBasicState/UADSAbstractModuleOperationBasicObject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#import "UADSWebViewInvoker.h"
22
#import "UADSAbstractModuleDelegate.h"
3+
#import "UADSTimer.h"
34
NS_ASSUME_NONNULL_BEGIN
45

56
static NSString *const kUADSPlacementIDKey = @"placementId";
@@ -19,6 +20,7 @@ static NSString *const kUADSOptionsDictionaryKey = @"options";
1920
@property (nonatomic, copy) NSString *placementID;
2021
@property (nonatomic, strong) NSNumber *time;
2122
@property (nonatomic, strong) id<UADSDictionaryConvertible> options;
23+
@property (nonatomic, strong, nullable) id<UADSRepeatableTimer> timer;
2224
@property (nonatomic, strong) id<UADSAbstractModuleDelegate> delegate;
2325
@property (nonatomic, assign) NSInteger ttl;
2426
- (void) stopTTLObserving;

SourceCode/Private/Ads/Load/UADSAbstractModule/UADSAbstractModuleBasicState/UADSAbstractModuleOperationBasicObject.m

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@ - (void)startListeningOperationTTLExpiration: (UADSVoidClosure)operationExpired
4141

4242
- (void)startTimer {
4343
__weak typeof(self) weakSelf = self;
44-
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, _ttl * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
45-
[weakSelf signalExpiration];
46-
});
44+
[self.timer scheduleWithTimeInterval: _ttl
45+
repeatCount: 1
46+
block:^(NSInteger index) {
47+
[weakSelf signalExpiration];
48+
}];
4749
}
4850

4951
- (void)signalExpiration {
@@ -53,6 +55,8 @@ - (void)signalExpiration {
5355
}
5456

5557
- (void)stopTTLObserving {
58+
[self.timer invalidate];
59+
self.timer = nil;
5660
_operationExpired = nil;
5761
}
5862

0 commit comments

Comments
 (0)