From 6d07096d081e14ad1b18d6290556faed934689df Mon Sep 17 00:00:00 2001 From: Aki Shinagawa Date: Wed, 15 Apr 2026 13:21:17 -0700 Subject: [PATCH 1/3] [IOS-8016] Added adapter logging (#8) This commit will add adapter logging (phase 1 items) Add adapterAdFormat Log custom banner size mismatch case through MediationLogger Support Liftoff IOS SDK 7.7.2 IOS-8016 --- .../Vungle/ISVungleAdapter/ISVungleAdapter.h | 2 +- .../Vungle/ISVungleAdapter/ISVungleAdapter.m | 16 ++++++++++++++-- .../Vungle/ISVungleAdapter/ISVungleConstant.h | 5 +++++ Adapters/Vungle/Podfile | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h index 0202462..8754ff7 100644 --- a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h +++ b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h @@ -8,7 +8,7 @@ #import #import -static NSString * const VungleAdapterVersion = @"5.6.0"; +static NSString * const VungleAdapterVersion = @"5.7.0"; static NSString * Githash = @""; //System Frameworks For Vungle Adapter diff --git a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m index 9afaca2..4ac2a91 100644 --- a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m +++ b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m @@ -355,6 +355,7 @@ - (void)loadRewardedVideoInternal:(NSString *)placementId VungleRewarded *rewardedVideoAd = [[VungleRewarded alloc] initWithPlacementId:placementId]; rewardedVideoAd.delegate = rewardedVideoAdDelegate; + rewardedVideoAd.adapterAdFormat = kAdapterFormatRewarded; // Add rewarded video ad to dictionary [self.rewardedVideoPlacementIdToAd setObject:rewardedVideoAd @@ -501,6 +502,7 @@ - (void)loadInterstitialInternal:(NSString *)placementId VungleInterstitial *interstitialAd = [[VungleInterstitial alloc] initWithPlacementId:placementId]; interstitialAd.delegate = interstitialAdDelegate; + interstitialAd.adapterAdFormat = kAdapterFormatInterstitial; // Add interstitial ad to dictionary [self.interstitialPlacementIdToAd setObject:interstitialAd @@ -664,10 +666,20 @@ - (void)loadBannerInternal:(NSString *)placementId // set delegate vungleBannerView.delegate = bannerAdDelegate; - + vungleBannerView.adapterAdFormat = kAdapterFormatBanner; + + // log custom banner size mismatch for non-inline placements + if (![VungleAds isInLine:placementId] && + [size.sizeDescription isEqualToString:kSizeCustom]) { + vungleBannerView.adapterAdFormat = [kAdapterFormatBanner stringByAppendingFormat:@"-%@", size.sizeDescription]; + NSString *message = [NSString stringWithFormat:@"CustomBannerSizeMismatch:w-%ld|h-%ld", + (long)size.width, (long)size.height]; + [VungleMediationLogger logErrorForAd:vungleBannerView message:message]; + } + [self.bannerPlacementIdToAd setObject:vungleBannerView forKey:placementId]; - + // load banner [vungleBannerView load:serverData]; }); diff --git a/Adapters/Vungle/ISVungleAdapter/ISVungleConstant.h b/Adapters/Vungle/ISVungleAdapter/ISVungleConstant.h index bb3a395..6fc13d8 100644 --- a/Adapters/Vungle/ISVungleAdapter/ISVungleConstant.h +++ b/Adapters/Vungle/ISVungleAdapter/ISVungleConstant.h @@ -14,6 +14,11 @@ static NSString * const kAppId = @"AppID"; static NSString * const kPlacementId = @"PlacementId"; static NSString * const kCreativeId = @"creativeId"; +// Adapter ad format identifiers +static NSString * const kAdapterFormatRewarded = @"ISVungleRewardedVideo"; +static NSString * const kAdapterFormatInterstitial = @"ISVungleInterstitial"; +static NSString * const kAdapterFormatBanner = @"ISVungleBanner"; + // Meta data flags static NSString * const kMetaDataCOPPAKey = @"Vungle_COPPA"; diff --git a/Adapters/Vungle/Podfile b/Adapters/Vungle/Podfile index e7369d0..0222b8f 100644 --- a/Adapters/Vungle/Podfile +++ b/Adapters/Vungle/Podfile @@ -3,6 +3,6 @@ target 'ISVungleAdapter' do pod 'IronSourceSDK', '9.3.0.0' - pod 'VungleAds', '7.7.1' + pod 'VungleAds', '7.7.2' end From b34bd81ead3a019cf6c635a9be50ab376d7a9efb Mon Sep 17 00:00:00 2001 From: Akifumi Shinagawa Date: Fri, 8 May 2026 16:01:12 -0700 Subject: [PATCH 2/3] Correct version numbers --- Adapters/Vungle/CHANGELOG.md | 3 +++ Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Adapters/Vungle/CHANGELOG.md b/Adapters/Vungle/CHANGELOG.md index 98be3a0..41924ae 100644 --- a/Adapters/Vungle/CHANGELOG.md +++ b/Adapters/Vungle/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## Version 5.8.0 +* Supporting Adapter Logging + ## Version 5.7.0 * Supporting SDK version 7.7.2 diff --git a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h index 8754ff7..05d47c8 100644 --- a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h +++ b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.h @@ -8,7 +8,7 @@ #import #import -static NSString * const VungleAdapterVersion = @"5.7.0"; +static NSString * const VungleAdapterVersion = @"5.8.0"; static NSString * Githash = @""; //System Frameworks For Vungle Adapter From cf9af480f3da824bdce57b31574b2c5913905382 Mon Sep 17 00:00:00 2001 From: Aki Shinagawa Date: Fri, 5 Jun 2026 16:45:30 -0700 Subject: [PATCH 3/3] [IOS-8083] Adapter Logging Phase 2 (#9) This commit will add items for adapter logging phase 2. - Added mediation log for silent failure cases --- .../Vungle/ISVungleAdapter/ISVungleAdapter.m | 48 +++++++++++-------- Adapters/Vungle/Podfile | 2 +- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m index 4ac2a91..ba5038f 100644 --- a/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m +++ b/Adapters/Vungle/ISVungleAdapter/ISVungleAdapter.m @@ -62,21 +62,21 @@ - (instancetype)initAdapter:(NSString *)name { } // Rewarded video - _rewardedVideoPlacementIdToSmashDelegate = [ISConcurrentMutableDictionary dictionary]; - _rewardedVideoPlacementIdToVungleAdDelegate = [ISConcurrentMutableDictionary dictionary]; - _rewardedVideoPlacementIdToAd = [ISConcurrentMutableDictionary dictionary]; + _rewardedVideoPlacementIdToSmashDelegate = [ISConcurrentMutableDictionary lpmDictionary]; + _rewardedVideoPlacementIdToVungleAdDelegate = [ISConcurrentMutableDictionary lpmDictionary]; + _rewardedVideoPlacementIdToAd = [ISConcurrentMutableDictionary lpmDictionary]; _rewardedVideoPlacementIdsForInitCallbacks = [ISConcurrentMutableSet set]; // Interstitial - _interstitialPlacementIdToSmashDelegate = [ISConcurrentMutableDictionary dictionary]; - _interstitialPlacementIdToVungleAdDelegate = [ISConcurrentMutableDictionary dictionary]; - _interstitialPlacementIdToAd = [ISConcurrentMutableDictionary dictionary]; + _interstitialPlacementIdToSmashDelegate = [ISConcurrentMutableDictionary lpmDictionary]; + _interstitialPlacementIdToVungleAdDelegate = [ISConcurrentMutableDictionary lpmDictionary]; + _interstitialPlacementIdToAd = [ISConcurrentMutableDictionary lpmDictionary]; // Banner - _bannerPlacementIdToSmashDelegate = [ISConcurrentMutableDictionary dictionary]; - _bannerPlacementIdToVungleAdDelegate = [ISConcurrentMutableDictionary dictionary]; - _bannerPlacementIdToAd = [ISConcurrentMutableDictionary dictionary]; - _bannerPlacementIdToAdSize = [ISConcurrentMutableDictionary dictionary]; + _bannerPlacementIdToSmashDelegate = [ISConcurrentMutableDictionary lpmDictionary]; + _bannerPlacementIdToVungleAdDelegate = [ISConcurrentMutableDictionary lpmDictionary]; + _bannerPlacementIdToAd = [ISConcurrentMutableDictionary lpmDictionary]; + _bannerPlacementIdToAdSize = [ISConcurrentMutableDictionary lpmDictionary]; // The network's capability to load a Rewarded Video ad while another Rewarded Video ad of that network is showing LWSState = LOAD_WHILE_SHOW_BY_INSTANCE; @@ -233,7 +233,7 @@ - (void)initRewardedVideoForCallbacksWithUserId:(NSString *)userId if (![self isConfigValueValid:appId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kAppId]; LogAdapterApi_Internal(@"error = %@", error.description); - + [VungleMediationLogger logErrorForAd:nil message:@"NoAppId:RewardedWithInit"]; [delegate adapterRewardedVideoInitFailed:error]; return; } @@ -241,7 +241,7 @@ - (void)initRewardedVideoForCallbacksWithUserId:(NSString *)userId if (![self isConfigValueValid:placementId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kPlacementId]; LogAdapterApi_Internal(@"error = %@", error.description); - + [VungleMediationLogger logErrorForAd:nil message:@"NoPlacementId:RewardedWithInit"]; [delegate adapterRewardedVideoInitFailed:error]; return; } @@ -284,6 +284,7 @@ - (void)initAndLoadRewardedVideoWithUserId:(NSString *)userId if (![self isConfigValueValid:appId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kAppId]; LogAdapterApi_Internal(@"error = %@", error.description); + [VungleMediationLogger logErrorForAd:nil message:@"NoAppId:Rewarded"]; [delegate adapterRewardedVideoHasChangedAvailability:NO]; return; } @@ -291,6 +292,7 @@ - (void)initAndLoadRewardedVideoWithUserId:(NSString *)userId if (![self isConfigValueValid:placementId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kPlacementId]; LogAdapterApi_Internal(@"error = %@", error.description); + [VungleMediationLogger logErrorForAd:nil message:@"NoPlacementId:Rewarded"]; [delegate adapterRewardedVideoHasChangedAvailability:NO]; return; } @@ -370,17 +372,18 @@ - (void)showRewardedVideoWithViewController:(UIViewController *)viewController NSString *placementId = adapterConfig.settings[kPlacementId]; LogAdapterApi_Internal(@"placementId = %@", placementId); - + + VungleRewarded *rewardedVideoAd = [self.rewardedVideoPlacementIdToAd objectForKey:placementId]; + if (![self hasRewardedVideoWithAdapterConfig:adapterConfig]) { NSError *error = [ISError createError:ERROR_CODE_NO_ADS_TO_SHOW withMessage:[NSString stringWithFormat: @"%@ show failed", kAdapterName]]; LogAdapterApi_Internal(@"error = %@", error); + [VungleMediationLogger logErrorForAd:rewardedVideoAd message:@"NoAdsToShow:Rewarded"]; [delegate adapterRewardedVideoDidFailToShowWithError:error]; return; } - - VungleRewarded *rewardedVideoAd = [self.rewardedVideoPlacementIdToAd objectForKey:placementId]; - + //set dynamic user Id if ([self dynamicUserId]) { LogAdapterApi_Internal(@"set userID to %@", [self dynamicUserId]); @@ -426,6 +429,7 @@ - (void)initInterstitialWithUserId:(NSString *)userId if (![self isConfigValueValid:appId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kAppId]; LogAdapterApi_Internal(@"error = %@", error.description); + [VungleMediationLogger logErrorForAd:nil message:@"NoAppId:Interstitial"]; [delegate adapterInterstitialInitFailedWithError:error]; return; } @@ -433,7 +437,7 @@ - (void)initInterstitialWithUserId:(NSString *)userId if (![self isConfigValueValid:placementId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kPlacementId]; LogAdapterApi_Internal(@"error = %@", error.description); - + [VungleMediationLogger logErrorForAd:nil message:@"NoPlacementId:Interstitial"]; [delegate adapterInterstitialInitFailedWithError:error]; return; } @@ -517,16 +521,18 @@ - (void)showInterstitialWithViewController:(UIViewController *)viewController NSString *placementId = adapterConfig.settings[kPlacementId]; LogAdapterApi_Internal(@"placementId = %@", placementId); - + + VungleInterstitial *interstitialAd = [self.interstitialPlacementIdToAd objectForKey:placementId]; + if (![self hasInterstitialWithAdapterConfig:adapterConfig]) { NSError *error = [ISError createError:ERROR_CODE_NO_ADS_TO_SHOW withMessage:[NSString stringWithFormat: @"%@ show failed", kAdapterName]]; LogAdapterApi_Internal(@"error = %@", error); + [VungleMediationLogger logErrorForAd:interstitialAd message:@"NoAdsToShow:Interstitial"]; [delegate adapterInterstitialDidFailToShowWithError:error]; return; } - - VungleInterstitial *interstitialAd = [self.interstitialPlacementIdToAd objectForKey:placementId]; + dispatch_async(dispatch_get_main_queue(), ^{ [interstitialAd presentWith:viewController]; }); @@ -566,6 +572,7 @@ - (void)initBannerWithUserId:(NSString *)userId if (![self isConfigValueValid:appId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kAppId]; LogAdapterApi_Internal(@"error = %@", error.description); + [VungleMediationLogger logErrorForAd:nil message:@"NoAppId:Banner"]; [delegate adapterBannerInitFailedWithError:error]; return; } @@ -573,6 +580,7 @@ - (void)initBannerWithUserId:(NSString *)userId if (![self isConfigValueValid:placementId]) { NSError *error = [self errorForMissingCredentialFieldWithName:kPlacementId]; LogAdapterApi_Internal(@"error = %@", error.description); + [VungleMediationLogger logErrorForAd:nil message:@"NoPlacementId:Banner"]; [delegate adapterBannerInitFailedWithError:error]; return; } diff --git a/Adapters/Vungle/Podfile b/Adapters/Vungle/Podfile index f1f5f41..50be4d0 100644 --- a/Adapters/Vungle/Podfile +++ b/Adapters/Vungle/Podfile @@ -3,6 +3,6 @@ target 'ISVungleAdapter' do pod 'IronSourceSDK', '9.4.0.0' - pod 'VungleAds', '7.7.2' + pod 'VungleAds', '7.7.3' end