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.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 alloc] init];

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 alloc] init];
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:

Objective-C
Swift
TDProperties *properties = [[TDProperties alloc] init];
properties.isConsentGiven = YES; //GDPR consent must be obtained from the user

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

If consent is acquired mid session inform Tapdaq like so:

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:

Objective-C
Swift
TDProperties *properties = [[TDProperties alloc] init];
properties.isAgeRestrictedUser = YES; //Is user under 16 (Used by AppLovin & YouAppi)

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

Set mid session like so:

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