1. General Questions

Where can I download the SDK?

Here is our SDK Download Page.

How much size will the Tapjoy SDK add to my application?

For Android, the 12.9.0 SDK adds 692KB (the size of the library jar) to your app and has a method count of approximately 4688.

For iOS, the arm64 slice with the 12.9.0 SDK adds 906,290 bytes to the size of the application. Note that this includes all the necessary frameworks and libraries that Tapjoy requires. The actual size increase will probably be less than this, as it is likely your application already uses many of these frameworks.

What device operating systems are supported?

Tapjoy supports iOS 9 and higher and Android 4.0 (API Level 14/Ice Cream Sandwich) and higher.

What development environments does Tapjoy support?

Tapjoy supports native iOS and Android, and we have a plugin for Unity3d as well. We also have a C++ library for those using Cocos2d-x.

What open source software is included in the Tapjoy SDK?

Here is the open source list ("Open Source Software") for the Tapjoy SDK.

I’ve integrated Tapjoy but I don’t see any ads. What is wrong?

  1. There are a number of reasons why you might not be seeing advertisements. Please check the following list of causes:The most common reason for not seeing ads is that there is no advertising content associated with the placement. Once you set up the placement on the dashboard and integrate it into your code, it will not actually show anything until you link content to it.
  2. The placement is integrated in code, but not set up on the dashboard.
  3. The placement name in your app’s code does not exactly match the placement in the dashboard. For example, if you have "app open" in your code, but "app launch" set up on the dashboard, calling the "app open" placement will return no content, and you will not see any ads. Check the names of the placements in code and in the dashboard, paying particular attention to spaces (" "), underscores "_", spelling, and common synonyms (e.g. "exit_store" vs. "quit_store").
  4. The app does not yet have an approved currency. In order to use Tapjoy to show advertisements, you must set up at least 1 currency in the dashboard. To see your virtual currency status, go to Settings -> App Settings -> Content -> Virtual Currency. Note that if your application runs on both iOS and Android, you must have an approved currency on each platform to see ads on that platform.
  5. You are calling the placement before Tapjoy has successfully connected. You must wait until the Tapjoy Connect call has successfully completed before calling your placement, otherwise the placement call will fail and you will see no content. (In fact, almost all Tapjoy calls will fail if executed before Tapjoy has successfully connected.) Note that just putting the placement call in your code after the connect call in your code does not guarantee that the placement will be called after the connect call succeeds. The connect call is asynchronous. You should wait until the appropriate Tapjoy connection success delegate/listener (iOS, Android, Unity, Air) is called before calling placements.
  6. You are using the wrong SDK Key in your app. Check that the SDK Key in your apps code matches the SDK key in the correct app in your dashboard. Often when copying & pasting Tapjoy code from one project to another, an SDK key from another app or from the wrong platform can get into your code.
  7. There is not any "fill" for your region for that kind of ad. At times, Tapjoy does not have any ads to show for a particular format in a particular region. This is more likely to happen in smaller markets. To determine whether a lack of content is due to fill or due to an implementation issue, it is often useful to designate a device as a test device. A test device will see a test advertisement from Tapjoy even if there is no actual ad inventory for that region. (Note that sometimes this test advertisement will only actually reward the user once every 5 minutes, depending on the ad format. This is to curb fraud.) To designate a device as a test device, go to App Settings->Test Devices->Create Test Device.
  8. You are on a VPN. If your are on a VPN, our system might think your device is pretending to be in a different region, and not provide any ads as an anti-fraud precaution. This is particularly likely to happen if your VPN makes your device have an IP address that does not match other characteristics of the device, such as its country code.
  9. Your Ad content is set to Test Devices Only and you are checking for ads with a non-test device. Either set the content to be viewable by all devices (Content->Scroll down to content list->Find content unit->Click Edit icon->Uncheck the "Test Only" box), or use a properly configured test device (Dashboard->App Settings->Test Devices) to view the content.
  10. You are trying to see a test ad for an ad content unit that has its currency set to "non-rewarded". If an ad unit (Video) is set to "non-rewarded", you will not see any test advertisements for it, even if your device is set up as a test device.
  11. If your exchange rate (App Settings->Content->Virtual Currency->Exchange Rate) is too low, there may not be any ads available that pay at least one unit of your currency. For example, if you set your "gems" currency to 1 gem = 1 U.S. Dollar, only ads that pay at least 1 USD would be shown. Since few ads pay that much, it is likely you would not see any ads at all. While our system does do some shifting to help make offers appear in these types of situations, we recommend your currency exchange rate be set to at least 100 = $1 USD. That will ensure you are not losing out on ad inventory due to your currency being too expensive.
  12. If you see content the first time it is shown, but not on subsequent shows, you might not be loading content again once you have shown it. Once you display the placement to the user, you must make the placement call again to "reload" the placement. If you do not do this, subsequent attempts to show that placement will fail.
  13. You’re not connected to the internet. Obviously, Tapjoy requires connectivity to its servers in order to show advertising content to the user. If the device or simulator you are using does not have connectivity, no ads will appear.
  14. You are running in the Unity3d editor. If you are using Tapjoy with Unity3d, you must actually build to a device to check your Tapjoy integration. Tapjoy does not function properly when your app is being run within the Unity3d editor.
  15. The clock on your device does not match present time. This will cause the SSL handshake to fail, which will prevent Tapjoy’s connect call from succeeding, which in turn will prevent you from seeing Tapjoy content.
  16. You are using the same Publisher User ID across many devices. Sometimes, when testing, an engineer or tester will run the game on many devices. If our system detects the same publisher user ID being used across a large number of devices, we assume it is a user attempting to set up a fraudulent "click farm" to complete ad offers, and we stop showing content to the user ID. For security purposes, we do not release the exact thresholds that trigger this. As a workaround, one can use different user IDs on different test devices.
  17. Your content has an eCPM floor or goal for the current region and Tapjoy does not have any content that can meet that floor or goal. This can happen if those floors are too high, or if Tapjoy’s algorithm has come to think of a user as less likely to install (this often happens with test accounts and devices) and is therefore bidding lower for that user.

Where are Tapjoy’s servers physically located?

Tapjoy has a global customer base. To serve this customer base, Tapjoy has servers hosted in the Asia-Pacific region, Western Europe, Western United States, and Eastern United States. This ensures both redundancy and high performance for multiple geographic regions.

I installed an app from the offerwall, but I did not get a reward. What is happening?

Before the install can be tracked you must first open and run the advertised application. Once you run the application that will make it track the install, and once Tapjoy gets the install tracking data you will be rewarded. In most cases the installs are tracked within a few minutes. However in the worst cases it can take over an hour before the install tracking service reports the install to our servers.

How do I enable Tapjoy debug mode?

Instructions for enabling Tapjoy’s debug/logging mode are available for iOS, Android, and Unity.

Do I have to wait for my content to finish preloading before I can show an ad?

Once you get the isContentAvailable response you do not necessarily need to wait for the content to finish pre-loading. If you call showContent before the content has finished loading, the SDK will attempt to stream the remaining ad. We recommend waiting for the SDK callback for content ready so that you know all of the content has finished downloading. Otherwise the user might see the ad buffering while it downloads.

Do you support Android permissions ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION?

Our Android-SDKs do have support for the location permissions. With Android 6, Google has marked these permissions as "dangerous" so users are prompted to accept these permissions at runtime. Therefore we do not recommend using these permissions unless your app already has a strong use-case for requiring Location permissions. The permissions are entirely optional and safe to exclude from your app.

Where do I go if I need help or assistance?

Contact support.

2. Unity

Can I run and test Tapjoy in the Unity3d Editor?

No. You must build to an actual device to test Tapjoy. If you try to run Tapjoy in the Unity editor, you will get a message like the following:

E/TapjoyConnect(20815): ERROR -- call requestTapjoyConnect and make sure to receive the Tapjoy connectSuccess response from the TapjoyConnectNotifier before calling any other Tapjoy methods

Can I control when the SDK first connects?

In SDK 11.2.1 and below this is not possible. In SDK 11.2.2 and above it is possible to programmatically control the connection step. You can find the documentation here.