Beta Release Notes

iOS SDK beta releases

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.7.0-beta1

2024-02-23

Library Updates

  • GraviteRTB to 1.1.0-beta1

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 from AATAdNetworksOptions.

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-beta7

2023-11-08

Fixes

  • Downgrade GoogleMobileAdsMediationFacebook to version 6.12.0.1 because the latest version 6.14.0.0 depends on FBAudienceNetwork version 6.14.0 which doesn't support the M1 architecture.

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() and setVideoInterstitialSkipOffset() 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-beta5

2023-10-25

Fixes

  • Fix an issue where AATAdNetworksOptions initialisation wasn't exposed to ObjC.

Library Updates

  • AmazonPublisherServicesSDK to 4.7.6.

3.4.0-beta4

2023-10-23

Fixes

  • Fix an issue with Pubnative (Verve) version 2.20.0 where the framework had a wrong beta version that was blocking publishing apps to the AppStore.

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-beta2

2023-09-27

Fixes

  • Fix an issue where sometimes Unity fullscreen and rewarded video ads are not shown properly.

  • Fix an issue with unity banners where the delegate method bannerViewDidShow(:) wasn't implemented.

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 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
}

Improvements

  • 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)
}

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-beta5

2023-06-22

Improvements

  • Use the async Datonomy getLTVScore() API to avoid apps freezing while executing ad requests.

Library Updates

  • Datonomy SDK to v0.0.10-beta

3.3.0-beta4

2023-06-21

Fixes

  • Fix an issue where IronSource ad requests were not executed.

Library Updates

  • Datonomy SDK to v0.0.10-beta

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-beta2

2023-06-16

Library Updates

  • Datonomy SDK to v0.0.9-beta

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) 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.

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?) and setLogLevel(:) 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 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)

        • 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 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()
}

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-beta9

2022-11-08

Fixes

  • The same fixes from the stable version 3.0.12.

3.1.0-beta8

2022-11-07

Fixes

  • Fix an internal issue in the Infeed banner placement.

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 to AATKitPubnativeOffsetSecsVideoInterstitial

    • 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 to AATSDK.

  • 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