Beta Release Notes
iOS SDK beta releases
Last updated
iOS SDK beta releases
Last updated
2025-02-19
Improvements
Provide user targeting API and pass it to ad networks.
@objc public static func setUserTargeting(userTargeting: AATUserTargeting)
Usage: AATSDK.setUserTargeting(userTargeting: .init(userId: "<USER_ID>", gender: <GENDER>, yearOfBirth: <YearOfBirth>, keywords: ["<KW1>", "<KW2>"]))
Therefore, the following API has been removed:
public static func setPublisherProvidedId(_ publisherProvidedId: String)
Provide default consent implementation where TCF and CCPA will be checked if no AAT consent is used.
Improve consent handling for non-IAB networks in non-EU countries when AATManagedConsent
is used.
New Libraries
Implemented Display.IO ad network, which includes Interscroller, Classic banners (320x50, 300x250) and inline banners. Display.IO is optional. To add it, include the following line in your Podfile:
pod 'AATKit/DisplayIO'
Library Updates
GraviteRTB to
Removed Libraries
Rubicon
2024-12-02
Library Updates
GraviteRTB to
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.
2024-11-06
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
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'
2024-09-05
Library Updates
GraviteRTB to 1.4.0-beta3, fixing Google Bidding behaviour for banner ads.
2024-08-23
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>"))
Bluestack
2024-07-09
The AATImpression
object returned by AATImpressionDelegate
has been updated as follows:
The mediationType
, price
, currencyCode
, and precision
fields have been removed.
A new field, priceInfo
, of type AATPriceInfo
, has been added. This field includes the following information:
price
currency
precision type
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
2024-06-18
The AATAdMobDSPAdapter
has been renamed to AATGooglePartnerBidding
.:
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.
GraviteRTB to 1.3.0-beta2
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)
2024-04-18
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
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
Add Xcode 15 support.
Updated the minimum deployment target to iOS 12.
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.
Fix an issue where SuperAwesome empty ads were not reported as failures.
2024-02-20
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.
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
2024-02-01
Integrate the new ad network IronSource using multiple instances (Interstitial / Rewarded Videos).
Version 7.7.0.0.
Remove the old IronSource integration (Interstitial / Rewarded Videos).
Remove Pubnative offset options for interstitial and rewarded video formats.
Remove the deprecated AATPubNativeOptions
from AATAdNetworksOptions
.
2024-01-08
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
.
GraviteRTB SDK to 1.0.0-beta4.
Removed deprecated CMPOgury.
2023-11-16
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.
GraviteRTB SDK to 1.0.0-beta3.
2023-11-07
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
Deprecate Pubnative (Verve) offset settings for interstitial and rewarded video ads.
Therefore, AATKit deprecated AATPubNativeOptions.pubNativeOptions
and will no longer support it from version 3.5.
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()
}
Fix an issue with AppNexus multi-size banners where the banner size wasn't adapting the actual ad creative size.
2023-10-19
GraviteRTB SDK (version 1.0.0-beta1) supporting banner and fullscreen formats.
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)
}
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.
Update pubnative to 2.20.0
2023-09-21
[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 use AATConfiguration.initialRules
instead.
Remove the deprecated method setRuleCachingEnabled(:)
. Please use AATConfiguration.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.plist
Usage:
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 the AATInfeedBannerPlacement
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 the AATNativeAdPlacement
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
}
Allow passing max height of inline adaptive Google banners (GAM and AdMob) using AATAdNetworksOptions
passing AATAdMobOptions
or AATDFPOptions
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 API func 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)
}
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’
YOC to 4.1.0
2023-07-10
All the public methods are logged now at debug level.
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
2023-06-27
Introduce new method AATSDK.isConsentOptIn()
, returning "consent opt-in status" returned by our server rules. Only returns meaningful information after the rules are downloaded.
Fix an issue where AutoLoad banner placement auto-reloading was not resumed automatically after AATSDK.controllerViewDidAppear(controller:)
call.
2023-06-16
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.
GoogleMobileAds SDK to v10.4.0
2023-06-09
NOTE The minimum ios target is now ios 11.0 and requires Xcode 14.3
Introduce a new factory method for initializing the banner cache.
instead of AATBannerCache(cacheConfiguration: configuration)
use AATSDK.createBannerCache(configuration: configuration)
.
Deprecate AATSDK.setInitialRules(:)
. Please use AATConfiguration.initialRules
instead.
Deprecate AATSDK.setRuleCachingEnabled(:)
. Please use AATConfiguration.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 the editConsent
API.
serverSideControl
: showing the CMP will be based on the dashboard configurations.
It has a default value of: serverSideControl.
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)
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?)
and setLogLevel(:)
methods.
Fix an issue with the autoload banner placement where ad spaces were not counted properly in case of waterfall failure.
2023-05-12
Fixes
Fix an issue where fullscreen placements weren’t counting either clicks or viewable impressions.
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.
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.
2023-03-1
Placements will pass themselves to AATStatisticsDelegate
listener methods as a parameter called the placement of type AATPlacement
. 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 type AATPlacement
. 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)
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
object
Add currencyCode
and precision
properties to the AATImpression
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 same func didCountImpression(placement: AATPlacement?, _ impression: AATImpression)
callback.
Currently, only Google Mobile Ads supports impression-level revenue data.
Introduce new banner placement type: AATAutoLoadBannerPlacement
and AATAutoLoadMultiSizeBannerPlacement
which are based on AATBannerCache
. They are intended to replace both AATStickyBannerPlacement
and AATMultiSizeBannerPlacement
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()
}
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.
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).
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.
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
2022-11-30
Fixes
Fix an issue with sticky banners fill rate.
Fix some issues with internal ad loading.
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
to AATKitPubnativeOffsetSecsVideoInterstitial
We will keep supporting the key with the typo: AATKitPubnativeOffsetSecsVideoLInterstitial
.
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.
2022-10-25
Fixes
Fix an issue that occurs when using the alternativeBundleID
(From the stable version 3.0.10).
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
2022-10-12
Fixes
Fix an internal issue with rules validation (From the stable version 3.0.9).
2022-10-11
Fixes
Fix an issue with native ads impressions tracking (From the stable version 3.0.8).
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)
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
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
to AATSDK
.
AATKit 3 is M1 compatible, hence ad networks not supporting M1 are removed until they support M1:
ironSource
Note: The following ad networks haven't yet added the file and will be optional dependencies for AATKit to avoid blocking publishing apps on the AppStore:
Added support for .
For more information, please visit the .
Pubnative will no longer support setHTMLInterstitialSkipOffset()
and setVideoInterstitialSkipOffset()
methods ().
Datonomy SDK, for an overview of what Datonomy provides, please check .
For more info on how to integrate Managed Consent please refer to our .
To learn more about the changes, please refer to our .