Skip to content

Commit fa01420

Browse files
runnerrunner
authored andcommitted
Release 4.9.0
1 parent 737812a commit fa01420

File tree

96 files changed

+1340
-1023
lines changed

Some content is hidden

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

96 files changed

+1340
-1023
lines changed

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

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ + (void)WebViewExposed_isAvailable: (USRVWebViewCallback *)callback {
3535
[callback invoke: [NSNumber numberWithBool: present], nil];
3636
}
3737

38-
+ (void)WebViewExposed_getSCARSignals: (NSArray *)interstitialPlacements
39-
rewardedPlacements: (NSArray *)rewardedPlacements
40-
callback: (USRVWebViewCallback *)callback {
38+
+(void)WebViewExposed_getSCARSignal: (NSString *)placementId
39+
adFormat: (NSString *)adFormat
40+
callback: (USRVWebViewCallback *)callback {
4141
id success = ^(NSString *_Nullable signals) {
4242
GMAWebViewEvent *event = [GMAWebViewEvent newSignalsEvent: signals];
4343
[self sendEvent: event];
@@ -47,14 +47,10 @@ + (void)WebViewExposed_getSCARSignals: (NSArray *)interstitialPlacements
4747
[self.errorHandler catchError: error];
4848
};
4949

50-
UADSGMAEncodedSignalsCompletion *completion = [UADSGMAEncodedSignalsCompletion newWithSuccess: success
51-
andError: error];
52-
53-
[self.facade getSCARSignalsUsingInterstitialList: interstitialPlacements
54-
andRewardedList: rewardedPlacements
55-
completion: completion];
56-
57-
[callback invoke: nil];
50+
UADSGMAEncodedSignalsCompletion *completion = [UADSGMAEncodedSignalsCompletion newWithSuccess: success andError: error];
51+
UADSScarSignalParameters *params = [[UADSScarSignalParameters alloc] initWithPlacementId:placementId adFormat: [self getInfoAdTypeFrom:adFormat]];
52+
[self.facade getSCARSignals: @[ params ]
53+
completion: completion];
5854
}
5955

6056
+ (void)WebViewExposed_load: (NSString *)placementId
@@ -135,4 +131,14 @@ + (void)sendAvailabilityMetrics {
135131
}
136132
}
137133

134+
+ (GADQueryInfoAdType)getInfoAdTypeFrom: (NSString *)adFormat {
135+
if ([adFormat isEqualToString: @"interstitial"]) {
136+
return GADQueryInfoAdTypeInterstitial;
137+
}
138+
if ([adFormat isEqualToString: @"rewarded"]) {
139+
return GADQueryInfoAdTypeRewarded;
140+
}
141+
return GADQueryInfoAdTypeBanner;
142+
}
143+
138144
@end

SourceCode/Private/Ads/Load/UADSBannerLoadModule/UADSBannerLoadModuleDelegateWrapper.m

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,41 @@ - (void)didFailWithError:(UADSInternalError * _Nonnull)error forPlacementID:(NSS
2525

2626
- (void)bannerViewDidLoad: (UADSBannerView *)bannerView {
2727
dispatch_on_main( ^{
28-
[self.decorated bannerViewDidLoad: self.bannerView];
28+
if ([self.decorated respondsToSelector: @selector(bannerViewDidLoad:)]) {
29+
[self.decorated bannerViewDidLoad: self.bannerView];
30+
}
2931
});
3032
}
3133

3234
- (void)bannerViewDidShow:(UADSBannerView *)bannerView {
3335
dispatch_on_main( ^{
34-
[self.decorated bannerViewDidShow: self.bannerView];
36+
if ([self.decorated respondsToSelector: @selector(bannerViewDidShow:)]) {
37+
[self.decorated bannerViewDidShow: self.bannerView];
38+
}
3539
});
3640
}
3741

3842
- (void)bannerViewDidClick: (UADSBannerView *)bannerView {
3943
dispatch_on_main( ^{
40-
[self.decorated bannerViewDidClick: self.bannerView];
44+
if ([self.decorated respondsToSelector: @selector(bannerViewDidClick:)]) {
45+
[self.decorated bannerViewDidClick: self.bannerView];
46+
}
4147
});
4248
}
4349

4450
- (void)bannerViewDidLeaveApplication: (UADSBannerView *)bannerView {
4551
dispatch_on_main( ^{
46-
[self.decorated bannerViewDidLeaveApplication: self.bannerView];
52+
if ([self.decorated respondsToSelector: @selector(bannerViewDidLeaveApplication:)]) {
53+
[self.decorated bannerViewDidLeaveApplication: self.bannerView];
54+
}
4755
});
4856
}
4957

5058
- (void)bannerViewDidError: (UADSBannerView *)bannerView error: (UADSBannerError *)error {
5159
dispatch_on_main( ^{
52-
[self.decorated bannerViewDidError: self.bannerView error: error];
60+
if ([self.decorated respondsToSelector: @selector(bannerViewDidError:error:)]) {
61+
[self.decorated bannerViewDidError: self.bannerView error: error];
62+
}
5363
});
5464
}
5565

SourceCode/Private/Banners/Api/UADSApiBanner.m

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
#import "UADSBannerRefreshInfo.h"
88
#import "UADSBannerWebPlayerContainerType.h"
99
#import "UADSBannerLoadModule.h"
10+
#import "UADSGMAScar.h"
11+
#import "GADBannerViewBridge.h"
12+
#import "GMABannerWebViewEvent.h"
13+
#import "UADSGADBannerWrapper.h"
14+
#import "UIViewController+TopController.h"
15+
#import "UADSTools.h"
1016

1117
@implementation UADSApiBanner
1218

@@ -70,4 +76,61 @@ + (void)WebViewExposed_setRefreshRate: (NSString *)placementId refreshRate: (NSN
7076
[callback invoke: nil];
7177
}
7278

79+
+ (void)WebViewExposed_loadScar: (NSString *)bannerAd
80+
placementId: (NSString *)placementId
81+
queryId: (NSString *)queryId
82+
adUnitId: (NSString *)adUnitId
83+
adString: (NSString *)adString
84+
width: (NSNumber *)width
85+
height: (NSNumber *)height
86+
callback: (USRVWebViewCallback *)callback {
87+
88+
UADSBannerView *bannerView = [[UADSBannerLoadModule sharedInstance] bannerViewWithID:bannerAd];
89+
if (!bannerView) {
90+
return;
91+
}
92+
93+
CGSize bannerSize = CGSizeMake(width.floatValue, height.floatValue);
94+
GMAAdMetaData *data = [GMAAdMetaData new];
95+
data.type = GADQueryInfoAdTypeBanner;
96+
data.placementID = placementId;
97+
data.adString = adString;
98+
data.adUnitID = adUnitId;
99+
data.queryID = queryId;
100+
data.bannerAdId = bannerAd;
101+
data.bannerSize = bannerSize;
102+
103+
UADSGADBannerWrapper *wrapper = [UADSGADBannerWrapper newWithMeta: data
104+
eventSender: self.eventSender
105+
gmaScar: UADSGMAScar.sharedInstance];
106+
107+
data.beforeLoad = ^(GADBaseAd *_Nullable ad) {
108+
wrapper.gadBanner = (GADBannerViewBridge *)ad;
109+
dispatch_on_main_sync(^{
110+
[wrapper addToBannerView:bannerView withSize:bannerSize];
111+
});
112+
};
113+
114+
id successHandler = ^(GADBaseAd *_Nullable ad) {
115+
[self.eventSender sendEvent: [GMABannerWebViewEvent newBannerLoadedWithMeta: data]];
116+
};
117+
118+
id errorHandler = ^(id<UADSError> _Nonnull error) {
119+
[self.eventSender sendEvent: [GMABannerWebViewEvent newBannerLoadFailedWithMeta: data]];
120+
dispatch_on_main_sync(^{
121+
[wrapper removeFromSuperview]; // remove from UADSBannerView
122+
});
123+
};
124+
125+
UADSLoadAdCompletion *completion = [UADSLoadAdCompletion newWithSuccess: successHandler
126+
andError: errorHandler];
127+
128+
[[UADSGMAScar sharedInstance] loadAdUsingMetaData:data andCompletion:completion];
129+
[callback invoke: nil];
130+
}
131+
132+
+ (id<UADSWebViewEventSender>)eventSender {
133+
return [UADSWebViewEventSenderBase new];
134+
}
135+
73136
@end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#import <UIKit/UIKit.h>
2+
#import "UADSBannerView.h"
3+
#import "GADBannerViewBridge.h"
4+
#import "UADSWebViewEventSender.h"
5+
#import "GMAAdMetaData.h"
6+
#import "UADSGMAScar.h"
7+
8+
NS_ASSUME_NONNULL_BEGIN
9+
10+
@interface UADSGADBannerWrapper : UIView
11+
@property (nonatomic, strong) GADBannerViewBridge *gadBanner;
12+
13+
+ (instancetype)newWithMeta: (GMAAdMetaData *)meta eventSender: (id<UADSWebViewEventSender>)eventSender gmaScar:(UADSGMAScar*)gmaScar;
14+
- (void)addToBannerView: (UADSBannerView *)bannerView withSize: (CGSize)size;
15+
- (void)updateGADBannerRootViewController;
16+
17+
@end
18+
19+
NS_ASSUME_NONNULL_END
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#import <UIKit/UIKit.h>
2+
#import "UIView+Subview.h"
3+
#import "UADSGADBannerWrapper.h"
4+
#import "UIViewController+TopController.h"
5+
#import "UIView+ParentViewController.h"
6+
#import "GMABannerWebViewEvent.h"
7+
8+
@interface UADSGADBannerWrapper()
9+
@property (nonatomic, strong) id<UADSWebViewEventSender> eventSender;
10+
@property (nonatomic, strong) GMAAdMetaData *meta;
11+
@property (nonatomic, strong) UADSGMAScar *gmaScar;
12+
@end
13+
14+
@implementation UADSGADBannerWrapper
15+
16+
+ (instancetype)newWithMeta: (GMAAdMetaData *)meta eventSender: (id<UADSWebViewEventSender>)eventSender gmaScar:(UADSGMAScar*)gmaScar {
17+
UADSGADBannerWrapper *wrapper = [UADSGADBannerWrapper new];
18+
wrapper.meta = meta;
19+
wrapper.eventSender = eventSender;
20+
wrapper.gmaScar = gmaScar;
21+
return wrapper;
22+
}
23+
24+
- (void)addToBannerView: (UADSBannerView *)bannerView withSize: (CGSize)size {
25+
[bannerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
26+
[bannerView addSubview:self withSize:size];
27+
28+
UIView *gBannerView = self.gadBannerView;
29+
[self addSubview:gBannerView withSize:size];
30+
31+
[self updateGADBannerRootViewController];
32+
}
33+
34+
- (void)updateGADBannerRootViewController {
35+
[self.gadBanner setRootViewController: self.bannerRootViewController];
36+
}
37+
38+
- (UIViewController *)bannerRootViewController {
39+
return [self parentViewController] ?: [UIViewController uads_getTopController];
40+
}
41+
42+
- (UIView *)gadBannerView {
43+
return (UIView *)self.gadBanner.proxyObject;
44+
}
45+
46+
- (void)willMoveToSuperview:(UIView *)newSuperview {
47+
if (newSuperview == nil) {
48+
[self.gmaScar removeAdForPlacement: self.meta.placementID];
49+
}
50+
}
51+
52+
- (void)willMoveToWindow:(UIWindow *)newWindow {
53+
if (newWindow) {
54+
[self updateGADBannerRootViewController];
55+
[self sendAttachedEvent];
56+
} else {
57+
[self sendDettachedEvent];
58+
}
59+
}
60+
61+
- (void)sendAttachedEvent {
62+
[self.eventSender sendEvent:[GMABannerWebViewEvent newBannerAttachedWithMeta: self.meta]];
63+
}
64+
65+
- (void)sendDettachedEvent {
66+
[self.eventSender sendEvent:[GMABannerWebViewEvent newBannerDetachedWithMeta: self.meta]];
67+
}
68+
69+
@end

SourceCode/Private/Core/Configuration/ConfigurationStorage/UADSConfigurationCRUDBase.m

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -165,31 +165,4 @@ - (NSString *)getCurrentScarHBURL {
165165
return scarURL ?: kDefaultScarURL;
166166
}
167167

168-
- (UADSSCARHBStrategyType) selectedSCARHBStrategyType {
169-
USRVConfiguration *config = [ self getCurrentConfiguration];
170-
if (!config.experiments.json) {
171-
return UADSSCARHeaderBiddingStrategyTypeDisabled;
172-
}
173-
NSDictionary* strategyDictionary = config.experiments.json[@"scar_bm"];
174-
if (![strategyDictionary isKindOfClass:[NSDictionary class]]) {
175-
return UADSSCARHeaderBiddingStrategyTypeDisabled;
176-
}
177-
NSString* strategyValue = strategyDictionary[@"value"];
178-
return [self selectedStrategyTypeForString:strategyValue];
179-
}
180-
181-
- (UADSSCARHBStrategyType) selectedStrategyTypeForString:(NSString*)stringValue {
182-
if ([stringValue isEqualToString:@"eag"]) {
183-
return UADSSCARHeaderBiddingStrategyTypeEager;
184-
}
185-
if ([stringValue isEqualToString:@"laz"]) {
186-
return UADSSCARHeaderBiddingStrategyTypeLazy;
187-
}
188-
if ([stringValue isEqualToString:@"hyb"]) {
189-
return UADSSCARHeaderBiddingStrategyTypeHybrid;
190-
}
191-
return UADSSCARHeaderBiddingStrategyTypeDisabled;
192-
}
193-
194-
195168
@end

SourceCode/Private/Core/Configuration/SDKConfigurationReader/UADSConfigurationExperiments.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@ NS_ASSUME_NONNULL_BEGIN
66
@property (readonly) NSDictionary<NSString *, NSDictionary *> *json;
77
+ (instancetype)newWithJSON: (NSDictionary<NSString *, NSDictionary *> *)json;
88

9-
- (BOOL) isSwiftDownloadEnabled;
10-
- (BOOL) isSwiftNativeRequestsEnabled;
11-
- (BOOL) isSwiftWebViewRequestsEnabled;
12-
- (BOOL) isSwiftInitFlowEnabled;
13-
- (BOOL) isUseNewTasksEnabled;
14-
- (BOOL) isParallelExecutionEnabled;
15-
- (BOOL) isPrivacyWaitEnabled;
16-
- (BOOL) isNativeWebViewCacheEnabled;
17-
- (BOOL) isWebAdAssetCacheEnabled;
18-
- (BOOL) isSwiftTokenEnabled;
19-
- (BOOL) isOrientationSafeguardEnabled;
9+
- (BOOL) isSwiftDownloadEnabled;
10+
- (BOOL) isSwiftNativeRequestsEnabled;
11+
- (BOOL) isSwiftWebViewRequestsEnabled;
12+
- (BOOL) isSwiftInitFlowEnabled;
13+
- (BOOL) isUseNewTasksEnabled;
14+
- (BOOL) isParallelExecutionEnabled;
15+
- (BOOL) isPrivacyWaitEnabled;
16+
- (BOOL) isNativeWebViewCacheEnabled;
17+
- (BOOL) isWebAdAssetCacheEnabled;
18+
- (BOOL) isSwiftTokenEnabled;
19+
- (BOOL) isOrientationSafeguardEnabled;
20+
- (BOOL) isScarBannerSignalsEnabled;
2021

2122
- (NSDictionary<NSString *, NSString *> *)nextSessionFlags;
2223
- (NSDictionary<NSString *, NSString *> *)currentSessionFlags;

SourceCode/Private/Core/Configuration/SDKConfigurationReader/UADSConfigurationExperiments.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ - (BOOL)isOrientationSafeguardEnabled {
8181
return [self isExperimentEnabledWithKey: @"osg"];
8282
}
8383

84+
- (BOOL) isScarBannerSignalsEnabled {
85+
return [self isExperimentEnabledWithKey: @"scar_bn"];
86+
}
87+
8488
- (NSDictionary<NSString *, NSString *> *)nextSessionFlags {
8589
return [self flattenFlagsWith:^BOOL (id key) {
8690
return [self isExperimentForNextSession: key];

SourceCode/Private/Core/Device/HeaderBiddingTokenReader/ScarHeaderBidding/UADSHeaderBiddingTokenReaderSCARSignalsConfig.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ NS_ASSUME_NONNULL_BEGIN
1414
@property (nonatomic, strong) id<IUSRVWebRequestFactory> requestFactory;
1515
@property (nonatomic, strong) id<GMASCARSignalService> signalService;
1616
@property (nonatomic, weak) id<USRVStringCompressor> compressor;
17-
@property (nonatomic, strong) id<UADSSCARHeaderBiddingStrategyFactory> strategyFactory;
1817
@property (nonatomic, strong) id<UADSDeviceIDFIReader> idfiReader;
1918
@property (nonatomic, strong) id<UADSConfigurationReader> configurationReader;
2019
@property (nonatomic, strong) id<ISDKMetrics> metricsSender;

SourceCode/Private/Core/Device/HeaderBiddingTokenReader/ScarHeaderBidding/UADSHeaderBiddingTokenReaderSCARSignalsConfig.m

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
#import "UADSHeaderBiddingTokenReaderSCARSignalsConfig.h"
2-
#import "UADSSCARHeaderBiddingFetchSendStrategyFactory.h"
3-
#import "UADSSCARHeaderBiddingStrategyFactory.h"
42

53
@implementation UADSHeaderBiddingTokenReaderSCARSignalsConfig
64

75
-(instancetype) init {
86
SUPER_INIT;
9-
UADSSCARHeaderBiddingFetchSendStrategyFactory* strategyFactory = [UADSSCARHeaderBiddingFetchSendStrategyFactory new];
10-
strategyFactory.config = self;
11-
self.strategyFactory = strategyFactory;
127
self.idfiReader = [UADSDeviceIDFIReaderBase new];
138
self.timestampReader = [UADSCurrentTimestampBase new];
149

0 commit comments

Comments
 (0)