Device Identifiers

Tapjoy conforms to both Google and Apple’s terms of service when it comes to tracking users for advertising purposes. Apple and Google have different ways of handling advertising IDs on their devices. iOS devices use Advertising Identifier, while Android uses the Google Advertiser ID.

1. iOS

When I submit my app to the Apple App Store Apple asks me if my app uses the Advertising Identifier (IDFA). How does Tapjoy use IDFA?

As a bit of background, IDFA allows publishers to know that a specific device is looking at an advertisement, and empowers publishers to deliver more targeted ads to that user. The tracking is anonymous, and does not provide the advertiser any personal identifying information. As you can see in the screen below the submission process includes check boxes to indicate whether their app will use IDFA in order to:

  • Serve Advertisements within the app
  • Attribute this app installation to a previously served advertisement
  • Attribute an action taken within this app to a previously served advertisement.


They also confirm that if you use third-party SDKs in your code, you are responsible for the behavior of that code.

Our SDK collects IDFA and strictly uses it for tracking conversions of the advertisements we serve, and our use of IDFA is in line with all three options in the submission process. In addition, Tapjoy’s SDK adheres to a user’s Limited Ad Tracking setting.

If you are a developer who is using Tapjoy SDK to monetize your app, check option #1.

If you are an app developer or advertiser who is using Tapjoy to drive installs and app engagement, you should check option #2 and #3.

When I try to submit my app to the app store, XCode shows me this error message:

“Improper advertising identifier [IDFA] usage. Your app contains the Advertising Identifier [IDFA] API but your app is not respecting the Limit Ad Tracking setting in iOS.”

How do I resolve this error?

Around April 26, 2014 Apple made some modifications to their automated code validation. This validation auto-scans an app’s code during the submission process. While we haven’t been able to find any documented changes from Apple on this, it appears the purpose of this adjustment is intended to validate that any app submission respects a user’s “Limited Ad Tracking” setting.

To be clear, Tapjoy has always respected the “Limited Ad Tracking” setting, and nothing in this regard has changed. Apple’s most recent change in their automated scan however, now looks for very specific function names and a very specific sequence of events in order to pass validation. In order to avoid confusion due to the resulting mismatch in naming convention, Tapjoy has renamed its “Limit Ad Tracking Setting” validation function.

2. Android

What is the Google Advertising ID?

As of August 1, 2014, Google will require all apps and updates submitted to the Play Store to use the Google Advertising ID (AID) in lieu of any other tracking id for advertising purposes. The AID comes with privacy controls that allow users to limit ad tracking and opt out of “interest based ads”. You can learn more about Google’s policies and AID at the Developer Program Policies page on Google’s website.

Can I disable the use of persistent IDs?

If you are using a self-managed currency, you can disable persistent IDs for advertising use in SDK versions 10.1.1 and above. Note that persistent IDs are still used for analytics and currency balance tracking. Just add the following flag to the connect call:

Android Native: connectFlags.put(TapjoyConnectFlag.DISABLE_PERSISTENT_IDS, “true”);
Unity: connectFlags.Add(“disable_persistent_ids”, true);
Adobe Air: connectFlags["disable_persistent_ids"] = true;

For more information about our connect flags on android see the Java SDK Reference.

WARNING: If you are using Tapjoy Managed Currency, disabling persistent IDs could cause your users to lose their currency balances in some cases. If you need to use Tapjoy Managed Currency and disable persistent IDs, we highly recommend setting a Publisher User ID so that the user’s balance can be tracked. This will have the side benefit of allowing the user to bring their Tapjoy Managed Currency balance from device to device.

Is there a way to get explicit consent from my users to use persistent IDs?

In light of Google’s policy regarding the use of persistent IDs, developers may want to seek explicit permission from their users when using device identifiers to manage virtual currency. We have created a specific permission that can be displayed to users during the install process that describes how and why Tapjoy uses persistent identifiers. To learn more about the permission element, you can refer to Google’s official documentation.

Simply add the following to your AndroidManifest.xml file under the manifest tag to add this permission.

Note: The android:protectionLevel must be set to “dangerous” as this is the only level that complies with Google’s requirement of explicit consent.

android:label="Device ID"
android:description="Associates Device IDs for the purpose of virtual currency management. This is NOT used for any advertising, analytics, or targeting purposes."
android:name="com.tapjoy.TAPJOY_VC_PERMISSION" />