Table of Contents
- 1 Download the SDK
- 2 SDK Integration Instructions:
- 3 Release Notes:
- 3.1 SDK 12.2.0:
- 3.2 SDK 12.1.0:
- 3.3 SDK 12.0.0:
- 3.4 SDK 11.12.2 (GDPR release):
- 3.4.1 GDPR FAQ
- 3.4.1.1 If a user does not consent or withdraws existing consent, will the Tapjoy SDK still send advertising identifiers to Tapjoy?
- 3.4.1.2 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?
- 3.4.2 iOS
- 3.4.3 Android
- 3.4.4 Unity
- 3.4.1 GDPR FAQ
- 3.5 SDK 11.12.1:
- 3.6 SDK 11.12.0:
- 3.7 SDK 11.11.1:
- 3.8 SDK 11.11.0:
- 3.9 SDK 11.10.2:
- 3.10 SDK 11.10.1:
- 3.11 SDK 11.10.0:
- 3.12 SDK 11.9.1:
- 3.13 SDK 11.9.0:
- 3.14 SDK 11.8.2:
- 3.15 SDK 11.8.1:
- 3.16 SDK 11.8.0:
- 3.17 SDK 11.7.0:
- 3.18 SDK 11.6.0:
- 3.19 SDK 11.5.1:
- 3.20 SDK 11.5.0:
- 3.21 SDK 11.4 & 11.4.1:
- 3.22 SDK 11.3:
- 3.23 SDK 11.2.2:
- 3.24 SDK 11.2.1:
- 3.25 SDK 11.2.0:
- 3.26 SDK 11.1:
- 3.27 Legacy Documentation
Download the SDK
- You can download our SDK from the Download Page.
SDK Integration Instructions:
Dashboard Integration Guide
NEW: The Tapjoy Dashboard now has a built-in Integration Guide that will walk you through the steps of a Tapjoy integration. You can still use this Getting Started Guide document as a reference if you wish. You can go directly to the Integration Guide for your most recent app, or you can go to the Tapjoy Dashboard, select your app, go to the "Support" menu in the upper-right, and click "How to Integrate".
Manual Integration
If you want to do the integration purely from the documentation (or you are using Adobe AIR, for which we do not have a Dashboard Integration Guide), you may find the docs for each platform here:
Note: To find your Tapjoy SDK Key please see this link.
PPE (Pay Per Engagement) Integrations
If you are an advertiser running a PPE campaign, you must first do a standard advertiser integration (iOS, Android, Unity, AIR), and then follow these additional instructions to instrument the action on which you wish the engagement to trigger.
Release Notes:
SDK 12.2.0:
Released November 13, 2018.
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.
iOS
- +(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.
Android
- public static void belowConsentAge(boolean isBelowConsentAge);
- Setting this to TRUE means the Tapjoy SDK will treat the user as if if the "Opt Out of Ads Personalization" 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.
- Bug Fixes:
- Fix for an infrequent "Fatal Exception: java.lang.NullPointerException" crash.
Unity
- public static void BelowConsentAge(bool isBelowConsentAge);
- Setting this to TRUE means the Tapjoy SDK will treat the user as if if the "Opt Out of Ads Personalization" switch (Android) "Limit Ad Tracking" switch (iOS) 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.
- Bug Fixes inherited from the iOS and Android versions
AIR
- public static function belowConsentAge(isBelowConsentAge:Boolean):void
- Setting this to TRUE means the Tapjoy SDK will treat the user as if if the "Opt Out of Ads Personalization" switch (Android) "Limit Ad Tracking" switch (iOS) 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.
- Bug fixes inherited from the iOS and Android versions
SDK 12.1.0:
Released October 11, 2018.
iOS
- 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.
Android
- SDK now supports Firebase Cloud Messaging (FCM). Apps using the older Google Cloud Messaging (GCM) system should update to FCM, as this will eventually become an Android requirement. Instructions for using FCM with Tapjoy are in the Android Getting Started Guide for Publishers.
- Bug fixes:
- Replaced several instances of SharedPreferences.commit with SharedPreferences.apply to address a rare crash issue.
- Orientation issue fix where ad content that had only one orientation (portrait or landscape) could be forced out of that orientation when device was rotated after playback started.
- UI of error pop-up updated.
Unity
- SDK now supports Firebase Cloud Messaging (FCM). Apps using the older Google Cloud Messaging (GCM) system should update to FCM, as this will eventually become an Android requirement. Instructions for using FCM with Tapjoy are in the Unity Getting Started Guide For Publishers.
- Bug Fixes:
- Tapjoy’s Unity plugin now respects the Unity project rotation settings on iOS.
- Bug fixes inherited from the iOS and Android versions
AIR
- Note that the Tapjoy AIR plugin does not support push notifications, so the FCM updates do not apply.
- Bug fixes inherited from the iOS and Android versions.
SDK 12.0.0:
Released June 26, 2018.
This release is compatible with iOS 12 and Android 9 "Pie".
iOS
- 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.
Android
- IAB Open Measurement SDK incorporated into Tapjoy SDK. Publishers do not need to take any additional actions or make any code changes.
- Minimum supported Android version is now API Level 14/Android 4.0/Ice Cream Sandwich.
- SDK support for programatic mediation is included in this SDK. Server and dashboard support for programmatic mediation will be released at a later date.
- Fix for push notifications when targeting Android O devices
Unity
- All fixes and features from the iOS and Android SDK updates
- Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later for iOS builds with this version.
AIR
- All fixes and features from the iOS and Android SDK updates
- Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later for iOS builds with this version.
SDK 11.12.2 (GDPR release):
Released May 18, 2018.
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.
Implementation details for these functions on each platform are described in the platform sections below.
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.
iOS
- Added:
- +(void)setUserConsent:(NSString*) value;
- Example:
[Tapjoy setUserConsent:@"0″]; // user does not consent
- Example:
- +(void)subjectToGDPR:(BOOL) gdprApplicability;
- Example:
[Tapjoy subjectToGDPR:NO]; // This user is not subject to GDPR
- Example:
- +(void)setUserConsent:(NSString*) value;
- 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.
Android
- Added:
- public static void setUserConsent(String value);
- Example:
Tapjoy.setUserConsent("1"); // user does consent
- Example:
- public static void subjectToGDPR(boolean gdprApplicable);
- Example:
Tapjoy.subjectToGDPR(true); // This user is subject to GDP
- Example:
- public static void setUserConsent(String value);
Unity
- Added:
- public static void SetUserConsent(string value);
- Example: //User consent string generated according to consent string guidelines Tapjoy.SetUserConsent("BOEFEAyOEFEAyAHABDENAI4AAAB9vABAASA");
- public static void SubjectToGDPR(bool gdprApplicable);
- Example:Tapjoy.SubjectToGDPR(true); // This user is subject to GDP
- Note that in Unity, if you want the GDPR settings to affect the initial Tapjoy Connect call, you should turn autoconnect OFF in the Tapjoy UI and make the Tapjoy Connect call manually in your own code. Otherwise, the Tapjoy Connect call will be made before the GDPR settings can take effect.
- public static void SetUserConsent(string value);
- Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later for iOS builds with this version.
AIR
- Added:
- public static function setUserConsent(consent:String):void
- Example: //User consent string generated according to consent string guidelines TapjoyAIR.setUserConsent("BOEFEAyOEFEAyAHABDENAI4AAAB9vABAASA");
- public static function subjectToGDPR(enable:Boolean):void
- Example:TapjoyAIR.subjectToGDPR(true); // This user is subject to GDPR
- public static function setUserConsent(consent:String):void
- Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later for iOS builds with this version.
SDK 11.12.1:
Released April 30, 2018.
iOS
- 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.
Android
- Internal changes and fixes only, no new features
Unity
- All fixes and features from the iOS and Android SDK updates
- Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later for iOS builds with this version.
AIR
- All fixes and features from the iOS and Android SDK updates
- Note that due to recent updates in bitcode, you will need to use Xcode 9.3 or later for iOS builds with this version.
SDK 11.12.0:
Released March 29, 2018.
iOS
- 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.
Android
- Tapjoy’s SDK will no longer trigger the following permissions:
- ACCESS_FINE_LOCATION
- ACCESS_COARSE_LOCATION
- WRITE_EXTERNAL_STORAGE
- 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:
- Removed an incorrect error message when Tapjoy video content played from cache and there is no network connection.
- Fixed an issue where after returning from Tapjoy content, the offerwall or application would be shown in the incorrect orientation.
Unity
- Removed an incorrect "Error while downloading Asset Bundle" error message when building for Unity Android.
- All fixes and features from the iOS and Android SDK updates
AIR
- All fixes and features from the iOS and Android SDK updates
SDK 11.11.1:
Released November 8, 2017.
iOS
- The setAppDataVersion method has been deprecated.
- Removed App Transport Security (ATS) settings from EasyApp info.plist, as these are no longer required.
- Added documentation for the EasyApp Tapjoy sample application included in the SDK.
- Bug fixes:
- Fixed a crash when placement was called with placement name = NIL.
- Fixed duplicate observers crash when "All Exceptions" are enabled in Xcode.
Android
- Tapjoy SDK no longer collects IMEI, which removes the need for the READ_PHONE_STATE permission.
- The setAppDataVersion method has been deprecated.
- Added documentation for the EasyApp Tapjoy sample application included in the SDK.
- Bug Fixes:
- Fixed an infrequent crash that happened when app tries to show the same content request multiple times.
- Fixed an issue where content cache could get corrupted, leading to video playback errors.
Unity
- Added the GetUserTags API, which exists in iOS and Android but had been missing from the Unity plugin.
- Added documentation for the EasyApp Tapjoy sample application included in the SDK.
- All fixes and features from the iOS and Android SDK updates
AIR
- All fixes and features from the iOS and Android SDK updates
SDK 11.11.0:
Released June 19, 2017.
iOS
- Changed video player from HTML 5 player to native video player.
- ATS (App Transport Security) settings are no longer required in the info.plist. The SDK no longer caches video using localhost, so these ATS exceptions are no longer required.
- WebKit.framework is now required.
- SDK size reduction: The arm64 slice size has been reduced by 16% to 1.01MB (vs. 1.2MB in 11.10.2). The total SDK size has been reduced by 20% to 1.89MB (vs. 2.35MB in 11.10.2).
- Removed a legacy API: enablePaidAppWithActionID
- Bug fixes:
- Fixed a number of infrequent crashes that happened on ARM64 devices running iOS 8.
Android
- Removed a legacy API: enablePaidAppWithActionID
- Bug Fixes:
- This version of the Android SDK avoids use of Timer class, which on some Android Lollipop (5.x) devices results in significant memory usage.
- Fixed an infrequent crash where TJAdUnit$a.onPageFinished caused a NullPointerException.
Unity
- All fixes and features from the iOS and Android SDK updates
AIR
- All fixes and features from the iOS and Android SDK updates
SDK 11.10.2:
Released May 17, 2017. This is a minor bug-fix release. There is no new functionality.
iOS
- Bug fixes:
- Fixed a bug where UnityAds SDK 2.1.0 conflicted with Tapjoy’s SDK, resulting in distorted or obscured Tapjoy content.
Android
- Bug Fixes:
- Fixed an infrequent crash in onActivityStart when activity intent is null.
- Improved ability for SDK to switch to streaming video playback if cached version fails.
Unity
- Bug Fixes:
- Fixed an Android session tracking bug.
- All fixes and features from the iOS and Android SDK updates
AIR
- Bug Fixes:
- Fixed an Android session tracking bug.
All fixes and features from the iOS and Android SDK updates
SDK 11.10.1:
Released April 13, 2017. This is a minor bug-fix release. There is no new functionality.
iOS
- Bug fixes:
- Small memory leak related to webview fixed.
- Bug that was causing crashes during Xcode unit tests fixed.
Android
- Bug Fixes:
- Fixed two infrequent crashes related to TJAdUnitActivity.
- Fixed an infrequent bug where closing the offerwall resulted in closing the main application.
Unity
- Google Play Services has been removed from the distributed Tapjoy .unitypackage. (Most apps already include Google Play Services for other reasons.)
- All fixes and features from the iOS and Android SDK updates
AIR
- All fixes and features from the iOS and Android SDK updates
SDK 11.10.0:
Released February 23, 2017
iOS
- Support for animated .gif files in Native to Earn.
- Bug fixes:
- Offerwall bug where users could scroll non-scrollable parts of the interface fixed.
- Timeout bug with multiple placement calls fixed.
- Bug where rotation prevented a Native to Earn button from disappearing after the allotted time fixed.
Android
- Support for animated .gif files in Native to Earn.
- EasyApp sample application now supports gradle
- SDK 11.10.0 method count reduced by about 500 (a 9% reduction) compared to SDK 11.9.1.
- Bug Fixes:
- Native to Earn not displaying after a context change fixed.
- Issue with some videos getting stuck in infinite loop in low memory situations fixed.
Unity
- All fixes and features from the iOS and Android SDK updates
- Bug Fixes:
- Scope issue where Unity Android placement declarations declared locally functioned only intermittently fixed.
- Native to Earn not showing in the AppLaunch placement fixed.
AIR
- All fixes and features from the iOS and Android SDK updates
SDK 11.9.1:
Released December 15, 2016
iOS
- Updated the sample "EasyApp" to the latest recommended ATS settings for iOS 10
- Fixed bug where debug mode could not be turned off.
- Fixed several infrequent crashes:
- objc_msgSend() selector name: trackTimedOutContentRequested:
contentReady: - [TJWebViewJavascriptBridge _flushMessageQueue]
- crash related to redirecting the user to the app store when the application does not support portrait orientation
- NSInvalidArgumentException crash in [TJCUtil genericParameters]
- objc_msgSend() selector name: trackTimedOutContentRequested:
Android
- No changes except for incrementing the version number to 11.9.1
Unity
- No longer requires EventKit or EventKitUI frameworks for the iOS build
- Fixed a performance issue in TapjoyComponent where Unity garbage collection (cleaning up unused data in memory) was being triggered more frequently than necessary
- Fixed an issue where the Google Play Services library was marked for inclusion in iOS builds. If you are updating and are using Unity 5.4 or higher, you will see a "Fix" button that will allow you to correct this error. New integrations can simply use the 11.9.1 plugin and do not need the "Fix" button and will not see it.
- All fixes and features from the iOS and Android SDK updates
AIR
- All fixes and features from the iOS and Android SDK updates
SDK 11.9.0:
Released November 14, 2016
iOS
- CoreLocation.framework is now optional, for those publishers who do not wish to include it in their application.
- MessageUI.framework is no longer required.
- Starting with iOS 10, Apple is asking app developers to justify accessing certain frameworks with a text string in the info.plist file. This string is shown to the user when the app asks for access to this functionality (e.g. location, accelerometer, etc.). This requirement extends to frameworks used by 3rd-party SDKs, such as Tapjoy. For your convenience, we have provided a table of .plist keys and strings to use for the frameworks that Tapjoy uses.
- Fixed a bug where marketing message content appeared without dimming the background.
Android
- Fixed an infrequent crash: java.lang.
NullPointerException: Attempt to invoke virtual method ‘byte[] java.lang.String.getBytes()’ on a null object reference - There is a new factory pattern API for creating placement objects. The old constructor still works.
Unity
- Unity Android now has a push opt-out API.
- All fixes and features from the iOS and Android SDK updates
AIR
- Google Play Services (GPS) is now no loger bundled in the Tapjoy ANE file. It is provided in a separate ANE file.
- Both ANE files will need to be used ("linked") when building to Android via Flash builder.
- If another ANE file you are linking already includes Google Play Services, you do not need to include the Google Play Services ANE provided by Tapjoy. Indeed, doing so will result in a duplication error.
- You do not need the Google Play Services ANE file when building to iOS.
- All fixes and features from the iOS and Android SDK updates
SDK 11.8.2:
Released October 6, 2016
iOS
- Fixed bugs involving how the Push-to-Earn feature interacted with the video and offerwall content units.
Android
- Made the GET_ACCOUNTS permission optional for API level 16 and higher. You will still need the GET_ACCOUNTS permission to use push notifications on API level 15 and earlier.
Unity
- All fixes and features from the iOS and Android SDK updates
AIR
- All fixes and features from the iOS and Android SDK updates
SDK 11.8.1:
iOS
Released September 14, 2016
- iOS SDK no longer requires EventKit and EventKitUI frameworks. These can be removed if not needed by other parts of your app. Removing these frameworks can solve the App Store rejection associated with NSCalendarsUsageDescription. For more information on this, and how to get around it for versions of Tapjoy prior to 11.8.1, see this article.
- Fixed a memory leak.
- Added setDefaultViewController function for Push to Earn and default placements.
- Fixed a rare ad rotation issue found with one mediation partner.
Android
Released September 19, 2016
- Decreased SDK size by 372Kb (9% decrease from previous version).
Unity
Released September 19, 2016
- All fixes and features from the iOS and Android SDK updates
AIR
Released September 19, 2016
- All fixes and features from the iOS and Android SDK updates
SDK 11.8.0:
- Released August 29, 2016
iOS
- Update to handle the new iOS 10 "Limit Ad Tracking" behavior. If the user enables Limit Ad Tracking, the IDFA returned by iOS is all zeroes. More information on our iOS 10 changes page. We also created a Tapjoy iOS 10 Upgrade Checklist to help you ensure that your Tapjoy app is working correctly with iOS 10.
- Made an update related to the UIPasteBoard change in iOS 10. This fixes an an error with the TJC_CURRENCY_EARNED_NOTIFICATION notification on iOS 10 for Tapjoy-Managed currencies. More information on our iOS 10 changes page.
- Marketing Messages (such as Announcement and IAP Promotion) now properly respect the iOS UIViewControllerBasedStatusBarAppearance setting.
- Fixed a rare crash seen when connecting with poor network conditions.
- Namespaced some internal advertising code to help avoid conflicts.
Android
- Fixed a bug that would on occasion cause a startup crash.
- Fixed a compatibility issue with Cocos2d-x running on Android N.
Unity
- Fixed a build error on Unity 4.
- Changing between iOS and Android on Unity 4 now requires an extra step. After changing platforms go to Window > Tapjoy and press the Fix button by the "Some platform-specific assets should be rearranged" warning
- All of the fixes to Android and iOS are included.
AIR
- All of the fixes to Android and iOS are included.
SDK 11.7.0:
- Released July 12, 2016.
- Mediation adapters are no longer included as part of the SDK. This has no effect on those using adapter mediation, since those adapters are downloaded from the mediation partner (e.g. Fyber, ironSource). For those using platform mediation, you will be downloading adapters from Bintray rather than getting them from the SDK zip file. (For an explanation of the difference between adapter and platform mediation, please see our mediation documentation front page.)
- You can now add multiple video listeners/delegates to Tapjoy placements on all platforms. This helps resolve some mediation situations where the adapter and the application are both trying to listen for video events (e.g. start, error, complete) and one of them consumes the callback and the other does not get it.
- SetUserID now has success and failure delegates so the app can take appropriate action if SetUserID should fail.
iOS
- You can now set a custom mediation timeout (in seconds) with a Tapjoy Connect Flag (TJC_MEDIATION_TIMEOUT_
INTERVAL). - Fixed crash ("-[_NSInlineData lowercaseString]: unrecognized selector sent to instance") related to conflict with 3rd-party library.
- Social and Twitter Frameworks are no longer required with 11.7.0.
Android
- SDK is now ~20% smaller: The 11.7.0 Android SDK is 754 Kb; the 11.6.0 Android SDK was 977 Kb.
- SDK Method count reduced by about 20%: The 11.7.0 Android SDK method count is 5525; the 11.6.0 Android SDK method count was 6826. Note that about 25% of the methods in the Tapjoy SDK are referenced methods, and 75% are defined methods. This means that up to 25% of the methods in the Tapjoy SDK might not actually add to your total method count if they are already used elsewhere in your app.
- You can now set a custom mediation timeout (in seconds) with a Tapjoy Connect Flag.
- Fixed crash ("java.lang.
NullPointerException: Attempt to get length of null array").
Unity
- Experimental support for IL2CPP on Unity Android.
AIR
- No additional features (except what is inherited from iOS and Android SDKs).
SDK 11.6.0:
- Released April 26, 2016
- New Feature (iOS, Android, Unity): Fyber Platform Mediation. Take advantage of Fyber Mediation with the power of the Tapjoy Platform.
- New Feature (all platforms): Default Placements BETA. If you are creating a new application, two placements will be created for you automatically: AppLaunch and InsufficientCurrency. These placements are triggered by the Tapjoy SDK automatically, without code work required from the publisher. (InsufficientCurrency will only trigger if you are using Tapjoy Managed Currency, otherwise Tapjoy’s SDK can’t tell when the user has insufficient currency.) If you wish to be included in the beta, please contact your Tapjoy account manager or support@tapjoy.com.
iOS
- Bug fix: Video content now responds correctly when showContent is called with no network connection.
Android
- Bug fix: Improved asset caching,
- Bug fix: Fixed problem where creating a placement before connect succeeds results in a bad request URL.
Unity
- Note that the file structure of the Tapjoy Unity plugin has changed. If you are upgrading an older, pre-11.6.0 version of the plugin, you will have to delete some files. We have a doc explaining which files need to be deleted. New Tapjoy Unity Plugin integrations are unaffected by this.
- New Editor window UI: Added some more functionality to monitor file changes, added "?" link to documentation.
- Bug fixes inherited from the iOS and Android SDK updates
AIR
- Bug fixes inherited from the iOS and Android SDK updates
SDK 11.5.1:
- Released March 23, 2016.
- The only change from 11.5.0 (March 7 2016) to 11.5.1 is the inclusion of the Fyber Adapter in the Tapjoy SDK. If you are using Fyber Adapter Mediation and wish to use Tapjoy features in 11.5, such as Native to Earn and User Tags, you will have to use Tapjoy SDK 11.5.1 and follow our special Fyber Adapter Integration instructions. The reason for this is that the Fyber Adapter package available on the Fyber website incorporates the 11.3.0 version of the Tapjoy SDK.
- For those not using Fyber Adapter Mediation, there is no reason to upgrade from 11.5.0 to 11.5.1.
SDK 11.5.0:
- Released March 7, 2016.
- Added support for the Native to Earn feature. This feature allows you to use a button that matches your native interface to drive your users to Tapjoy’s various monetization products. [Note: The Tapjoy dashboard UI necessary for this feature will be released March 9 2016, Pacific Time.]
- Added support for the User Tags feature. You can now use SDK calls to add tags to your users, and then target Tapjoy monetization content at users who have or don’t have specific tags. [Note: The Tapjoy dashboard UI necessary for this feature will be released the evening of March 7 2016, Pacific Time.]
SDK 11.4 & 11.4.1:
- Released February 8, 2016. Download here.
- Added support for Mediation:
- Fyber Adapter Mediation
- AerServ LTV Platform Mediation
- Mopub LTV Platform Mediation (Mobpub Adapter Mediation continues to be supported as well.)
- AerServ Adapter Mediation
- Deprecated Currency Display Multiplier SDK call (e.g. setCurrencyMultiplier:). This call still functions, but it will be removed in future versions of the SDK. If you wish to individualize the amount of currency users get for various offers, we recommend using the Personalized Currency Sale feature on the Tapjoy Dashboard instead:
- The initial release of 11.4.0 had an Android bug related to push notifications. This bug has been corrected in the 11.4.1 release for Android, Unity, and AIR. This did not apply to the iOS version, so the latest iOS version remains 11.4.0 .
SDK 11.3:
- Released December 8, 2015. Download here.
Android
- Removed showOffers call. To display an OfferWall, publisher now must use the more powerful and flexible placements system. If you need to switch your application, please see our "Switching from showOffers to Placements" guide.
- Improved support for Android 6.0 "Marshmallow" (API level 23). Workarounds are no longer needed when supporting Marshmallow with Tapjoy SDK 11.3.
- OS required: The minimum OS required to support Tapjoy is now Android 2.3 "Gingerbread" (API level 9) or above. (For 11.2.2 this was Android 2.2 "Froyo" (API level 8).
- Minor bug fixes:
- Fixed: Bug where on some kinds of offers, user had to tap the close button twice.
- Fixed: Edge-case crash on Android 5.x "Lollipop" where WebView updates at the same time the SDK attempts to show content.
iOS
- Removed showOffers call. To display an OfferWall, publisher now must use the more powerful and flexible placements system. If you need to switch your application, please see our "Switching from showOffers to Placements" guide.
- Support for IPv6. Starting in early 2016, Apple will require all apps submitted to the App Store to support IPv6.
- An issue with Bitcode support was fixed. All submissions to the iTunes App Store that use bitcode should update to the 11.3 version of the SDK.
- Issue where the status of the "Don’t Show Today" button was inherited by IAP Promotion content units from content units above it in the placement waterfall was fixed.
Unity
- Removed showOffers call. To display an OfferWall, publisher now must use the more powerful and flexible placements system. If you need to switch your application, please see our "Switching from showOffers to Placements" guide.
- All Android and iOS changes mentioned above.
Air
- Removed showOffers call. To display an OfferWall, publisher now must use the more powerful and flexible placements system. If you need to switch your application, please see our "Switching from showOffers to Placements" guide.
- Minimum AIR version is now 18.
- All Android and iOS changes mentioned above.
SDK 11.2.2:
- Released October 8, 2015. Download here.
Android
- Fixed issue where Tapjoy.setUserID was, in certain rare conditions, not getting set correctly. This resulted in users not getting rewarded. Now, this call will work regardless of whether the Connect Call has succeeded yet or not.
- Fixed two infrequent crashes:
-
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.tapjoy.mraid.view.BasicWebView.setBackgroundColor(int)' on a null object reference at com.tapjoy.TJAdUnit$2.run(SourceFile:390)
-
java.lang.NullPointerException at com.tapjoy.TJAdUnit$2.run(SourceFile:390)
-
iOS
- Due to iOS 9 Bitcode support (see below), Tapojoy iOS SDK 11.2.2 no longer supports iOS 5. Newer versions of the iOS SDK will also not support iOS 5. (Less than 0.04% of Tapjoy users are on iOS 5, and this number is decreasing.
- Bitcode support (see Apple’s documentation). Bitcode optimizes the installation of iOS by tailoring app delivery to the user’s particular device.
- Fixed "Unexpected CFBundleExecutable Key" error that happened on app submission.
- Automatic retry of the Connect Call: If the Connect Call fails, the SDK will now automatically retry the Connect Call.
Unity
- All the changes listed for iOS and Android above.
- Manual Connect Call: By default, the Tapjoy SDK will attempt its Connect Call when your Unity application starts. If you wish, starting with SDK 11.2.2 you can override this and make the Connact Call manually.
AIR
- All the changes listed for iOS and Android above.
SDK 11.2.1:
- Released September 9, 2015. Download here.
- This update is to handle iOS 9 and changed "App Transport Security" requirements.
- See the document "Preparing for iOS 9" for more information.
SDK 11.2.0:
- Released August 18, 2015. Download here.
Dashboard
- Creating a test device is now easier: we now require only the advertising ID (iOS: IDFA, Android: GAID), instead of both the advertising ID and the Tapjoy device ID. If you previously set up a test device with only the Tapjoy device ID, please re-setup the device using the advertising ID.
- You can now select multiple cohorts in the Future Value Map
- You can now select multiple countries (up to 5) or referrers in the "Retention" section of the dashboard.
Android
-
- Added support for IAP receipt validation with a new API method.
- void Tapjoy.trackPurchase(String, String, String, String)
- IAP receipt validation is for the Google Play store only.
- If you do not include a receipt parameter, Tapjoy will assume that you did receipt validation on your own and will accept the purchase as valid.
- Improved connectivity to Tapjoy servers.
- Auto retry to connect
- Fixed support for targeting a content unit to be shown only to users who installed the app through a specific store
- Videos will now support both landscape left and landscape right orientations, rather than always playing in a fixed landscape orientation.
- Video performance improvements
- Added support for IAP receipt validation with a new API method.
- Introduced new TJAdUnitActivity to be added to the AndroidManifest.xml (be sure to include the < and > around the activity):
-
-
- activity android:name="com.tapjoy.TJAdUnitActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /
- Removed TJAdUnitView, TJCOffersWebView, and TapjoyVideoView Activity classes. These have been replaced by theTJAdUnitActivity described above.
- TapjoyVideoStatus.java renamed to TJVideoStatus.java. If your are referencing this in your TJVideoListener code, please make the necessary changes.
-
iOS
- Added support for IAP receipt validation.
- [Tapjoy trackPurchase:@"productIdentifier" currencyCode:@"USD" price:1.99 campaignId:@"CampaignID(can be nil)" transactionId:@"The iTunes Receipt Goes Here"];
- If you do not include a receipt parameter, Tapjoy will assume that you did receipt validation on your own and will accept the purchase as valid.
- Fixed the display size of the marketing messages (Announcement, Reward, IAP Promotion) on iPad.
- Video performance improvements
C++ API
- Added API methods to track IAP with receipt validation. The final parameter is the receipt.
- void Tapjoy::trackPurchaseInGooglePlayStore(const char*, const char*, const char*, const char*)
- void Tapjoy::trackPurchaseInAppleAppStore(const char*, const char*, double, const char*, const char*)
- On Android, IAP receipt validation is for the Google Play store only.
Unity
- Added support for IAP receipt validation with new API methods (the last parameter is where the receipt goes).
- void Tapjoy.TrackPurchaseInGooglePlayStore(string, string, string, string = null)
- void Tapjoy.TrackPurchaseInAppleAppStore(string, string, double, string, string = null)
- On Android, IAP receipt validation is for the Google Play store only.
- If you do not include a receipt parameter, Tapjoy will assume that you did receipt validation on your own and will accept the purchase as valid.
- All Android and iOS changes mentioned above.
- Android Manifest changes described in Android section.
- Fixed following API to work correctly:
- void Tapjoy.ShowDefaultEarnedCurrencyAlert()
AIR
- Added support for IAP receipt validation with new API methods. (The final parameter is the receipt)
- TapjoyAIR.trackPurchaseInGooglePlayStore(:String, :String, :String, :String):void
- TapjoyAIR.trackPurchaseInAppleAppStore(:String, :String, :Number, :String, :String):void
- On Android, IAP receipt validation is for the Google Play store only.
- If you do not include a receipt parameter, Tapjoy will assume that you did receipt validation on your own and will accept the purchase as valid.
- All Android and iOS changes mentioned above.
- Android Manifest changes described in Android section.
SDK 11.1:
- Released June 9, 2015.
Android
- Added support for the "No more today" option on marketing message content units.
- Added API methods to let users opt out of push notifications:
- boolean Tapjoy.isPushNotificationDisabled()
- void Tapjoy.setPushNotificationDisabled(boolean)
- Improved device location detection for content units.
- Fixed tracking for clicks on recurring push notifications.
C++ API
- Added API methods to let users opt out of push notifications:
- bool Tapjoy::isPushNotificationDisabled()
- void Tapjoy::setPushNotificationDisabled(bool)
- Fixed placement implementation in C++ API.
iOS
- Added support for the "No more today" option on marketing message content units.
Unity
- Added support for the "No more today" option on marketing message content units.
- Added Tapjoy.Connect method to C# API.
- With this API, users can try connect later, when initial connect was not successful
- Improved placement memory management.
- Fixed issue with placement reuse on iOS.
- Added Tapjoy.ActionComplete method to C# API. This is the API for use with PPA/PPE campaigns.
- (Android) Improved device location detection for content units.
- (Android) Fixed tracking for clicks on recurring push notifications.
- (iOS) Fixed issue with iOS post-build script which caused compatibility issues with other 3rd-party library post-build scripts.
AIR
- Added support for the "No more today" option on marketing message content units.
- (Android) Improved device location detection for content units.
- (Android) Fixed tracking for clicks on recurring push notifications.
- (iOS) Fixed duplicate iOS bundle in plugin issue.
SDK 11.0.3:
- Released April 2, 2015.
Android
- Reduced the DEX method count of library by half.
- Fixed the
TJPlacementListener.onContentDismiss
callback invocation. - Fixed video receiver not registered crash on rare devices
- Fixed user properties in requests for placement content.
iOS
- Fix issue where MM content could be shown more than once
- Fix initWithObjects:forKeys:count crash
Unity
- Supports Unity 5.
- Incorporates iOS and Android 11.0.3 fixes.
Air
- Incorporates iOS and Android 11.0.3 fixes.
SDK 11.0.2:
- Released March 2, 2015.
- Fixed an issue in iOS push that might prevent a user who had only opened the app a single time from receiving a push notification.
SDK 11.0.1:
- Released March 2, 2015.
- Adds powerful analytics to Tapjoy’s marketing and messaging capabilities
- If you are an existing Tapjoy SDK user updating to SDK 11, please see the appropriate Migration Guide (iOS, Android, Unity, AIR) as a number of important calls have been re-worked and the old "events" concept has been replaced by a "placements" concept.
Legacy Documentation
- If you are looking for documentation for older versions of the Tapjoy SDK, please see the legacy Tapjoy Documentation.
- For the old 5rocks product, see the 5rocks documentation.