Changelog

14.1.1 (2024-10-15)

  • Fixed a bug where the 'AppLaunch' placement would not get called after connect.

14.1.0 (2024-10-01)

  • Fixed issue where notch/camera/status bar would obscure UI on Android 15.
  • Fixed ANR’s caused by TJEventOptimiser
  • Updated Gradle Plugin to 8.6.1.
  • Updated EasyApp dependencies.
  • Updated EasyApp to use AAR.
  • Deprecated PPE.
  • Updated play-services-ads-identifier to 18.1.0.
  • Updated play-services-appset to 16.1.0.
  • Fixed occasional crash when Offerwall Discover was enabled via the Plugin checkbox.
  • [C++] added support for 16k page files.

Known Issues

  • Contains a bug which prevents the 'AppLaunch' placement from being called automatically after connect.
  • Please update to 14.1.1 which contains a fix for this issue.

14.0.1 (2024-07-16)

  • Version bump to match iOS.

Known Issues

  • Contains a bug which prevents the 'AppLaunch' placement from being called automatically after connect.
  • Please update to 14.1.1 which contains a fix for this issue.

14.0.0 (2024-07-01)

  • Fixed Offerwall sometimes not opening on Android 8.0 devices.
  • Added ability to clear User values.
  • Added User Level getter Tapjoy.getUserLevel().
  • Added UserId getter Tapjoy.getUserId().
  • Removed DISABLE_ANDROID_ID_AS_ANALYTICS_ID connect flag.
  • Removed deprecated push notifications interface.
  • Removed deprecated limitedConnect and 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 store_name connect flag.
  • Removed deprecated setUserId interface.
  • Removed deprecated connectFailure callback.
  • Removed TJConnectActivity.
  • Deprecated setGLSurfaceView. This method no longer does anything.
  • Deprecated setActivity. This menthod no longer does anything.

Known Issues

  • Contains a bug which prevents the 'AppLaunch' placement from being called automatically after connect.
  • Please update to 14.1.1 which contains a fix for this issue.

13.4.1 (2024-03-19)

  • Version bump to match iOS.

13.4.0 (2024-03-04)

  • Added connectWarning callback.
  • Added Kotlin sample app
  • Added kotlin-stdlib dependency to SDK
  • Updated to Java 11 (native only).
  • Removed push notifications.
  • Removed install referrer.

13.3.0 (2023-11-30)

  • Tapjoy.connect now fails immediately for the API level 23 or lower. MinSdk remains at API 21 for compilation.
  • Deprecated 'DISABLE_ANDROID_ID_AS_ANALYTICS_ID' connect flag.
  • 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)

  • Version bump to match iOS.

13.2.0 (2023-09-27)

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

13.1.2 (2023-07-14)

  • Fixed crash relating to PrivacyPolicy values.
  • Bug fixes.

13.1.1 (2023-06-30)

  • Fixed potential crash on connect relating to setting userId.

13.1.0 (2023-06-28)

  • Gradle updated to 7.5.
  • Updated Target API to 33.
  • Added error messages for Tapjoy-Managed currency callbacks.
  • Fixed NullPointerException being thrown.
  • Fixed onContentDismiss firing twice when requestContent is called within onContentDismiss.
  • Updated privacy policy interface.
  • Added privacy policy settings to EasyApp UI.
  • Fixed crash after watching a video on Android 6 and 7.
  • Fixed placement crash CalledFromWrongThreadException.

13.0.1 (2023-04-18)

  • Bug fix.

13.0.0 (2023-04-06)

  • New 'test device id' available via logcat.
  • Improved EasyApp.
  • Removed deprecated privacy interfaces removed - use TJPrivacyPolicy instead.
  • Removed deprecated display multiplier interface.
  • Removed deprecated AppDataVersion interface.
  • Fixed transparent status bar bug.
  • Fixed webview memory leak.
  • Other bug fixes and performance improvements.

12.11.1 (2022-12-01)

  • Fixes EasyApp issue with Android Studio Dolphin.
  • Updated EasyApp gradle version.
  • Performance improvements.

12.11.0 (2022-10-07)

  • Fixed a bug where the advertisingID would not be fetched if optOutAdvertisingID was called before Connect.
  • Removed JCenter and replaced it with MavenCentral where appropriate.
  • Update to target API 32.

12.10.0 (2022-05-03)

  • setUserID method has been deprecated in favour of setUserId(id, listener).
  • Support for push notifications on Android 12.
  • Removed push to earn support from the SDK.
  • Added support to enable/disable Android advertising_id parameter usage in network requests.

12.9.1 (2022-03-01)

  • SDK uses PendingIntent FLAG_IMMUTABLE for Android 12 and above. This resolves a potential push notification related crash on Android 12 devices and a Play Store warning.
  • Push notifications on Android 12 devices are not supported yet.
  • Removed the setGcmSender API.
  • Updated play-services-ads dependency to 18.0.0.
  • Removed strict version requirement for play-services-ads.

12.9.0 (2022-01-13)

  • Updated play-services-ads dependency to 17.1.0 (minimum supported version is 15.0.0). Version 17.1.0 includes the AD_ID permission which should be removed for apps in the Google Play Families Program.
  • Additional parameters as part of SDK requests. Refer to what information is sent to Tapjoy.
  • The SDK no longer collects MAC addresses.
  • Added android:exported attribute to launch activity in EasyApp to support API 31.
  • Built with API 31 and AndroidX.

12.8.1 (2021-05-25)

  • Updated the EasyApp sample application project (targets API 30 and Play Services dependency has been updated to 17.0.0)
  • play-services-ads-identifier:17.0.0 is now a maven dependency for the SDK
  • SDK now built with Android API 30
  • 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)

12.7.1 (2020-11-02)

  • Migrated InstallReferrer API
  • Fix duplicate onContentDismiss callback

12.7.0 (2020-09-16)

12.6.1 (2020-07-09)

  • Refactoring of some code for Tapjoy’s ad unit lifecycle states

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)

  • Removal of legacy functionality related to custom protocol for install attribution
  • Bug fixes

12.4.1 (2020-01-07)

  • Removal of legacy functionality related to custom protocol for install attribution
  • Video UI change.
  • Bug Fixes

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)

  • Updated IAB Open Measurement SDK

12.3.3 (2019-09-20)

  • Removed MOAT SDK

12.3.2 (2019-09-16)

  • The DISABLE_ANDROID_ID_AS_ANALYTICS_ID connect flag is now on by default
  • Bug fixes

12.3.1 (2019-06-06)

  • Additional video performance enhancements

12.3.0 (2019-05-28)

  • Video performance enhancements
  • Added onClick callback to TJPlacementListener. Note that this callback will not actually be called until there is back-end server support for it. We expect this to start around mid-June 2019.
public interface TJPlacementListener {
    public void onClick(TJPlacement placement);
}
  • Bug Fixes:
  • Unnecessary ACCESS_WIFI_STATE permission removed from .aar.

12.2.1 (2019-03-14)

  • Tapjoy is changing the way it uses persistent IDs, such as the Android ID. In general, Tapjoy is using these persistent IDs less. These changes will be transparent to most publishers and not require any code changes. Specifically:
    • For advertising, Tapjoy’s SDK will try to use the Advertising ID if available. Older versions of Tapjoy’s SDK would pass the Android ID if the advertising ID and mac address (if permitted) was unavailable. As of SDK 12.2.1, Tapjoy’s SDK no longer passes Android ID or mac address for advertising purposes, even if the Advertising ID is unavailable.
      • If a publisher wishes to send Android ID for advertising purposes when Advertising ID is not available, they may use the ALLOW_LEGACY_ID_FALLBACK connect flag to override default SDK behavior.
      • If a publisher wishes to send mac address for advertising purposes when Advertising ID is not available, they may use the same connect flag and must also include the ACCESS_WIFI_STATE permission in their manifest.
    • For analytics, Tapjoy’s SDK will still send Android ID unless the publisher specifically opts out using the DISABLE_ANDROID_ID_AS_ANALYTICS_ID connect flag.
    • For analytics, Tapjoy’s SDK no longer uses the mac address.
    • If a publisher is using Tapjoy Managed Currency, and is not setting a publisher user ID, there is a risk that those users who do not have an Advertising ID may lose their currency balance if the Android ID is no longer sent. For publishers using Tapjoy Managed Currency and who do not set a publisher user ID, we recommend that upon updating to 12.2.1, they use the ALLOW_LEGACY_ID_FALLBACK connect flag to ensure that some ID is sent so their users do not lose their currency balances. We also recommend that they begin setting a publisher user ID, so that they are no longer depending on Android ID to track user currency balances.
    • The DISABLE_PERSISTENT_IDS connect flag is deprecated, as the SDK’s default behavior is to not use persistent ID’s for advertising purposes.
  • Removed unused code, so SDK is about 10% smaller than previous version. (For more information, see FAQ entry on SDK size.)
  • The following Android activities are no longer necessary:
<activity android:name="com.tapjoy.mraid.view.ActionHandler"android:configChanges="orientation|keyboardHidden|screenSize" />
<activity android:name="com.tapjoy.mraid.view.Browser"android:configChanges="orientation|keyboardHidden|screenSize" />

Bug Fixes:

  • Fix for an infrequent "Fatal Exception: java.lang.RuntimeException: Package manager has died" crash
  • Fix for crash when SDK key is null
  • Fix for java.util.ConcurrentModificationException which was caused by insufficient thread-safe mechanism used in AppMonitor.getVisibleActivity() method

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.

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.

12.1.0 (2018-10-11)

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

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

12.0.0 (2018-06-26)

This release is compatible with 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 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

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:
public static void setUserConsent(String value);
Example:
Tapjoy.setUserConsent("1"); // user does consent
public static void subjectToGDPR(boolean gdprApplicable);
Example:
Tapjoy.subjectToGDPR(true); // This user is subject to GDP

11.12.1 (2018-04-30)

  • Internal changes and fixes only, no new features

11.12.0 (2018-03-29)

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

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