Update Guide

This guide describes steps required when updating from one Tapdaq SDK version to another, its recommended you perform all the steps to prevent any issues or conflicts.

Upgrading between any version

The following guide explains how to upgrade Tapdaq's iOS SDK between each version.

CocoaPods

To update using CocoaPods make sure that version specified in Podfile is the one you require. Then simply run pod repo update, pod install. If the version is not specified, CocoaPods will install the latest version of the SDK.

Manual upgrade

1. Download the latest SDK

A .zip of our SDK from Manual Integration

2. Replace Tapdaq.framework

Retrieve latest Tapdaq.framework from the latest sdk package and simply replace the previous version in your Frameworks folder. See further details on our Manual Integration page.

3. Replace Adapter Frameworks

Retrieve latest Adapter.framework's from the latest sdk package and simply replace the previous versions in your Frameworks folder. See further details on our Manual Integration page.

4. Replace Network SDK Frameworks

Retrieve compatible network SDK files from the latest sdk package and simply replace the previous versions in your Frameworks folder. See further details on our [Manual Integration|Manual-Integration] page.

Upgrading Specific Versions

This section notes any changes that need to be made when upgrading to specific version.

7.6.0

US Privacy/CCPA

UserSubjectToUSPrivacy states whether a user is in a US state that has privacy laws to inhibit the sale of user data. US Privacy status states whether to enforce privacy, for many networks setting this to YES will forward a "true" flag for doNotSell CCPA flags.

As of this version AdMob, IronSource & Mintegral receive these flags.

Tapdaq.sharedSession.properties.privacySettings.userSubjectToUSPrivacy = TDPrivacyStatusYes;

Tapdaq.sharedSession.properties.privacySettings.usPrivacyDoNotSell = TDPrivacyStatusYes;

TDAdRequestDelegate Changes

Added

TDInterstitialAdRequestDelegate was added to handle events for interstitial ad types (static interstitial, video interstitial, rewarded video). It now has a dedicated -didLoadInterstitialAdRequest: method for these ad types. All functionality of deprecated TDDisplayableAdRequestDelegate was moved to this protocol.

@protocol TDInterstitialAdRequestDelegate <TDAdRequestDelegate>
@optional
- (void)didLoadInterstitialAdRequest:(TDInterstitialAdRequest * _Nonnull)adRequest;
- (void)adRequest:(TDInterstitialAdRequest * _Nonnull)adRequest didFailToDisplayWithError:(TDError * _Nullable)error;
- (void)willDisplayAdRequest:(TDInterstitialAdRequest * _Nonnull)adRequest;
- (void)didDisplayAdRequest:(TDInterstitialAdRequest * _Nonnull)adRequest;
- (void)didCloseAdRequest:(TDInterstitialAdRequest * _Nonnull)adRequest;
@end

TDBannerAdRequestDelegate now has a dedicated -didLoadBannerAdRequest: method for banner ads.

@protocol TDBannerAdRequestDelegate <TDAdRequestDelegate>
@optional
- (void)didLoadBannerAdRequest:(TDBannerAdRequest * _Nonnull)adRequest;
- (void)didRefreshBannerForAdRequest:(TDBannerAdRequest * _Nonnull)adRequest;
- (void)didFailToRefreshBannerForAdRequest:(TDBannerAdRequest * _Nonnull)adRequest withError:(TDError * _Nullable)error;
@end

TDNativeAdRequestDelegate now has a dedicated -didLoadNativeAdRequest: method for native ads.

@protocol TDNativeAdRequestDelegate <TDAdRequestDelegate>
- (void)didLoadNativeAdRequest:(TDNativeAdRequest * _Nonnull)adRequest;
@end

Deprecated

-didLoadAdRequest: has been deprecated in TDAdRequestDelegate. Now dedicated didLoadAdRequest methods from TDInterstitialAdRequestDelegate, TDBannerAdRequestDelegate and TDNativeAdRequestDelegate should be used.

- (void)didLoadAdRequest:(TDAdRequest * _Nonnull)adRequest __deprecated_msg("Use didLoad method for appropriate ad types instead. Deprecated on 03/23/2020 version 7.6.0.");

TDClickableAdRequestDelegate and TDDisplayableAdRequestDelegate have been deprecated.

__deprecated_msg("Use TDAdRequestDelegate instead. Deprecated on 03/23/2020 version 7.6.0.")
@protocol TDClickableAdRequestDelegate <TDAdRequestDelegate>
@end

__deprecated_msg("Use TDInterstitialAdRequestDelegate instead. Deprecated on 03/23/2020 version 7.6.0.")
@protocol TDDisplayableAdRequestDelegate <TDInterstitialAdRequestDelegate>
@end

GDPR Interface Changes

GDPR interfaces have been updated to all use the STATUS values for setters/getters to make it clearer and updating the values more flexible. Also all GDPR settings were moved to privacySettings property of TDProperties.

Added

@interface TDPrivacySettings : NSObject
@property (readwrite, nonatomic) TDPrivacyStatus userSubjectToGdpr;
@property (readwrite, nonatomic) TDPrivacyStatus gdprConsentGiven;
@property (readwrite, nonatomic) TDPrivacyStatus ageRestrictedUser;
@end

Deprecated

@interface TDProperties : NSObject
@property (assign, nonatomic) TDSubjectToGDPR userSubjectToGDPR
__deprecated_msg("Use privacySettings class instead. Deprecated on 03/18/2020 version 7.6.0.");
@property (assign, nonatomic) BOOL isConsentGiven
__deprecated_msg("Use privacySettings class instead. Deprecated on 03/18/2020 version 7.6.0.");
@property (assign, nonatomic) BOOL isAgeRestrictedUser
__deprecated_msg("Use privacySettings class instead. Deprecated on 03/18/2020 version 7.6.0.");
@end
@interface Tapdaq : NSObject
@property (nonatomic) TDSubjectToGDPR userSubjectToGDPR __deprecated_msg("Use properties.privacySettings instead. Deprecated on 03/18/2020 version 7.6.0.");
@property (nonatomic) BOOL isConsentGiven __deprecated_msg("Use properties.privacySettings instead. Deprecated on 03/18/2020 version 7.6.0.");
@property (nonatomic) BOOL isAgeRestrictedUser __deprecated_msg("Use properties.privacySettings instead. Deprecated on 03/18/2020 version 7.6.0.");
@end

Mute Flag

For networks which support an SDK level mute flag for ads, this flag will be used for them.

Added

Tapdaq.sharedSession.properties.muted = YES;
Tapdaq.sharedSession.properties.isMuted;

Log Level

Log level has been changed to be a class property of TDLogger object.

Added

@interface TDLogger : NSObject
+ (TDLogLevel)logLevel;
+ (void)setLogLevel:(TDLogLevel)logLevel;
@end

Deprecated

@interface TDProperties : NSObject
@property (assign, nonatomic) TDLogLevel logLevel
__deprecated_msg("Use TDLogger.logLevel instead. Deprecated on 03/26/2020 version 7.6.0.");
@end

As of this version AdMob, AppLovin, Mintegral & Vungle use this flag

7.5.0

Banners

A number of changes to banners have been implemented in this version.

  • Banners will continue to refresh after failing to refresh, they will now try again at the refresh interval (30 seconds)
  • A new didFailToRefresh callback has been added
  • Placement tags are now accepted
  • AdMob Standard/Smart banners now use AdMob adaptive banners

Placement tags

It's now possible to pass in placement tags as a load parameter, this will only load networks which have the placement tag enabled.

@interface Tapdaq ()
// Load with specified placement and specified banner type
- (void)loadBannerForPlacementTag:(NSString *)placementTag withSize:(TDMBannerSize)bannerSize delegate:(id<TDBannerAdRequestDelegate>)delegate;

// Load with specified placement using custom size of view
- (void)loadBannerForPlacementTag:(NSString *)placementTag
                       targetSize:(CGSize)targetSize
                         delegate:(id<TDBannerAdRequestDelegate>)delegate;
@end

Custom size

It is now possible to specify the size of the view the banner will be place in. Tapdaq SDK will automatically select the most suitable banner size for the target size specified E.g. if the view is 400x60 a Standard or Smart banner will be used depending on which network is used.

@interface Tapdaq ()
// Load with specified placement using custom size of view
- (void)loadBannerForPlacementTag:(NSString *)placementTag
                       targetSize:(CGSize)targetSize
                         delegate:(id<TDBannerAdRequestDelegate>)delegate;
@end

Callback added - didFailToRefresh

TDBannerAdRequestDelegate now has a didFailToRefresh method, this will be called if the banner cannot load a new ad after it has succeeded the first time, didRefresh will be called if it was successful. An error will be provided with details of the failure like didFailToLoad callback does.

@protocol TDBannerAdRequestDelegate <TDClickableAdRequestDelegate>
@optional
- (void)didFailToRefreshBannerForAdRequest:(TDBannerAdRequest * _Nonnull)adRequest withError:(TDError * _Nullable)error;
@end

Deprecated

@interface Tapdaq ()
- (void)loadBannerWithSize:(TDMBannerSize)size completion:(void(^)(UIView *))completion
__deprecated_msg("Use -loadBannerForPlacementTag:withSize: instead. Deprecated on 01/29/2019 version 7.5.0.");
@end
@interface Tapdaq ()
- (void)loadBannerWithSize:(TDMBannerSize)size completion:(void(^)(UIView *))completion
__deprecated_msg("Use -loadBannerForPlacementTag:withSize: instead. Deprecated on 01/29/2019 version 7.5.0.");
@end

TDAdUnit & TDAdType

TDAdTypes bit flags have been removed and replaced by an enumerator TDAdUnit. adTypes property of TDPlacement was replaced by adUnit property of type TDAdUnit.

typedef NS_ENUM(NSInteger, TDAdUnit) {
    TDUnitUnknown = 0,
    TDUnitStaticInterstitial,
    TDUnitVideoInterstitial,
    TDUnitRewardedVideo,
    TDUnitBanner,
    TDUnitMediatedNative
};

@interface TDPlacement ()
@property (nonatomic, readonly) TDAdUnit adUnit;
@end

7.4.0

YouAppi GDPR Settings

For all users, Tapdaq's GDPR settings must be set to something other than unknown before initialising for YouAppi to function. For users outside of the EU userSubjectToGDPR should be set to TDSubjectToGDPRNo. For users inside of the EU userSubjectToGDPR should be set to TDSubjectToGDPRYes, also isConsentGiven should be provided for YouAppi to intialise. Note the consent MUST be obtained from the user.

If any other settings are provided, YouAppi will not be initialised and will not display ads.

See User Privacy page for details on how to set GDPR settings

Removed Ad Networks

  • HyprMX

7.3.0

Added Ad Networks

Three new networks have been added to iOS for Video & Rewarded Video content.

  • Maio (SDK 1.4.8)
  • Mintegral (SDK 5.7.0)
  • TikTok (SDK 2.3.1.0)

Removed Ad Networks

  • Kiip
  • MoPub
  • Receptiv

Removed offerwall ad unit

Offerwall ad unit is no longer available using Tapdaq SDK.

However, offerwall can still be implemented along with Tapdaq if Tapjoy is used as one of the demands sources. More information can be found on the Offerwall page.

The following offerwall related methods were removed:

- (void)loadOfferwallWithDelegate:(id<TDAdRequestDelegate>)delegate __attribute__((deprecated("loadOfferwallWithDelegate: has been deprecated. This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));
- (void)loadOfferwall __attribute__((deprecated("loadOfferwall has been deprecated. This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));
- (BOOL)isOfferwallReady __attribute__((deprecated("isOfferwallReady has been deprecated.This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));
- (void)showOfferwall __attribute__((deprecated("showOfferwall has been deprecated. This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));

7.2.0

User Id

A UserId field has been added to the TDProperties & Tapdaq interface, this replaces the hashedUserId that was passed into showRewardedVideo method. If UserId is not set, the hashedUserId will continue to be used (if available). The following method is now deprecated:

- (void)showRewardedVideoForPlacementTag:(NSString *)placementTag hashedUserId:(NSString *)hashedUserId __attribute__((deprecated("showRewardedVideoForPlacementTag:hashedUserId: has been deprecated. Please use showRewardedVideoForPlacementTag: instead. To set user ID plese use userId property of TDProperties class or Tapdaq interface. This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));

AdMob v7.44.0 requires app ID to be added to Info.plist

When including AdMob in your project you must also add your AdMob app ID to your info.plist. Use the key GADApplicationIdentifier with the value being your AdMob app ID.

Offerwall ad unit deprecated

The following methods have been deprecated and will be removed in future:

- (void)loadOfferwallWithDelegate:(id<TDAdRequestDelegate>)delegate __attribute__((deprecated("loadOfferwallWithDelegate: has been deprecated. This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));
- (void)loadOfferwall __attribute__((deprecated("loadOfferwall has been deprecated. This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));
- (BOOL)isOfferwallReady __attribute__((deprecated("isOfferwallReady has been deprecated.This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));
- (void)showOfferwall __attribute__((deprecated("showOfferwall has been deprecated. This method will be removed in future releases. Deprecated on 09/07/2019 version 7.2.0.")));

7.1.0

Ironsource Instance ID's

The Ironsource Adapter has changed its implementation to use Instance IDs rather than Placements, both are available on the Ironsource dashboard and should be replaced in the Tapdaq dashboard.

Replacing ID's will cause previous SDK's to fail to load ads, vice versa leaving placements in the dashboard will cause new SDK's to fail to load.

Ironsource Offerwall Support Removed

Offerwalls will now fail to load as the Ironsource Offerwall implementation has been removed. The load/Show interface remains but will be removed in later versions.

7.0.0

NEW: SDK version 7.0.0 supports zones. Please note, this release does not currently support cross promotion ad serving. To access our cross promotion features, please use SDK version 6.4.1

Replaced Banner load method

Several methods for loading banners were replaced. The foloowing method should be used now:

Objective-C
Swift
- (void)loadBannerWithSize:(TDMBannerSize)size completion:(void(^)(UIView *))completion;

The following methods were REMOVED from Tapdaq class:

- (void)loadBanner:(TDMBannerSize)size;
- (UIView *)getBanner;

Registering Placement Tags

It's no longer required for placement tags to be registered with the TDProperties object before initialising the SDK. Placement Tags are still used for Loading & Showing ads.

The following methods were REMOVED from TDProperties class:

- (BOOL)registerPlacement:(TDPlacement *)placement;
- (BOOL)registerPlacements:(NSArray *)placements;
- (NSArray *)registeredPlacements;

AdMob Targeting

As of Tapdaq SDK 7.0.0, an AdMob content rating will be forwarded for every ad request to AdMob, to do this, set the value in the config either before Tapdaq has initialised or after like so:

Objective-C
Swift
// Before Tapdaq initialises
TDProperties *properties = [TDProperties defaultProperties];

properties.adMobContentRating = @"MA"// G, PG, T, MA
properties.isAgeRestrictedUser = YES; // GDPR/COPPA

[[Tapdaq sharedSession] setApplicationId:@"YOUR_APP_ID"
clientKey:@"YOUR_CLIENT_KEY"
properties:properties];

// After Tapdaq initialises
Tapdaq.sharedSession.adMobContentRating = @"MA"; // G, PG, T, MA
Tapdaq.sharedSession.isAgeRestrictedUser = YES; // GDPR/COPPA

The tag_for_under_age_of_consent flag will be sent to AdMob if the user is subject to GDPR and AgeRestrictedUser is set. The ChildDirectedTreatment COPPA flag will be sent if user is not known to be subject to GDPR and AgeRestrictedUser is set. Read more about AdMob Targeting here

Added DidFailToDisplay delegate method

didFailToDisplay will be called after calling showAd (Interstitial, Video, Rewarded Video, Offerwall) if there is no ad to show, or the ad is unable to display. An error will be provided.

Objective-C
Swift
- (void)adRequest:(TDAdRequest *)adRequest didFailToDisplayWithError:(TDError *)error;

6.4.0

Tapdaq's CocoaPods podspec is now hosted in a separate repository

If you are using CocoaPods to manage Tapdaq SDK and its dependencies it is now required to specify the source of Tapdaq's podspec repository. It can be done by adding the following line to Podspec file:

source 'https://github.com/tapdaq/cocoapods-specs.git'

More information about including Tapdaq and network Adapters to a project using CocoaPods can be found on Quickstart page.

6.3.2

SDK and adapters are now static frameworks

Adapters no longer include network SDKs' code and are statically linked. Network SDK files now also have to be included in the project and they are now accessible in app's code.

More information on installation process can be found on Quickstart page.

6.2.3

GDPR

Added userSubjectToGDPR property, if this is not set to true then consent data will no longer be sent to ad networks. Where ad networks also request this field, we pass the value on.

TDSubjectToGDPR can be TDSubjectToGDPRYes, TDSubjectToGDPRNo or TDSubjectToGDPRUnknown. By default it is TDSubjectToGDPRUnknown

NOTE: userSubjectToGDPR must be set to TDSubjectToGDPRYes before declaring if a user has provided consent. Where false, consent does not need to be sent

When initialising:

TDProperties *properties = [TDProperties defaultProperties];
properties.userSubjectToGDPR = TDSubjectToGDPRYes; //GDPR declare if user is in EU
properties.isConsentGiven = YES; //GDPR consent must be obtained from the user
properties.isAgeRestrictedUser = YES; //Is user under 16 (Used by AppLovin & YouAppi)

After initialising:

[Tapdaq sharedSession].userSubjectToGDPR = TDSubjectToGDPRYes;
[Tapdaq sharedSession].isConsentGiven = YES;
[Tapdaq sharedSession].isAgeRestrictedUser = YES;

6.2.2

Deprecated/Replaced

These methods were marked as deprecated. They are still present and functional in the SDK. However, make sure the most up to date methods are used in your app as they will be removed in future releases.

Reward validation failed callback now contains reward object which was supposed to be awarded to the user.

@protocol TapdaqDelegate
- (void)rewardValidationErroredForPlacementTag:(NSString *)placementTag  __attribute__((deprecated("rewardValidationErroredForPlacementTag: has been deprecated. Please use rewardValidationFailed: instead. This method will be removed in future releases. Deprecated on 31/05/2018 version 6.2.2.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)rewardValidationFailed:(TDReward *)reward;

...
@end

6.2.1

GDPR

GDPR compliance has been added in this version, apps should acquire EU users consent for networks to provide personalised ads. Pass the consent to Tapdaq if consent is available at initialisation it should be added like so:

Log in with your Tapdaq account to have these keys generated automatically.

Objective-C
Swift

TDProperties *properties = [TDProperties defaultProperties];
properties.isConsentGiven = YES; //GDPR consent must be obtained from the user

[[Tapdaq sharedSession] setApplicationId:@"<APP_ID>"
clientKey:@"<CLIENT_KEY>"
properties:properties];
    

If consent is acquired mid session inform Tapdaq like so:

Log in with your Tapdaq account to have these keys generated automatically.

Objective-C
Swift

[Tapdaq sharedSession].isConsentGiven = YES;

NOTE: Chartboost will not update consent mid session and must be set at initialisation

Age restricted users

Some networks privacy also ask if users are known to be under 16, this can also be set at initialisation or mid session like so:

Log in with your Tapdaq account to have these keys generated automatically.

Objective-C
Swift

TDProperties *properties = [TDProperties defaultProperties];
properties.isAgeRestrictedUser = YES; //Is user under 16 (Used by AppLovin and YouAppi)

[[Tapdaq sharedSession] setApplicationId:@"<APP_ID>"
clientKey:@"<CLIENT_KEY>"
properties:properties];
    

Set mid session like so:

Log in with your Tapdaq account to have these keys generated automatically.

Objective-C
Swift

[Tapdaq sharedSession].isAgeRestrictedUser = YES;

Deprecated/Replaced

These methods were marked as deprecated. They are still present and functional in the SDK. However, make sure the most up to date methods are used in your app as they will be removed in future releases.

Property isConfigLoaded is deprecated. Method - (BOOL)isInitialised; should be used instead.

@property (readonly, nonatomic) BOOL isConfigLoaded __attribute__((deprecated("isConfigLoaded has been deprecated. Please use -isInitialised instead. This property will be removed in future releases.")));

6.0.0

Removed

The following methods were removed from Tapdaq class. These methods were deprecated in previous releases.


- (void)loadInterstitial __attribute__((deprecated("loadInterstitial has been deprecated. Please use loadInterstitialForPlacementTag: instead. This method will be removed in future releases.")));
- (BOOL)isInterstitialReady __attribute__((deprecated("isInterstitialReady has been deprecated. Please use isInterstitialReadyForPlacementTag: instead. This method will be removed in future releases.")));
- (void)showInterstitial __attribute__((deprecated("showInterstitial has been deprecated. Please use showInterstitialForPlacementTag: instead. This method will be removed in future releases.")));
- (void)loadVideo __attribute__((deprecated("loadVideo has been deprecated. Please use loadVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (BOOL)isVideoReady __attribute__((deprecated("isVideoReady has been deprecated. Please use isVideoReadyForPlacementTag: instead. This method will be removed in future releases.")));
- (void)showVideo __attribute__((deprecated("showVideo has been deprecated. Please use showVideoForPlacementTag: instead. This method will be removed in future releases.")));- (void)loadRewardedVideo __attribute__((deprecated("loadRewardedVideo has been deprecated. Please use loadRewardedVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (BOOL)isRewardedVideoReady __attribute__((deprecated("isRewardedVideoReady has been deprecated. Please use isRewardedVideoReadyForPlacementTag: instead. This method will be removed in future releases.")));
- (void)showRewardedVideo __attribute__((deprecated("showRewardedVideo has been deprecated. Please use showRewardedVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)loadNativeAdvertForAdType:(TDNativeAdType)nativeAdType __attribute__((deprecated("loadNativeAdvertForAdType: has been deprecated. Please use loadNativeAdvertForPlacementTag:adType:delegate: instead. This method will be removed in future releases.")));
- (TDNativeAdvert *)getNativeAdvertForAdType:(TDNativeAdType)nativeAdType __attribute__((deprecated("getNativeAdvertForAdType: has been deprecated. Please use getNativeAdvertForPlacementTag:adType: instead. This method will be removed in future releases.")));

The following methods were removed from TapdaqDelegate protocol. These methods were deprecated in previous releases.

- (void)willDisplayInterstitial __attribute__((deprecated("willDisplayInterstitial has been deprecated. Please use willDisplayInterstitialForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didDisplayInterstitial __attribute__((deprecated("didDisplayInterstitial has been deprecated. Please use didDisplayInterstitialForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didCloseInterstitial __attribute__((deprecated("didCloseInterstitial has been deprecated. Please use didCloseInterstitialForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didClickInterstitial __attribute__((deprecated("didClickInterstitial has been deprecated. Please use didClickInterstitialForPlacementTag: instead. This method will be removed in future releases.")));
- (void)willDisplayVideo __attribute__((deprecated("willDisplayVideo has been deprecated. Please use willDisplayVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didDisplayVideo __attribute__((deprecated("didDisplayVideo has been deprecated. Please use didDisplayVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didCloseVideo __attribute__((deprecated("didCloseVideo has been deprecated. Please use didCloseVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didClickVideo __attribute__((deprecated("didClickVideo has been deprecated. Please use didClickVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)willDisplayRewardedVideo __attribute__((deprecated("willDisplayRewardedVideo has been deprecated. Please use willDisplayRewardedVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didDisplayRewardedVideo __attribute__((deprecated("didDisplayRewardedVideo has been deprecated. Please use didDisplayRewardedVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didCloseRewardedVideo __attribute__((deprecated("didCloseRewardedVideo has been deprecated. Please use didCloseRewardedVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)didClickRewardedVideo __attribute__((deprecated("didClickRewardedVideo has been deprecated. Please use didClickRewardedVideoForPlacementTag: instead. This method will be removed in future releases.")));
- (void)rewardValidationErrored __attribute__((deprecated("rewardValidationErrored has been deprecated. Please use rewardValidationErroredForPlacementTag: instead. This method will be removed in future releases.")));


Deprecated/Replaced

These methods were marked as deprecated. They are still present and functional in the SDK. However, make sure the most up to date methods are used in your app as they will be removed in future releases.

Error object was added to theses method to give a more descriptive error.

@protocol TapdaqDelegate
- (void)didFailToLoadConfig __attribute__((deprecated("didFailToLoadConfig has been deprecated. Please use didFailToLoadConfigWithError: instead. This method will be removed in future releases.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)didFailToLoadConfigWithError:(TDError *)error;

...
@end
@protocol TapdaqDelegate
- (void)didFailToLoadBanner __attribute__((deprecated("didFailToLoadBanner has been deprecated. Please use didFailToLoadBannerWithError: instead. This method will be removed in future releases.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)didFailToLoadBannerWithError:(TDError *)error;

...
@end
@protocol TapdaqDelegate
- (void)didFailToLoadInterstitialForPlacementTag:(NSString *)placementTag __attribute__((deprecated("didFailToLoadInterstitialForPlacementTag: has been deprecated. Please use didFailToLoadInterstitialForPlacementTag:withError: instead. This method will be removed in future releases.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)didFailToLoadInterstitialForPlacementTag:(NSString *)placementTag withError:(TDError *)error;

...
@end
@protocol TapdaqDelegate
- (void)didFailToLoadVideoForPlacementTag:(NSString *)placementTag __attribute__((deprecated("didFailToLoadVideoForPlacementTag: has been deprecated. Please use didFailToLoadVideoForPlacementTag:withError: instead. This method will be removed in future releases.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)didFailToLoadVideoForPlacementTag:(NSString *)placementTag withError:(TDError *)error;

...
@end
@protocol TapdaqDelegate
- (void)didFailToLoadRewardedVideoForPlacementTag:(NSString *)placementTag __attribute__((deprecated("didFailToLoadRewardedVideoForPlacementTag: has been deprecated. Please use didFailToLoadRewardedVideoForPlacementTag:withError: instead. This method will be removed in future releases.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)didFailToLoadRewardedVideoForPlacementTag:(NSString *)placementTag withError:(TDError *)error;

...
@end
@protocol TapdaqDelegate
- (void)didFailToLoadMoreApps __attribute__((deprecated("didFailToLoadMoreApps has been deprecated. Please use didFailToLoadMoreAppsWithError: instead. This method will be removed in future releases.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)didFailToLoadMoreAppsWithError:(TDError *)error;

...
@end
@protocol TapdaqDelegate
- (void)didFailToLoadOfferwall __attribute__((deprecated("didFailToLoadOfferwall has been deprecated. Please use didFailToLoadOfferwallWithError: instead. This method will be removed in future releases.")));

...
@end

// Replaced with:

@protocol TapdaqDelegate
//Added new method
- (void)didFailToLoadOfferwallWithError:(TDError *)error;

...
@end

5.9.2

Deprecated/Replaced -(void)rewardValidationSucceededForPlacementTag:rewardName:rewardAmount:payload:

We've added a unique eventId value to each reward which will match that used in the server side callbacks, whilst doing so, we have consolidated all reward params into TDReward class.

TDReward.customJson returns id which is dependent on the json structure entered via the dashboard, it will either be a NSDictionary or an NSArray.

@protocol TapdaqDelegate
- (void)rewardValidationSucceededForPlacementTag:(NSString *)placementTag
                                      rewardName:(NSString *)rewardName
                                    rewardAmount:(int)rewardAmount
                                         payload:(NSDictionary *)payload  __attribute__((deprecated("rewardValidationSucceededForPlacementTag:rewardName:rewardAmount:payload: has been deprecated. Please use rewardValidationSucceeded: instead. This method will be removed in future releases.")));

...
@end

@protocol TapdaqDelegate
//Added new method
- (void)rewardValidationSucceeded:(TDReward *)reward {
    NSString *eventId = reward.eventId;
    NSString *name = reward.name;
    int value = reward.value;
    NSString *tag = reward.tag;
    id customJson = reward.customJson;
}

...
@end