Release Notes

14.2.1 (2024-12-09)

  • Version bump.

14.2.0 (2024-12-04)

  • Added tracking domains for Privacy Manifest.
  • SDK built with Xcode 16.0.
  • Deprecated TJPlacement didClick callback.
  • Deprecated getSupportURL.
  • Fixed EasyApp (Objc) ATT prompt.
  • Removed support for iOS 10 + 11.

14.1.1 (2024-10-15)

  • Version bump to match Android.

14.1.0 (2024-10-02)

  • Deprecated PPE.
  • Minor fixes to EasyApp.
  • Built with Xcode 15.4

14.0.1 (2024-07-16)

  • Fixed dynamic framework signing issues.

14.0.0 (2024-07-01)

  • Added NSPrivacyCollectedDataTypeEmailAddress to the privacy manifest.
  • Added static framework support. Cocoapods installation defaults to static.
  • Added getUserID getter [Tapjoy getUserID].
  • Fixed SKStoreProductViewController presentation on iOS 17.4+.
  • Cleaned up C++ header.
  • Deprecated userID property [[Tapjoy sharedTapjoyConnect] userID]. Please use [Tapjoy getUserID].
  • Removed deprecated push notifications interface.
  • Removed deprecated limitedConnect/placement interface.
  • Removed deprecated UserCohortVariables interface.
  • Removed deprecated InstallReferrer interface.
  • Removed deprecated CustomEvents interface.
  • Removed deprecated PrivacyPolicy interface.
  • Removed deprecated UserFriendCount interface.
  • Removed deprecated Mediation/Auction date interface.
  • Removed deprecated setUserId interface.
  • Removed deprecated store property.
  • Removed deprecated analyticsApiKey property.
  • Fixed Swift EasyApp not showing ATT prompt.
  • Fixed ‘show offerwall’ button not being enabled if pressed before connect in Objective-C EasyApp.
  • Fixed Offerwall Discover visual issue in EasyApp on devices with a notch.
  • Fixed Swift EasyApp calling connect on resume.

Known Issues

1. Certificate Expiration

  • If you receive a message that the Tapjoy SDK certificate has expired, you may need to clear your cache or update to the latest SDK. More info here.
Cocoapods
pod cache clean TapjoySDK --all
Swift Package Manager
rm -rf ~/Library/Caches/org.swift.swiftpm ~/Library/org.swift.swiftpm
Manual Integration
  1. Delete the .xcframework.
  2. Download a new copy from the dashboard.

2. Invalid Bundle

  • Cocoapods Dynamic/Swift Package Manager signing issue. Builds will fail to upload to the app store due to invalid bundle. Update to 14.0.1 to resolve.

13.4.1 (2024-03-19)

  • Fixed bug with setting user id for AppLaunch placement.

13.4.0 (2024-03-04)

  • Added support for Swift Package Manager.
  • Added onConnectWarning callback.
  • Removed push notifications.

13.3.0 (2023-11-30)

  • Added PrivacyManifest including Nutrition labels & Required Reason API.
  • Signed the XCFramework using Tapjoy, Inc. certificate.
  • Changed Framework from static to dynamic
  • Friend Count data no longer sent. API deprecated in 13.2.0 and will be removed in 14.0.0
  • User Cohort Variable data no longer send. API deprecated in 13.2.0 and will be removed in 14.0.0
  • Bug fixes and improvements.

13.2.1 (2023-10-05)

  • Fixes modulemap warnings.

13.2.0 (2023-09-27)

  • New API to set max user level.
  • New API to set user segments.
  • New API to set currency balance (Self Managed only).
  • New API to set currency demand.
  • New API to set Placement entry point.
  • Deprecated mediation & video methods/callbacks.
  • Deprecated push notifications.
  • Deprecated limited connect.
  • Added connect flags to C++ interface.
  • Added TJStatus to C++ interface.
  • Improvements to spend/earn currency methods.
  • Error messages will now be returned in the connect failure callback. Deprecated handler without parameters
  • Bug fixes.

13.1.2 (2023-07-14)

  • Version bump to match Android.

13.1.1 (2023-06-30)

  • Version bump to match Android.

13.1.0 (2023-06-28)

  • Added error messages for Tapjoy-Managed currency callbacks.
  • Added setUserID withCompletion method to C++ interface.
  • Updated privacy policy interface.
  • Added Offerwall Discover UI to Swift EasyApp.
  • Added privacy policy settings to EasyApp UI.
  • Fixed a crash when a nil placement name is passed via the C++ interface.
  • Fixed connect being called again on app resume.
  • Fixed EXC_BAD_ACCESS for new sessions on iOS 12 and below.
  • Fixed the earned currency event not firing when the currency is initialised for the first time.
  • Memory usage improvements and fixes.
  • TJPrivacyPolicy usPrivacy is now a public property, as result setUSPrivacy is no longer available in Swift. Set using Tapjoy.getPrivacyPolicy().usPrivacy = privacyValue

13.0.1 (2023-04-18)

  • Version bump to match Android.

13.0.0 (2023-04-06)

  • Device advertising id is logged in the Xcode console.
  • New ‘test device id’ is logged in the Xcode console.
  • Improved EasyApp.
  • New Swift EasyApp.
  • iOS 9 is no longer supported.
  • Built with Xcode 14.1, no longer supports 32bit devices.
  • Removed deprecated privacy interfaces removed - use TJPrivacyPolicy instead.
  • Removed deprecated display multiplier interface.
  • Removed deprecated AppDataVersion interface.
  • Fixed didClick callback.
  • Fixed webview memory leak.
  • Bug fixes.

12.11.1 (2022-12-01)

  • Fixed minor EasyApp UI issue.

12.11.0 (2022-10-07)

  • Removed the PassKit dependency from the podspec and EasyApp.
  • EasyApp UI updates to support the notch.
  • Fixed sceneDisconnected appstore crash on iOS 15.7.

12.10.0 (2022-05-03)

  • setUserId method deprecated in favour of setUserIdWithCompletion().
  • Bug fixes.

12.9.1 (2022-03-16)

  • No code level changes, just updating the version number to align with Android and Unity SDKs.

12.9.0 (2022-01-13)

  • Various changes to improve Swift support (including nullability flags and return type fixes).
    • Due to return type clarification, instantiating TJPlacement in Swift now uses a standard initializer (TJPlacement(...)), instead of factory method (TJPlacement.placement(...))
  • Additional parameters as part of SDK requests. Refer to what information is sent to Tapjoy
  • Bug fixes.
  • Fixed when ATT prompt is called in EasyApp.
  • Built with Xcode 13.

12.8.1 (2021-05-25)

  • Support for SKAdNetwork 2.2 and View-Through Attribution (for the apps built with Xcode 12.5)
  • Support for MRAID SKAdNetwork
  • Additional parameters as part of SDK requests. Refer to what information is sent to Tapjoy
  • Bug fixes and enhancement features

12.8.0 (2021-03-16)

  • Adoption of XCFramework for Tapjoy SDK distribution (requires minimum Xcode version 11)
  • Removed requirement for having TapjoyResources.bundle included
  • Minimum iOS support is now iOS 9
  • Support for simulators running on arm64 Mac computers with Apple Silicon
  • Added the AppTrackingTransparency prompt to EasyApp (Tapjoy sample app bundled with the SDK download) for publisher reference on how to implement this
  • Bug fixes and enhancement features

12.7.1 (2020-11-02)

  • SKAdNetwork Version 2.0 related fixes.
  • Support for default browser changes in iOS14
  • Bug fixes and enhancement features

12.7.0 (2020-09-16)

12.6.1 (2020-07-09)

  • Tapjoy SDK Resource bundle is now compatible with Unity 2019.3x

12.6.0 (2020-06-29)

  • This release contains features that help publishers comply with the California Consumer Privacy Act (CCPA). Each platform (iOS, Android, Unity, C++) has a new class “TJPrivacyPolicy” which allows you to manage all privacy flags (GDPR, user consent, below consent age, and US privacy). For implementation details see here.

NB: If you are updating from a previous version of the Tapjoy SDK and have set privacy values using the old method don’t worry – the new SDK will still read the previously set values and you do not need to manually set them again. However, we would recommend eventually migrating your code to use this new method.

  • Added new TJPrivacyPolicy class to handle GDPR, US Privacy, Consent and Below Consent Age in one place.
  • Deprecated old GDPR, User Consent and Below Consent Age API

12.4.2 (2020-02-07)

  • Version bump to match android

12.4.1 (2020-01-07)

  • Added safeguards around setUserIDWithCompletion param
  • Bug fix for the app store

12.4.0 (2019-12-04)

  • Support for a customer parameter in currency callbacks (Future product release)
  • Bug Fixes

12.3.4 (2019-10-09)

  • Support for SceneDelegate
  • Support of UIAlertController instead of UIAlertView

12.3.3 (2019-09-20)

  • Updated IAB Open Measurement SDK to remove UIWebView usage

12.3.2 (2019-09-16)

  • Removed usage of UIWebView
  • iOS 13 support
  • Removed unused frameworks from the SDK
  • Bug fixes

12.3.1 (2019-06-06)

  • Additional video performance enhancements

12.3.0 (2019-05-28)

  • Video performance enhancements
  • The web-based offerwall (also called tapjoy.com offerwall or TJC offerwall) has been removed to comply with Apple’s policy on incentivized installs. The SDK call to directly link to the web-based offerwall has also been removed.
  • Added didClick delegate method to TJPlacementDelegate. Note that this delegate will not actually be called until there is back-end server support for it. We expect this to start around mid-June 2019.
@protocol TJPlacementDelegate <NSObject>
@optional
- (void)didClick:(TJPlacement*)placement;

12.2.1 (2019-03-14)

  • Fixed a series of spurious "unable to open object file" warnings when building apps with the iOS SDK.
  • Fixed orientation issues that came up in some AdMob mediation integrations.
  • Removed unused code, so SDK is about 10% smaller than previous version.

12.2.0 (2018-11-13)

This release adds a "user is below consent age" flag that helps publishers monetize their user base while remaining in compliance with COPPA. Note that it is the publisher’s responsibility to implement this function; it is not automatically implemented when the Tapjoy SDK is integrated into an application. Responsibility for overall compliance with COPPA and other applicable laws and regulations remains with the publisher.

In the US, the Children’s Online Privacy Protection Act (COPPA) imposes certain requirements on operators of online services that (a) have actual knowledge that the connected user is a child under 13 years of age, or (b) operate services (including apps) that are directed to children under 13.

Similarly, the GDPR imposes certain requirements in connection with data subjects who are below the applicable local minimum age for online consent (ranging from 13 to 16, as established by each member state).

For applications that are not directed towards children under 13 years of age, but still have a minority share of users known to be under the applicable minimum age, utilize this method to access Tapjoy’s monetization capability. This method will set ad_tracking_enabled to false for Tapjoy which only shows the user contextual ads. No ad tracking will be done on this user.

+(void)belowConsentAge:(BOOL)isBelowConsentAge;

Setting this to TRUE means the Tapjoy SDK will treat the user as if the "Limit Ad Tracking" switch in their settings is on. This means they will still see Tapjoy ads, but the ads will not be targeted based on user behavior, and the user’s ad behavior will not be tracked by Tapjoy.

12.1.0 (2018-10-11)

Note that as of April 2019, the web-based offerwall is no longer available. You can now get a direct link to the web-based Tapjoy offerwall, rather than having the user click on a special offer in the app-based offerwall. Note that to enable the web-based offerwall, you must make sure the ‘Show "More Rewards" banner’ checkbox is checked on your virtual currency screen, and you must have a sufficiently large number of daily users (>100). If you try to obtain the URL for the web-based offerwall when it is not enabled, the call will return an error. Here’s an example:

[Tapjoy getOfferwallURL:placementName completion:^(NSURL *url, NSDate *expires, NSError *error) {
  if (error) {
     // handle the error
    } 
  else {
     [self openURL:url]; //actually open the web-based offerwall in Safari browser 
    }
 }
];

You can also see an implementation in the TapjoyEasyApp that is in the SDK download folder. Pressing the "Show Offerwall in Safari" button gets the url, and then launches it in the Safari browser.

  • Removed all code that required special info.plist entries for app approval. As of this release, notes for NSMotionUsageDescription, NSAppleMusicUsageDescription, and NSPhotoLibraryUsageDescription are no longer required. Other usage description requirements were removed in earlier versions of the SDK, so there are no longer any explanatory info.plist entries required by including the Tapjoy SDK in your application.

Bug fixes:

  • Several bugs related to rotating the device while Tapjoy ads are showing have been addressed.
  • Fixed a bug where playing one Tapjoy ad immediately following another ad (using contentDidDisappear) would sometimes fail.
  • Removed the NSUserDefaults synchronize call, which caused a rare crash.

12.0.0 (2018-06-26)

This release is compatible with iOS 12 and Android 9 "Pie".

  • IAB Open Measurement SDK incorporated into Tapjoy SDK. Publishers do not need to take any additional actions or make any code changes.
  • Minimum supported iOS version is now iOS 8.
  • SDK support for programatic mediation is included in this SDK. Server and dashboard support for programmatic mediation will be released at a later date.
  • The "Get Direct Play Video Ad" button in the sample EasyApp has been fixed.
  • Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later with this version of the Tapjoy iOS SDK.

11.12.2 (2018-05-18)

This release contains features that help publishers comply with the General Data Protection Regulation (GDPR). Each platform (iOS, Android, Unity, AIR) has two new functions. Tapjoy is GDPR-compliant based on "legitimate interest," therefore the following functions are not mandatory. However, we offer these functions for those publishers who wish to pass consent information to Tapjoy. If the publisher implements these functions and the user does not consent, Tapjoy will serve non-interest based content to that user.

These functions can be called before the application calls the Tapjoy Connect function, and should be called before the application requests any content from Tapjoy:

A setUserConsent function that takes either "0″ (user does not consent), "1″ (user does consent) or a more detailed consent string. This more detailed string is the consent string is described in the Transparency and Consent Framework as supported by the IAB. An optional "subject to GDPR" flag that can be set to YES/TRUE (if the user is subject to GDPR rules) or NO/FALSE (if the user is not subject to GDPR rules). This function should only be called if the application has made its own determination as to whether GDPR is applicable to the user or not. If this function is not called, Tapjoy assumes the application has not made such a determination, and therefore Tapjoy makes its own determination of GDPR applicability.

GDPR FAQ

If a user does not consent or withdraws existing consent, will the Tapjoy SDK still send advertising identifiers to Tapjoy? Yes. The functions listed above are designed for interest-based advertising, and they send the user consent status for interest-based advertising to Tapjoy. Therefore, the status of the consent does not disable Tapjoy SDK from sending advertising identifier (IDFA for iOS or GAID for Android) at SDK initialization or during ad requests.

Tapjoy’s legal basis for compliance is ‘legitimate interest’. However, the publisher’s legal basis for compliance, and consequently their requirement for advertiser identifier collection, could be different than Tapjoy’s.

It is left to application to determine if the Tapjoy SDK should be initialized or not, depending on the application’s compliance need. For example, if an application’s legitimate basis for collection of advertising identifier is consent, and user has not consented, then the Tapjoy SDK should not be initialized for such users.

If a user from a country that is not covered by GDPR does not consent or withdraws consent, would Tapjoy limit advertising to non-interest-based ads for such a user? The Tapjoy SDK provides flexibility to handle different types applications, including applications that have no in-app method for determining whether the user is subject to GDPR or not.

Therefore, when an Application does not make any determination (i.e. the subjectToGDPR function is not called), Tapjoy servers determine whether the user is subject to GDPR. Then, Tapjoy honors the user’s consent preferences only for ad requests that Tapjoy determines are coming from GDPR-covered users.

If the intent is to allow users from any country to withdraw consent as if they were governed by GDPR, this can be done by calling the subjectToGDPR method with TRUE for all non-consenting users. In this case, Tapjoy’s servers will honor the content of the subjectToGDPR method call, and will not make its own determination as to whether or not the user is covered by GDPR. The publisher may also contact support@tapjoy.com and request that Tapjoy honor the consent preferences of all users of their application, regardless of whether they are covered by GDPR or not.

Added:
+(void)setUserConsent:(NSString*) value;
Example:
[Tapjoy setUserConsent:@"0″]; // user does not consent
+(void)subjectToGDPR:(BOOL) gdprApplicability;
Example:
[Tapjoy subjectToGDPR:NO];   // This user is not subject to GDPR
  • Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later with this version of the Tapjoy iOS SDK.

11.12.1 (2018-04-30)

  • Design update to app store end card experience
  • Design update to how instructions are displayed for certain types of offerwall offers
  • Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later with this version of the Tapjoy iOS SDK.

11.12.0 (2018-03-29)

  • Removed requirement for CoreLocation framework.
  • Removed deprecated "Tapjoy Platform Mediation" functionality. This was a specialized form of mediation that Tapjoy has not supported for almost a year. If you are still using platform mediation, you should not update to this version of the SDK, and we recommend switching to industry-standard adapter mediation. Regular adapter mediation functionality (such as video and interstitial mediation provided by Mopub, ironSource, Fyber, Appodeal, and other mediators) is unaffected by this change.

Bug fixes:

  • Fixed some bugs involving video freezing when interrupted by headphone unplug, Siri, or alert pop-up.
  • Fixed infrequent crash involving UIColor colorFromHexString.
  • Fixed infrequent issue where audio from a Tapjoy video could play for a few seconds after an app is restored from the background.