Skip to content

Commit

Permalink
[IOS-6797] Support in-feed Placement (#17)
Browse files Browse the repository at this point in the history
* Updated adapter to support in-feed placements
  • Loading branch information
ashinagawa committed Jul 30, 2024
1 parent 2522fa4 commit c5bf621
Showing 1 changed file with 74 additions and 59 deletions.
133 changes: 74 additions & 59 deletions Vungle/VungleAdapter/ALVungleMediationAdapter.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#import "ALVungleMediationAdapter.h"
#import <VungleAdsSDK/VungleAdsSDK.h>

#define ADAPTER_VERSION @"7.3.1.0"
#define ADAPTER_VERSION @"7.4.0.0"

@interface ALVungleMediationAdapterInterstitialAdDelegate : NSObject <VungleInterstitialDelegate>
@property (nonatomic, weak) ALVungleMediationAdapter *parentAdapter;
Expand All @@ -30,11 +30,12 @@ @interface ALVungleMediationAdapterRewardedAdDelegate : NSObject <VungleRewarded
- (instancetype)initWithParentAdapter:(ALVungleMediationAdapter *)parentAdapter andNotify:(id<MARewardedAdapterDelegate>)delegate;
@end

@interface ALVungleMediationAdapterAdViewDelegate : NSObject <VungleBannerDelegate>
@interface ALVungleMediationAdapterAdViewDelegate : NSObject <VungleBannerViewDelegate>
@property (nonatomic, weak) ALVungleMediationAdapter *parentAdapter;
@property (nonatomic, strong) MAAdFormat *adFormat;
@property (nonatomic, strong) id<MAAdapterResponseParameters> parameters;
@property (nonatomic, strong) id<MAAdViewAdapterDelegate> delegate;
@property (nonatomic, assign) BOOL isAdloadSuccess;
- (instancetype)initWithParentAdapter:(ALVungleMediationAdapter *)parentAdapter
format:(MAAdFormat *)adFormat
parameters:(id<MAAdapterResponseParameters>)parameters
Expand Down Expand Up @@ -84,8 +85,7 @@ @interface ALVungleMediationAdapter ()
@property (nonatomic, strong) ALVungleMediationAdapterRewardedAdDelegate *rewardedAdDelegate;

// AdView
@property (nonatomic, strong) VungleBanner *adView;
@property (nonatomic, strong) UIView *adViewContainer;
@property (nonatomic, strong) VungleBannerView *adView;
@property (nonatomic, strong) ALVungleMediationAdapterAdViewDelegate *adViewDelegate;

// Native Ad
Expand Down Expand Up @@ -173,7 +173,6 @@ - (void)destroy
self.adView.delegate = nil;
self.adView = nil;
self.adViewDelegate = nil;
self.adViewContainer = nil;

[self.nativeAd unregisterView];
self.nativeAd.delegate = nil;
Expand Down Expand Up @@ -402,17 +401,14 @@ - (void)loadAdViewAdForParameters:(id<MAAdapterResponseParameters>)parameters ad
}
else
{
BannerSize adSize = [self adSizeFromAdFormat: adFormat];

self.adView = [[VungleBanner alloc] initWithPlacementId: placementIdentifier size: adSize];
VungleAdSize *adSize = [self adSizeFromAdFormat: adFormat parameters:parameters];
self.adView = [[VungleBannerView alloc] initWithPlacementId: placementIdentifier vungleAdSize: adSize];
self.adViewDelegate = [[ALVungleMediationAdapterAdViewDelegate alloc] initWithParentAdapter: self
format: adFormat
parameters: parameters
andNotify: delegate];
self.adView.delegate = self.adViewDelegate;

self.adViewContainer = [[UIView alloc] initWithFrame: (CGRect) { CGPointZero, adFormat.size }];


[self.adView load: bidResponse];
}
}
Expand Down Expand Up @@ -518,24 +514,32 @@ - (void)loadVungleNativeAdForParameters:(id<MAAdapterResponseParameters>)paramet
return clickableViews;
}

- (BannerSize)adSizeFromAdFormat:(MAAdFormat *)adFormat
- (VungleAdSize *)adSizeFromAdFormat:(MAAdFormat *)adFormat
parameters:(id<MAAdapterParameters>)parameters
{
if ( adFormat == MAAdFormat.banner )
BOOL isAdaptiveBanner = [parameters.localExtraParameters al_boolForKey: @"adaptive_banner"];
NSNumber *customWidth = [parameters.localExtraParameters al_numberForKey: @"adaptive_banner_width"];
NSNumber *customHight = [parameters.localExtraParameters al_numberForKey: @"adaptive_banner_height"];

if (!isAdaptiveBanner && customWidth && customHight) {
return [VungleAdSize VungleAdSizeFromCGSize:(CGSizeMake(customWidth.floatValue, customHight.floatValue))];
}
else if ( adFormat == MAAdFormat.banner )
{
return BannerSizeRegular;
return [VungleAdSize VungleAdSizeBannerRegular];
}
else if ( adFormat == MAAdFormat.leader )
{
return BannerSizeLeaderboard;
return [VungleAdSize VungleAdSizeLeaderboard];
}
else if ( adFormat == MAAdFormat.mrec )
{
return BannerSizeMrec;
return [VungleAdSize VungleAdSizeMREC];
}
else
{
[NSException raise: NSInvalidArgumentException format: @"Unsupported ad format: %@", adFormat];
return BannerSizeRegular;
return [VungleAdSize VungleAdSizeBannerRegular];
}
}

Expand Down Expand Up @@ -889,84 +893,95 @@ - (instancetype)initWithParentAdapter:(ALVungleMediationAdapter *)parentAdapter
self.adFormat = adFormat;
self.parameters = parameters;
self.delegate = delegate;
self.isAdloadSuccess = NO;
}
return self;
}

- (void)bannerAdDidLoad:(VungleBanner *)banner
- (void)bannerAdDidLoad:(VungleBannerView *)bannerView
{
[self.parentAdapter log: @"AdView loaded: %@", banner.placementId];

NSString *creativeIdentifier = banner.creativeId;
if ( [creativeIdentifier al_isValidString] )
[self.parentAdapter log: @"AdView loaded: %@", bannerView.placementId];

self.isAdloadSuccess = YES;

if ( ALSdk.versionCode >= 6150000 )
{
[self.delegate didLoadAdForAdView: self.parentAdapter.adViewContainer withExtraInfo: @{@"creative_id" : creativeIdentifier}];
NSMutableDictionary *extraInfo = [NSMutableDictionary dictionaryWithCapacity: 3];

NSString *creativeIdentifier = bannerView.creativeId;
if ( [creativeIdentifier al_isValidString] )
{
extraInfo[@"creative_id"] = creativeIdentifier;

}

CGSize adSize = [bannerView getBannerSize];
if ( !CGSizeEqualToSize(CGSizeZero, adSize) )
{
extraInfo[@"ad_width"] = @(adSize.width);
extraInfo[@"ad_height"] = @(adSize.height);

}

[self.delegate performSelector: @selector(didLoadAdForAdView:withExtraInfo:)
withObject: bannerView
withObject: extraInfo];
}
else
{
[self.delegate didLoadAdForAdView: self.parentAdapter.adViewContainer];
else {
[self.delegate didLoadAdForAdView: bannerView];
}

if ( [banner canPlayAd] )
}

- (void)bannerAdDidFail:(VungleBannerView *)bannerView withError:(NSError *)error
{
MAAdapterError *adapterError = [ALVungleMediationAdapter toMaxError: error isAdPresentError: self.isAdloadSuccess];
if ( self.isAdloadSuccess )
{
[banner presentOn: self.parentAdapter.adViewContainer];
[self.parentAdapter log: @"AdView failed to display with error: %@", adapterError];
[self.delegate didFailToDisplayAdViewAdWithError: adapterError];
}
else
{
[self.parentAdapter log: @"Failed to load ad view ad: ad not ready"];
[self.delegate didFailToLoadAdViewAdWithError: MAAdapterError.adNotReady];
[self.parentAdapter log: @"AdView failed to load with error: %@", adapterError];
[self.delegate didFailToLoadAdViewAdWithError: adapterError];
}
}

- (void)bannerAdDidFailToLoad:(VungleBanner *)banner withError:(NSError *)error
- (void)bannerAdWillPresent:(VungleBannerView *)bannerView
{
MAAdapterError *adapterError = [ALVungleMediationAdapter toMaxError: error isAdPresentError: NO];
[self.parentAdapter log: @"AdView failed to load with error: %@", adapterError];
[self.delegate didFailToLoadAdViewAdWithError: adapterError];
}

- (void)bannerAdWillPresent:(VungleBanner *)banner
{
[self.parentAdapter log: @"AdView ad will present %@", banner.placementId];
[self.parentAdapter log: @"AdView ad will present %@", bannerView.placementId];
}

- (void)bannerAdDidPresent:(VungleBanner *)banner
- (void)bannerAdDidPresent:(VungleBannerView *)bannerView
{
[self.parentAdapter log: @"AdView ad shown %@", banner.placementId];
[self.parentAdapter log: @"AdView ad shown %@", bannerView.placementId];
}

- (void)bannerAdDidTrackImpression:(VungleBanner *)banner
- (void)bannerAdDidTrackImpression:(VungleBannerView *)bannerView
{
[self.parentAdapter log: @"AdView ad impression tracked %@", banner.placementId];
[self.parentAdapter log: @"AdView ad impression tracked %@", bannerView.placementId];
[self.delegate didDisplayAdViewAd];
}

- (void)bannerAdDidClick:(VungleBanner *)banner
- (void)bannerAdDidClick:(VungleBannerView *)bannerView
{
[self.parentAdapter log: @"AdView ad clicked %@", banner.placementId];
[self.parentAdapter log: @"AdView ad clicked %@", bannerView.placementId];
[self.delegate didClickAdViewAd];
}

- (void)bannerAdWillLeaveApplication:(VungleBanner *)banner
- (void)bannerAdWillLeaveApplication:(VungleBannerView *)bannerView
{
[self.parentAdapter log: @"AdView ad will leave application %@", banner.placementId];
}

- (void)bannerAdDidFailToPresent:(VungleBanner *)banner withError:(NSError *)error
{
MAAdapterError *adapterError = [ALVungleMediationAdapter toMaxError: error isAdPresentError: YES];
[self.parentAdapter log: @"AdView ad failed to present with error: %@", adapterError];
[self.delegate didFailToDisplayAdViewAdWithError: adapterError];
[self.parentAdapter log: @"AdView ad will leave application %@", bannerView.placementId];
}

- (void)bannerAdWillClose:(VungleBanner *)banner
- (void)bannerAdWillClose:(VungleBannerView *)bannerView
{
[self.parentAdapter log: @"AdView ad will close %@", banner.placementId];
[self.parentAdapter log: @"AdView ad will close %@", bannerView.placementId];
}

- (void)bannerAdDidClose:(VungleBanner *)banner
- (void)bannerAdDidClose:(VungleBannerView *)bannerView
{
[self.parentAdapter log: @"AdView ad hidden %@", banner.placementId];
[self.parentAdapter log: @"AdView ad hidden %@", bannerView.placementId];
[self.delegate didHideAdViewAd];
}

Expand Down

0 comments on commit c5bf621

Please sign in to comment.