Beta Release Notes
iOS SDK beta releases
3.11 beta
3.11.0-beta3
2024-12-02
Library Updates
GraviteRTB to 1.5.0-beta3
SmartAd to 7.24.2
UnityAds to 4.12.4
TeadsSDK to 5.1.6
Prebid to 2.3.0
SourcePoint to 7.7.2
Tappx to 4.1.11
GoogleMobileAds to 11.12.0
GoogleUserMessagingPlatform to 2.7.0
AppLovinSDK to 13.0.1
AppNexusSDK to 9.2.0
InMobiSDK to 10.8.0
MintegralSDK to 7.7.3
OgurySdk to 5.0.1
PubNative to 3.1.3
Smaato to 22.9.1
AppHarbr to 1.19.0
Improvements
Display the Creative ID of GraviteRTB ads in the shake debug screen.
Log the application's SKAdNetwork IDs.
3.11.0-beta1
2024-11-06
Improvements
Implemented a new hybrid RTB/Mayo auction.
Banner Creative History is now accessible on the debug-shake screen and can be shared using the "Share" button.
Rework Vungle Banner integration using the new APIs.
Library Updates
Amazon to 4.10.1
GraviteRTB to 1.5.0-beta1, supporting the SKAdNetwork feature
3.10 Beta
3.10.0-beta5
2024-09-09
Changes
AppNexus is now available as an optional ad network. To include it, simply add the following line to your Podfile:
pod 'AATKit/AppNexus'
3.10.0-beta3
2024-09-05
Library Updates
GraviteRTB to 1.4.0-beta3, fixing Google Bidding behaviour for banner ads.
3.10.0-beta1
2024-08-23
Improvements
Added support for ad quality management in fullscreen and rewarded video formats using AppHarbr v1.16.0.
Implementation Steps:
Add AppHarbr to your Podfile:
pod 'AATKit/AppHarbr'
Create an ad quality manager instance:
let qualitySDK = AATAppHarbrManager(key: "<APPHARBR_KEY>")
Pass the ad quality manager to the AAT configuration:
let configuration = AATConfiguration() ... configuration.adQualityManager = qualitySDK ... AATSDK.initAATKit(with: configuration)
Faulty ads are automatically discarded, and AATKit will move to the next rule in the waterfall.
Optional: You can get notified of the faulty ads by making your class conform to
AATAdQualityDelegate
and pass it to the fullscreen/RV placement:placement?.adQualityDelegate = self
You will be notified via the following delegate methods:
@objc public protocol AATAdQualityDelegate { func didAdIncident(placement: AATPlacement, blockReasons: [String], reportReasons: [String], adNetworkSdk: AATAdNetwork) -> Bool func didAdIncidentOnDisplay(placement: AATPlacement, blockReasons: [String], reportReasons: [String], adNetworkSdk: AATAdNetwork) -> Bool func didAdVerified(placement: AATPlacement, adNetworkSdk: AATAdNetwork) func didAdNotVerified(placement: AATPlacement, error: Error, adNetworkSdk: AATAdNetwork) }
Added support for GraviteRTB native ads format.
Added support for Vungle AppOpen ads format.
Added
AATAdInfo
object across multiple ad formats, including Fullscreen, Rewarded, Native Ads, and Infeed Banners:Fullscreen/Rewarded Video:
let info = placement?.adInfo
Native Ads:
let nativeAd = placement.getNativeAd() let info = nativeAd.adInfo
Infeed Banners:
banner placement?.requestAd(request: request) { [weak self] bannerView, error in guard let self = self else { return } if let adView = bannerView { let info = adView.adInfo // Display the ad view } }
The
AATAdInfo
class provides detailed price information:@objc public class AATAdInfo : NSObject { @objc public let priceInfo: AATPriceInfo? } @objc public class AATPriceInfo : NSObject { @objc public var price: Double @objc public var precision: AATPricePrecisionType @objc public var currency: AATCurrency }
Implemented a completely new shake debug screen using SwiftUI for iOS 15+. Older versions will display the previous shake debug screen.
Creative Timestamp Added the creative timestamp to the placement-loaded ads screen.
Shake Debug Info Sharing You can now share a summary of the shake debug information via email using the share button in the new shake debug screen.
Introduced a new API for retrieving creative history across all banner formats.
Steps to Implement:
Enable creative history by calling:
placement.enableCreativeHistory(size: 5)
Retrieve the creative history for a placement:
placement.getCreativeHistory { histories in // Use the histories array }
Creative History Information:
@objc public class AATPlacementHistoryInfo : NSObject { public var networkName: String public var networkKey: String public var timestamp: TimeInterval public var snapshot: UIImage? public var creativeID: String? }
Added support for passing the user ID to ad networks for server-side verification of rewarded videos.
Usage:
AATSDK.setRewardedAdSSVInfo(info: .init(userId: "<USER_ID>"))
Removed Ad Networks
Bluestack
3.9 Beta
3.9.0-beta3
2024-07-09
API Changes
The
AATImpression
object returned byAATImpressionDelegate
has been updated as follows:The
mediationType
,price
,currencyCode
, andprecision
fields have been removed.A new field,
priceInfo
, of typeAATPriceInfo
, has been added. This field includes the following information:price
currency
precision type
Library Updates
GraviteRTB to 1.3.0
AppLovin to 12.5.0
AppNexus to 8.11.3
Amazon to 4.9.6
AppConsent to 4.9.0
Criteo to 6.1.2
Datonomy to 1.0.0
Facebook to 6.15.1.0
InMobi to 10.7.4
MintegralSDK to 7.6.7
OgurySdk to 4.4.0
GoogleMobileAds to 11.6.0
GoogleUserMessagingPlatform to 2.5.0
Prebid to 2.2.3
Pubnative to 3.0.3
Smaato to 22.8.4
SmartAd to 7.24.1
UnityAds to 4.12.0
TeadsSDK to 5.1.3
Tappx to 4.1.4
Vungle to 7.3.2
IronSource to 8.1.1
SuperAwesome to 9.3.5
SourcePoint to 7.6.10
Kidoz to 9.1.3
3.9.0-beta1
2024-06-18
Improvements
The
AATAdMobDSPAdapter
has been renamed toAATGooglePartnerBidding
.:If you are not using AATKit's default ad networks, add the following line to your Podfile:
pod 'AATKit/AATGooglePartnerBidding'
.
Enhanced the internal loading logic in AATKit to report failures instead of issuing warning logs when the ViewController is unavailable.
The above enhancement fixed a bug in the AATAdMobMediationAdapter where failures were not reported immediately, previously being reported as timeout failures.
Enhanced the shake debug screen to include the following details:
Type of the placement.
Active frequency capping settings.
Banner auto-reload intervals.
Initial delay and remaining time.
Display of the bidder (DSP name) for the GraviteRTB marketplace.
Introduced a network option to enforce the RTBSDK close button for MRAID fullscreen ads.
Note: If the MRAID creative already includes a close button and
forceCloseButtonForMraid
is set to true, the MRAID creative will display two close buttons.
let conf = AATConfiguration()
...
let graviteRTBOptions = AATGraviteRTBOptions(forceCloseButtonForMraid: false)
conf.adNetworksOptions = .init(appNexusOptions: nil,
feedAdOptions: nil,
adMobOptions: nil,
dfpOptions: nil,
datonomyOptions: nil,
superAwesomeOptions: nil,
graviteRTBOptions: graviteRTBOptions)
...
AATSDK.initAATKit(with: conf)
The
AATImpressionDelegate
now delivers precise price information for all mediation types, for ad networks that support pricing data.
Library Updates
GraviteRTB to 1.3.0-beta2
New Libraries
Implemented Kidoz ad network, which includes banners, fullscreen ads, and rewarded videos. Kidoz is optional. To add it, include the following line in your Podfile:
pod 'AATKit/Kidoz'
Integrated the new CMP: SFBX (AppConsent) version 4.8.0. To add it, include the following line in your Podfile:
pod 'AATKit/AppConsentCMP'
Usage:
import AATAppConsentAdapter .... let configuration = AATConfiguration() let cmp = AATCMPAppConsent(appKey: "<APP_KEY>", forceGDPR: true, fullscreen: true) consent = AATManagedConsent(cmp: cmp, delegate: self) // other AATKitConfigurations AATSDK.initAATKit(with: configuration)
3.8 Beta
3.8.0-beta2
2024-04-18
Note: The following ad networks haven't yet added the Apple Privacy Manifest file and will be optional dependencies for AATKit to avoid blocking publishing apps on the AppStore:
AppNexus (PrivacyInfo.xcprivacy is not included in the Cocoapods installation)
Criteo (PrivacyInfo.xcprivacy is not included in the Cocoapods installation)
Prebid
Tappx
YOC
Bluestack
Datonomy
Library Updates
AppLovin to 12.4.1
AppNexus to 8.11.1
Amazon to 4.9.2
Criteo to 6.0.0
FeedAd to 1.6.0
Facebook to 6.15.0.0
InMobi to 10.7.1
MintegralAdSDK to 7.6.2
OgurySdk to 4.2.3
GoogleMobileAds to 11.3.0
GoogleUserMessagingPlatform to 2.3.0
GraviteRTB to 1.1.0
MintegralSDK to 7.6.2
Pubnative to 3.0.0
Smaato to 22.8.2
UnityAds to 4.10.0
TeadsSDK to 5.1.2
Vungle to 7.3.1
IronSource to 8.0.0
SuperAwesome to 9.3.3
SourcePoint to 7.6.5
Improvements
Add Xcode 15 support.
Updated the minimum deployment target to iOS 12.
Added support for privacy manifest files.
Added "initial rules" feature, where placement can be set to use a subset of ad rules for the first load. This is intended to allow the placement's first load to happen faster.
Changing the consent state will now trigger rule download - to pick the optimal set of rules for the given consent setting.
Early initialise of GoogleMobileAds.
Fixes
Fix an issue where SuperAwesome empty ads were not reported as failures.
3.7 Beta
3.6 Beta
3.6.0-beta2
2024-02-20
Improvements
Added support for IronSourceNew banner ads.
Note: A placement will present an IronSource banner once and block this IronSource instance ID for the next load as long as the banner is on screen. Then, the next render of another ad network ad will remove this blocking.
Suppose placement "A" presents an IronSource banner for an instance ID. In that case, no other placements can load this instance ID until placement "A" presents another ad and unblock this instance ID.
Library Updates
AmazonPublisherServicesSDK to 4.7.8
AppLovinSDK to 12.1.0
AppNexus to 8.10.2
GoogleMobileAdsMediationFacebook to 6.14.0.0
Smaato to 22.6.1
MintegralAds to 7.5.6
SmartAd to 7.23.
UnityAds to 4.9.2
TeadsSDK to 5.1.0
VungleAds to 7.2.2
Tappx to 4.0.10
SuperAwesome to 9.3.1
prebid to 2.2.0
GraviteRTB to 1.0.0-beta11
3.6.0-beta1
2024-02-01
New Ad Networks
Integrate the new ad network IronSource using multiple instances (Interstitial / Rewarded Videos).
Version 7.7.0.0.
Removed Ad Networks
Remove the old IronSource integration (Interstitial / Rewarded Videos).
Changes
Remove Pubnative offset options for interstitial and rewarded video formats.
Remove the deprecated
AATPubNativeOptions
fromAATAdNetworksOptions
.
3.5 Beta
3.5.0-beta1
2024-01-08
New Ad Networks
Integrate the new Ad Network SuperAwesome, supporting banner, fullscreen and rewarded video ads.
SuperAwesome is an optional ad network. To add it, add this line to your Podfile:
pod AATKit/SuperAwesome
.
Library Updates
GraviteRTB SDK to 1.0.0-beta4.
Other Changes
Removed deprecated CMPOgury.
3.4 Beta
3.4.0-beta8
2023-11-16
Improvements
Add CCPA support.
AATKit now supports CCPA only if the CCPA consent string is found. AATKit will read and react automatically to the CCPA changes in UserDefaults.
If both TCF and CCPA consent strings are present, the TCF settings will be used.
For more information, please visit the IAB CCPA compliance framework.
Library Updates
GraviteRTB SDK to 1.0.0-beta3.
3.4.0-beta6
2023-11-07
Library Updates
GoogleMobileAds to 10.12.0
AppLovin to 11.11.4
AppNexus to 8.9.0
Criteo to 5.0.4
GoogleUserMessagingPlatform to 2.1.0
GoogleMobileAdsMediationFacebook to 6.14.0.0
FeedAd to 1.5.4
InMobi to 10.6.0
MintegralAds to 7.4.8
Ogury to 4.2.2
Smaato to 22.4.0
SmartAd to 7.23.1
UnityAds to 4.9.1
YOC to 4.1.1
Vungle to 7.1.0
Prebid to 2.1.6
IronSource to 7.5.1
SourcePoint to 7.4.3
API Changes
Deprecate Pubnative (Verve) offset settings for interstitial and rewarded video ads.
Pubnative will no longer support
setHTMLInterstitialSkipOffset()
andsetVideoInterstitialSkipOffset()
methods (Pubnative release notes).Therefore, AATKit deprecated
AATPubNativeOptions.pubNativeOptions
and will no longer support it from version 3.5.
Improvements
Provide a new BannerCache delegate called
AATBannerCacheStatusDelegate
that represents the cache status.
/// The delegate that represents the cache status
@objc
public protocol AATBannerCacheStatusDelegate: AnyObject {
/// Will be called when the cache was empty and has been filled with at least one ad
func cacheIsNoLongerEmpty()
/// Will be called when the cache was filled and has been consumed and became empty
func cacheIsEmpty()
}
Fixes
Fix an issue with AppNexus multi-size banners where the banner size wasn't adapting the actual ad creative size.
3.4.0-beta3
2023-10-19
New Ad Networks
GraviteRTB SDK (version 1.0.0-beta1) supporting banner and fullscreen formats.
API Changes
AATKit will not read the Datonomy API key from the info.plist anymore. Instead, use the AATAdNetworksOptions passing AATDatonomyOptions instance with the proper Datonomy API key.
@objc public class AATAdNetworksOptions: NSObject {
public var appNexusOptions: AATAppNexusOptions?
public var feedAdOptions: AATFeedAdOptions?
public var pubNativeOptions: AATPubNativeOptions?
public var adMobOptions: AATAdMobOptions?
public var dfpOptions: AATDFPOptions?
public var datonomyOptions: AATDatonomyOptions?
/// Init AATAdNetworksOptions
/// - Parameter appNexusOptions: AppNexus options. default is nil
/// - Parameter feedAdOptions: FeedAd options. default is nil
/// - Parameter pubNativeOptions: Pubnative options. default is nil
/// - Parameter adMobOptions: AdMob options. default is nil
/// - Parameter dfpOptions: DFP options. default is nil
/// - Parameter datonomyOptions: Datonomy options. default is nil
public init(appNexusOptions: AATAppNexusOptions? = nil, feedAdOptions: AATFeedAdOptions? = nil, pubNativeOptions: AATPubNativeOptions? = nil, adMobOptions: AATAdMobOptions? = nil, dfpOptions: AATDFPOptions? = nil, datonomyOptions: AATDatonomyOptions? = nil)
}
@objc public class AATAppNexusOptions : NSObject {
/// a delay in seconds after which a full-screen ad will be dismissed, default value is nil.
public let autoCloseTime: Int?
/// a Boolean that describes if Banner Ad can serve a Native Ad, default is false.
public let supportNativeBanner: Bool
/// Init AATAppNexusOptions
/// - Parameter autoCloseTime: A delay in seconds after which a full-screen ad will be dismissed, default value is nil.
/// - Parameter supportNativeBanner: A Boolean that describes if Banner Ad can serve a Native Ad, default is false.
@objc public init(autoCloseTime: NSNumber? = nil, supportNativeBanner: Bool = false)
}
@objc public class AATFeedAdOptions: NSObject {
/// Desired UIColor to be used for shutter, default is nil.
public let shutterColor: UIColor?
/// Boolean that describes if spinner should be disabled, default is false.
public let disableSpinner: Bool
/// Init AATFeedAdOptions
/// - Parameter shutterColor: Desired UIColor to be used for shutter, default is nil.
/// - Parameter disableSpinner: Boolean that describes if spinner should be disabled, default is false.
@objc public init(shutterColor: UIColor? = nil, disableSpinner: Bool = false)
}
@objc public class AATPubNativeOptions : NSObject {
/// Minimum offset in seconds required before skipping an HTML Interstitial ad.
public let skipOffsetForHTMLInterstitial: Int?
/// Minimum offset in seconds required before skipping a Video Interstitial ad.
public let skipOffsetForVideoInterstitial: Int?
/// Init AATPubNativeOptions
/// - Parameter skipOffsetForHTMLInterstitial: minimum offset in seconds required before skipping an HTML Interstitial ad.
/// - Parameter skipOffsetForVideoInterstitial: minimum offset in seconds required before skipping an Video Interstitial ad.
@objc public init(skipOffsetForHTMLInterstitial: NSNumber? = nil, skipOffsetForVideoInterstitial: NSNumber? = nil)
}
@objc public class AATAdMobOptions: NSObject {
/// The maximum height for AdMob inline adaptive banners
public let inlineBannerMaxHeight: Int?
/// Init AATAdMobOptions
/// - Parameter inlineBannerMaxHeight: The maximum height for AdMob inline adaptive banners
public init(inlineBannerMaxHeight: Int)
}
@objc public class AATDFPOptions: NSObject {
public let inlineBannerMaxHeight: Int?
/// Init AATDFPOptions
/// - Parameter inlineBannerMaxHeight: The maximum height for DFP inline adaptive banners
@objc public init(inlineBannerMaxHeight: Int)
}
@objc public class AATDatonomyOptions: NSObject {
/// Datonomy API Key
public let datonomyAPIKey: String?
/// Init AATDatonomyOptions
/// - Parameter datonomyAPIKey: Datonomy API Key
@objc public init(datonomyAPIKey: String)
}
Fixes
Fix an issue where the "unrecognized bundleID" error wasn't being logged if the Gravite server didn't recognize the application bundle ID.
Fix an issue where
AATConfiguration
description wasn't logged properly.
Library Updates
Update pubnative to 2.20.0
3.4.0-beta1
2023-09-21
API Changes
[Important] AATKit will not use the info.plist configurations anymore. Instead, you can use the new
AATConfiguration.AATAdNetworkOptions
object while initialising AATKit.
let conf = AATConfiguration()
...
conf.adNetworksOptions = .init(appNexusOptions: .init(autoCloseTime: 10, supportNativeBanner: true),
feedAdOptions: .init(shutterColor: .blue, disableSpinner: true),
pubNativeOptions: .init(skipOffsetForHTMLInterstitial: 10,
skipOffsetForVideoInterstitial: 15),
adMobOptions: .init(inlineBannerMaxHeight: 50),
dfpOptions: .init(inlineBannerMaxHeight: 50))
...
AATSDK.initAATKit(with: conf)
@objc public class AATAdNetworksOptions : NSObject {
public var appNexusOptions: AATAppNexusOptions?
public var feedAdOptions: AATFeedAdOptions?
public var pubNativeOptions: AATPubNativeOptions?
public var adMobOptions: AATAdMobOptions?
public var dfpOptions: AATDFPOptions?
public init(appNexusOptions: AATAppNexusOptions? = nil, feedAdOptions: AATFeedAdOptions? = nil, pubNativeOptions: AATPubNativeOptions? = nil, adMobOptions: AATAdMobOptions? = nil, dfpOptions: AATDFPOptions? = nil)
}
@objc public class AATAppNexusOptions : NSObject {
/// a delay in seconds after which a full-screen ad will be dismissed, default value is nil.
public let autoCloseTime: Int?
/// a Boolean that describes if Banner Ad can serve a Native Ad, default is false.
public let supportNativeBanner: Bool
@objc public init(autoCloseTime: NSNumber? = nil, supportNativeBanner: Bool = false)
}
@objc public class AATFeedAdOptions: NSObject {
/// Desired UIColor to be used for shutter, default is nil.
public let shutterColor: UIColor?
/// Boolean that describes if spinner should be disabled, default is false.
public let disableSpinner: Bool
@objc public init(shutterColor: UIColor? = nil, disableSpinner: Bool = false)
}
@objc public class AATPubNativeOptions : NSObject {
public let skipOffsetForHTMLInterstitial: Int?
public let skipOffsetForVideoInterstitial: Int?
@objc public init(skipOffsetForHTMLInterstitial: NSNumber? = nil, skipOffsetForVideoInterstitial: NSNumber? = nil)
}
@objc public class AATAdMobOptions: NSObject {
public let inlineBannerMaxHeight: Int?
public init(inlineBannerMaxHeight: Int)
}
@objc public class AATDFPOptions: NSObject {
public let inlineBannerMaxHeight: Int?
@objc public init(inlineBannerMaxHeight: Int)
}
Remove the deprecated method
AATSDK.setInitialRules(:)
. Please useAATConfiguration.initialRules
instead.
Remove the deprecated method
setRuleCachingEnabled(:)
. Please useAATConfiguration.shouldCacheRules
instead.Introduce new public API
func isConsentOptIn() -> Bool
to check if consent is OptIn or not.Usage:
let optIn = AATSDK.isConsentOptIn()
.
Introduce a new public API
func getDebugInfoObject() -> AATDebugInfo?
for obtaining the debug information that will be presented if the shake debug screen is enabled.Usage:
let debugObject = AATSDK.getDebugInfoObject()
.
Setting the banner cache retry intervals to the
AATBannerCacheConfiguration
instead of the info.plistUsage:
let conf = AATBannerCacheConfiguration(placementName: "<PLACEMENT_NAME>", size: 5)
conf.minDelay = 10
bannerCache = AATSDK.createBannerCache(configuration: conf)
Publishers can pass the collapsible banner options (
AATCollapsibleBannerOptions
) to all placements instead of using the info.plist
@objc public class AATCollapsibleBannerOptions : NSObject {
internal let position: AATCollapsibleBannerPosition
internal let minDelay: Int
public init(position: AATCollapsibleBannerPosition = .top, minDelay: Int = 0)
}
@objc public enum AATCollapsibleBannerPosition : Int, RawRepresentable {
case top, bottom
}
(Requires iOS 13 and above) Introduce the new
AATAsyncInfeedBannerPlacement
that wraps theAATInfeedBannerPlacement
and supports the concurrency.
@available(iOS 13.0, *)
public protocol AATAsyncInfeedBannerPlacement: AATPlacement {
// MARK: Delegates
/// Set the placement delegate that will listen to ad loading and display events
var delegate: AATInfeedBannerPlacementDelegate? { get set }
/// Sets the placement statistics delegate
var statisticsDelegate: AATStatisticsDelegate? { get set }
/// Sets the placement impression delegate
var impressionDelegate: AATImpressionDelegate? { get set }
var collapsableBannerOptions: AATCollapsibleBannerOptions? { get set }
/// Request banner ad from the placement
/// - Parameter request: the ``AATBannerRequest`` to be used
/// - Returns: ``AATBannerPlacementWrapperView``
func requestAd(request: AATBannerRequest) async -> AATBannerPlacementWrapperView?
/// Manually Count an Ad Space
func countAdSpace()
}
(Requires iOS 13 and above) Introduce the new
AATAsyncNativeAdPlacement
that wraps theAATNativeAdPlacement
and supports the concurrency.
@available(iOS 13.0, *)
public protocol AATAsyncNativeAdPlacement: AATPlacement {
var delegate: AATAsyncNativePlacementDelegate? { get set }
var statisticsDelegate: AATStatisticsDelegate? { get set }
var impressionDelegate: AATImpressionDelegate? { get set }
var targetingInfo: [String: [String]]? { get set }
var contentTargetingUrl: String? { get set }
func reload() async -> AATNativeAdData?
func getNumberOfCurrentlyLoadingNativeAds() -> Int
func hasAd() -> Bool
func reportAdSpace() -> Bool
func isFrequencyCapReached() -> Bool
}
Improvements
Allow passing max height of inline adaptive Google banners (GAM and AdMob) using
AATAdNetworksOptions
passingAATAdMobOptions
orAATDFPOptions
instances.
let conf = AATConfiguration()
...
conf.adNetworksOptions = .init(adMobOptions: .init(inlineBannerMaxHeight: 50),
dfpOptions: .init(inlineBannerMaxHeight: 50))
...
AATSDK.initAATKit(with: conf)
AATKit now provides a completely new shake debug screen using a customised
UIViewController
. Publishers can customise it by using the new public APIfunc configureDebugScreen(configuration: AATDebugScreenConfiguration)
.
Let configurations = AATDebugScreenConfiguration(appLogo: UIImage(named: "<LOGO_IMAGE_NAME>"), title: "<YOUR_APP_NAME>")
AATSDK.configureDebugScreen(configuration: configurations)
@objc public class AATDebugScreenConfiguration : NSObject {
/// Create an ``AATDebugScreenConfiguration`` instance
/// - Parameter appLogo: application logo
/// - Parameter showBundleId: true to show bundle id
/// - Parameter showTestMode: true to show test mode data
/// - Parameter showLoadedAndLoadingAds: true to show loaded and loading ads
/// - Parameter showDisabledNetworks: true to show disabled ad networks
/// - Parameter showRemovedNetworkSDKs: true to show removed ad networks
/// - Parameter showDeviceType: true to show device type
@objc public init(appLogo: UIImage?, title: String?, showBundleId: Bool = true, showTestMode: Bool = true, showLoadedAndLoadingAds: Bool = true, showDisabledNetworks: Bool = true, showRemovedNetworkSDKs: Bool = true, showDeviceType: Bool = true, showExtraSDKs: Bool = true, showConsent: Bool = true, showIDFA: Bool = true)
}
New Ad Networks
Tappx SDK (version 4.1.0), supporting Banner, Fullscreen, and Rewarded Video formats.
Tappx is an optional ad network. To add it, add this line to your Podfile:
pod ‘AATKit/Tappx’
Library Updates
YOC to 4.1.0
3.3 Beta
3.3.0-beta7
2023-07-10
Improvements
All the public methods are logged now at debug level.
Library Updates
OgurySdk to 4.1.4
smaato-ios-sdk to 22.2.1
AmazonPublisherServicesSDK to 4.7.3
VungleAds to 7.0.1
GoogleMobileAds to 10.7.0
InMobiSDK to 10.5.6
IronSourceSDK to 7.3.1
AppLovinSDK to 11.10.1
UnityAds to 4.8.0
CriteoPublisherSdk to 5.0.0
Criteo now requires the minimum deployment target of iOS 12.
TeadsSDK to 5.0.27
Smart-Display-SDK to 7.21.0
AppNexusSDK to 8.6.0
Prebid to 2.1.2
SourcePoint to 7.2.0
Pubnative to 2.18.1
YOC to 3.2.1
MintegralAdSDK to 7.3.9
3.3.0-beta6
2023-06-27
API Changes
Introduce new method
AATSDK.isConsentOptIn()
, returning "consent opt-in status" returned by our server rules. Only returns meaningful information after the rules are downloaded.
Fixes
Fix an issue where AutoLoad banner placement auto-reloading was not resumed automatically after
AATSDK.controllerViewDidAppear(controller:)
call.
3.3.0-beta3
2023-06-16
Improvements
Introduce Google collapsible banners. The following steps are necessary to integrate collapsible banners:
Specify the collapsible banners position. Add the following to the Info.plist:
Key:
<PLACEMENT_NAME>.collapsiblePosition
Value:
top/bottom
Specify the frequency capping for collapsible banners. Add the following to the Info.plist:
Key:
<PLACEMENT_NAME>.minDelayBetweenCollapsibleBannersInSeconds
Value: Integer (type: Number). Please add 0 if you don't need to apply frequency capping on collapsible banners.
Library Updates
GoogleMobileAds SDK to v10.4.0
3.3.0-beta1
2023-06-09
NOTE The minimum ios target is now ios 11.0 and requires Xcode 14.3
API Changes
Introduce a new factory method for initializing the banner cache.
instead of
AATBannerCache(cacheConfiguration: configuration)
useAATSDK.createBannerCache(configuration: configuration)
.
Deprecate
AATSDK.setInitialRules(:)
. Please useAATConfiguration.initialRules
instead.Deprecate
AATSDK.setRuleCachingEnabled(:)
. Please useAATConfiguration.shouldCacheRules
instead.Introduce a new way to Opt-out from showing the CMP
AATManagedConsent can be initialized by passing a new parameter
showIfNeededSetting
let consent = AATManagedConsent(cmp: cmp, delegate: self, showIfNeededSetting: .always)
showIfNeededSetting
can be one of the following:always
: always show the CMP.never
: never show the CMP, However, the publisher can still call theeditConsent
API.serverSideControl
: showing the CMP will be based on the dashboard configurations.
It has a default value of:
serverSideControl.
New Ad Networks
Datonomy SDK, for an overview of what Datonomy provides, please check their documentation.
Datonomy is an optional library, you can add it by adding this line
pod 'AATKit/
Datonomy'
to your Podfile.To add your Datonomy API key, add this key-value pair to your info.plist:
Key:
AATDatonomyApiKey
Value:
YOUR_DATONOMY_API_KEY
Mintegral SDK (version 7.2.9), supporting Banner, Fullscreen, and Rewarded Video formats.
Integrate the new CMP: SourcePoint (version 7.0.2).
You can add it by adding this line
pod 'AATKit/
SourcePoint'
to your Podfile.You can use it as follows:
import AATSourcePointCMPAdapter .... let configuration = AATConfiguration() let cmp = AATCMPSourcepoint(accountId: "YourAccountID", propertyId: "YourPropertyId", propertyName: "YourPropertyName", pmId: "YourPMId") consent = AATManagedConsent(cmp: cmp, delegate: self) // other AATKitConfigurations AATSDK.initAATKit(with: configuration)
Improvements
Implement Frequency Capping for the banner cache.
Implement weekly and monthly frequency capping.
Enhance the logic for waterfall failure scenarios for the sticky banner placement.
Improve AATKit logs:
Improve logs formatting.
Add info-level logs in public APIs.
Always log
initAATKit(with configuration: AATConfiguration?)
andsetLogLevel(:)
methods.
Fixes
Fix an issue with the autoload banner placement where ad spaces were not counted properly in case of waterfall failure.
3.2 Beta
3.2.0-beta4
2023-05-12
Fixes
Fix an issue where fullscreen placements weren’t counting either clicks or viewable impressions.
3.2.0-beta3
2023-04-06
Fixes
Fix an issue with the reporting API request where the language parameter wasn't sent in the right format.
Fix an issue with rules skipping where some valid ad networks might be skipped.
3.2.0-beta2
2023-03-27
Fixes
Fix an issue with Google impression-level revenue data where the price was passed as the single impression price, not the CPM price.
3.2.0-beta1
2023-03-1
API Changes
Placements will pass themselves to
AATStatisticsDelegate
listener methods as a parameter called the placement of typeAATPlacement
. This parameter will let the delegates know which placement triggered the delegate method. The placement name can be checked by using the method:placement.getName()
.Changed APIs:
func AATKitCountedAdSpace(placement: AATPlacement?)
func AATKitCountedRequest(placement: AATPlacement?, for network: AATAdNetwork)
func AATKitCountedResponse(placement: AATPlacement?, for network: AATAdNetwork)
func AATKitCountedImpression(placement: AATPlacement?, for network: AATAdNetwork)
func AATKitCountedNetworkImpression(placement: AATPlacement?, for network: AATAdNetwork)
func AATKitCountedVImpression(placement: AATPlacement?, for network: AATAdNetwork)
func AATKitCountedClick(placement: AATPlacement?, for network: AATAdNetwork)
func AATKitCountedDirectDealImpression(placement: AATPlacement?, for network: AATAdNetwork)
func AATKitCountedMediationCycle(placement: AATPlacement?)
Placements will pass themselves to
AATImpressionDelegate
listener methods as a parameter called placement of typeAATPlacement
. This parameter will let the delegates know which placement triggered the delegate method. The placement name can be checked by using the method:placement.getName()
.Changed APIs:
func didCountImpression(placement: AATPlacement?, _ impression: AATImpression)
Add child-directed support that enables publishers to treat their content as child-directed while requesting ads.
Note: if AdNetwork doesn't support child-directed Requests, AATKit will skip this network while requesting Ads.
Networks providing child-directed requests:
AdMmob
Google AdManager (DFP)
AdX
Digital Turbine (AdColony)
AppLovin
AppLovin MAX
Criteo SDK
IronSource
Verve (PubNative)
Smaato
Unity
Vungle
Networks that will be skipped:
Amazon HB
Xandr (AppNexus)
Bluestack (Madvertise)
Facebook
FeedAd
InMobi
Ogury
Equativ (SmartAdServer)
Teads
YOC
API:
public static func setIsChildDirected(_ isChildDirected: Bool)
Usage:
AATSDK.setIsChildDirected(true)
Provide impression-level revenue data via the
AATImpression
objectAdd
currencyCode
andprecision
properties to theAATImpression
object.If the ad network provides impression-level revenue data, AATKit will use this information during the AATImpression instantiation and pass it to AATImpressionDelegate via the
func didCountImpression(placement: AATPlacement?, _ impression: AATImpression)
callback. Otherwise, AATKit will detect and collect the impression-level information internally and provide it to the impression delegate via the samefunc didCountImpression(placement: AATPlacement?, _ impression: AATImpression)
callback.Currently, only Google Mobile Ads supports impression-level revenue data.
Introduce new banner placement type:
AATAutoLoadBannerPlacement
andAATAutoLoadMultiSizeBannerPlacement
which are based onAATBannerCache
. They are intended to replace bothAATStickyBannerPlacement
andAATMultiSizeBannerPlacement
hence, they have exactly the same functionality and provide the same APIs.Creating the placement:
Swift:
var placement = AATSDK.createAutoLoadBannerPlacement(name: "<PLACEMENT_NAME>", size: .banner320x50)
Objective-C:
id<AATStickyBannerPlacement> placement = [AATSDK createStickyBannerPlacementWithName:@"<PLACEMENT_NAME>" size:AATBannerPlacementSizeBanner300x50];
Public Interfaces:
AATAutoLoadBannerPlacement
@objc public protocol AATAutoLoadBannerPlacement: AATPlacement {
/// Set the placement delegate that will listen to ad loading and display events
var delegate: AATAutoLoadBannerPlacementDelegate? { get set }
/// Sets the placement statistics delegate
var statisticsDelegate: AATStatisticsDelegate? { get set }
/// Sets the placement impression delegate
var impressionDelegate: AATImpressionDelegate? { get set }
/// Sets the targeting information for the placement
var targetingInfo: [String: [String]]? { get set }
/// Sets the content targeting url for the placement.
var contentTargetingUrl: String? { get set }
/// Start the automatic reloading of the placement
func startAutoReload()
/// Stop the automatic reloading of the placement
func stopAutoReload()
/// Returns true if there is an ad loaded for given placement.
func hasAd() -> Bool
/// Returns placement view. Works only for banner placements.
func getPlacementView() -> UIView?
/// Sets placement default image. This image will be shown in placement when no ad is available.
func setDefaultImage(image: UIImage)
/// Sets gravity for ads that don't fill entire placement area. Works only for sticky banner placements.
func setBannerAlign(alignment: AATBannerAlign)
}
AATAutoLoadMultiSizeBannerPlacement
@objc public protocol AATAutoLoadMultiSizeBannerPlacement: AATPlacement {
/// Set the placement delegate that will listen to ad loading and display events
var delegate: AATAutoLoadMultiSizeBannerPlacementDelegate? { get set }
/// Sets the placement statistics delegate
var statisticsDelegate: AATStatisticsDelegate? { get set }
/// Sets the placement impression delegate
var impressionDelegate: AATImpressionDelegate? { get set }
/// Sets the targeting information for the placement
var targetingInfo: [String: [String]]? { get set }
/// Sets the content targeting url for the placement.
var contentTargetingUrl: String? { get set }
/// Start the automatic reloading of the placement
func startAutoReload()
/// Stop the automatic reloading of the placement
func stopAutoReload()
}
New Ad Networks
IronSource SDK (version 7.2.7), supporting Fullscreen and rewardedVideo formats.
You can add it by adding this line
pod 'AATKit/IronSource'
to your Podfile.
Improvements
Implement Google Mobile Ads Fluid banners.
Extend cached rules' lifetime.
Improve AATAdMobMediationAdapter logs.
Validate that all AATSDK public APIs are called from the main thread.
Throttle download rules request when failed.
Add internal custom timeout for Prebid requests (3.5 seconds).
Fixes
Fix an issue in the fullscreen placement where sometimes the clicks/vImp callbacks are not fired.
Fix an issue in the fullscreen placement where sometimes the loaded ad was set to nil while needed.
Fix an issue where NativeAd and Banner ads sometimes don't call the proper app pause/resume callbacks.
Library Updates
AppLovin to v11.7.1
Xandr (AppNexus) to 8.3.0
Bluestack to 4.1.8
GoogleMobileAds to v10.0.0
Note: GoogleMobileAds No longer serve ads to iOS 11. iOS 12 is required to retrieve ads. Keep supporting iOS 10.
GoogleMobileAdsMediationFacebook to 6.12.0.1
FeedAd to 1.5.3
InMobi to v10.5.3
Ogury to v4.0.0
Prebid to 2.0.8
Pubnative to 2.17.0
Smaato to 22.0.1
Equativ (SmartAd) to 7.20.0
UnityAds to 4.5.0
Vungle to 6.12.2
YOC to 3.1.1
TeadsSDK to v5.0.25
Criteo to 4.6.0
3.1 Beta
3.1.0-beta10
2022-11-30
Fixes
Fix an issue with sticky banners fill rate.
Fix some issues with internal ad loading.
3.1.0-beta7
2022-11-03
Fixes
Persist the debug log choice in the shake debug screen.
Fix a typo in the Pubnative interstitial skip offset key that should be set in the publishers’ info.plist.
Renamed from
AATKitPubnativeOffsetSecsVideoLInterstitial
toAATKitPubnativeOffsetSecsVideoInterstitial
We will keep supporting the key with the typo:
AATKitPubnativeOffsetSecsVideoLInterstitial
.
3.1.0-beta6
2022-10-28
Fixes
Include fixes from the stable version 3.0.11.
Fix an internal issue where the HyBid OMSDK library was not found.
3.1.0-beta5
2022-10-25
Fixes
Fix an issue that occurs when using the
alternativeBundleID
(From the stable version 3.0.10).
3.1.0-beta4
2022-10-21
Fixes
Fix an internal issue with consent handling.
Updates
AppLovin SDK to v11.5.2
AppNexus SDK to v8.1.0
AmazonHB SDK to v4.5.5
Bluestack SDK to v4.1.3
GoogleMobileAds SDK to v9.11.0
GoogleMobileAdsMediationFacebook SDK to v6.11.2.0
FeedAd SDK to v1.5.0
InMobi SDK to v10.1.0
Prebid SDK to v2.0.3
Pubnative SDK to v2.16.0
Smaato SDK to v21.7.7
SmartAd SDK to v7.19.0
UnityAds SDK to v4.4.1
Vungle SDK to v6.12.0
YOC SDK to v3.0.0
3.1.0-beta3
2022-10-12
Fixes
Fix an internal issue with rules validation (From the stable version 3.0.9).
3.1.0-beta2
2022-10-11
Fixes
Fix an issue with native ads impressions tracking (From the stable version 3.0.8).
3.1.0-beta1
2022-10-10
Changes
Implement the “Placements initial delay” feature for all ad formats.
This feature allows publishers to delay the provision of ads for a configurable amount of seconds after the first app fresh install.
Publishers can control the initial delay for each placement using the AddApptr dashboard in the create/edit placements popup.
Provide the "supply chain object" to SmartAd Server ad requests.
Placements will pass themselves to all placements-specific delegate methods as a parameter called
AATPlacement
to their listeners. This parameter will enable the listeners to know which placement triggered the delegate method using this method:placement.getName()
.Changed APIs:
func aatHaveAd(placement: AATPlacement)
func aatNoAd(placement: AATPlacement)
func aatAdCurrentlyDisplayed(placement: AATPlacement)
func aatResumeAfterAd(placement: AATPlacement)
func aatHaveAdWithBannerView(placement: AATPlacement, bannerView: AATBannerPlacementWrapperView)
func aatUserEarnedIncentive(placement: AATPlacement, aatReward: AATReward)
3.0 Beta
3.0.0-beta19
2022-08-11
Changes
Report new KPI "mediationcycles".
Enable Ad Networks SDKs debug logs by server config.
Merging server-side keywords with the SDK global keywords.
Calling ‘controllerViewWillAppear’ and ‘controllerViewWillDisappear’ can now be called on AATSDK directly.
Fixes
Fix an issue in Fullscreen Ad that caused some AdNetwork events not to be called
3.0.0-beta18
2022-07-25
First beta of AATKit 3
AATKit 3 comes with the following improvements:
New object-oriented APIs for all placement types.
Each placement now uses a separate delegate (as opposed to general delegate used by AATKit 2), informing about placement events like ad load, pause for ad etc.
Some method names have changed for improved consistency across platforms.
The name of the public interface has changed from
AATKit
toAATSDK
.AATKit 3 is M1 compatible, hence ad networks not supporting M1 are removed until they support M1:
ironSource
To learn more about the changes, please refer to our AATKit 3 Migration Guide.
Last updated