Table of Contents
- 1 Frequently Asked Questions
- 1.1 General Questions:
- 1.1.1 Where can I download the SDK?
- 1.1.2 How much size will the Tapjoy SDK 11 add to my application?
- 1.1.3 What device operating systems are supported?
- 1.1.4 What development environments does Tapjoy 11 support?
- 1.1.5 Do you have information on switching from SDK10 to SDK11, and from the old (pre- March 2015) dashboard and the new one?
- 1.1.6 Can I still see the old Tapjoy 10 documentation?
- 1.1.7 What open source software is included in the Tapjoy SDK?
- 1.1.8 What information does the Tapjoy SDK send to Tapjoy?
- 1.1.9 I’ve integrated Tapjoy but I don’t see any ads. What is wrong?
- 1.1.10 What is the difference between a "contextual" and a "user-initiated" placement, and why is it important that I designate my placements correctly in the dashboard?
- 1.1.11 When creating a placement in the Tapjoy Dashboard, I see "placement context" options: App Launch, User Pause, Achievement, and Failure. What are these options, and why is it important that I set it correctly?
- 1.1.12 How long will it take for these custom cohorts to appear in my dashboard once they are integrated and my app starts sending them?
- 1.1.13 Can I create a custom user segment by uploading a list of Advertiser IDs?
- 1.1.14 Where are Tapjoy’s servers physically located?
- 1.1.15 I installed an app from the offerwall, but I did not get a reward. What is happening?
- 1.1.16 How do I enable Tapjoy debug mode?
- 1.1.17 Do I have to wait for my content to finish preloading before I can show an ad?
- 1.1.18 How much memory is used during video playback?
- 1.1.19 Do you support Android permissions ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION?
- 1.1.20 Where do I go if I need help or assistance?
- 1.2 Unity
- 1.3 Air
- 1.1 General Questions:
- 2 Legacy FAQs
- 3 Glossary
- 4 Articles
- 4.1 Publisher Reporting API with Country/Geo Breakdown
- 4.2 Skippable and Non-Skippable Interstitial Video
- 4.4 iOS Data Authorization info.plist changes
- 4.5 NSCalendarsUsageDescription iOS app store rejection solution
- 4.6 Tapjoy SDK and Apple’s iOS IPv6 requirements
- 4.7 User Tags
- 4.8 Native to Earn
- 4.9 Push to Earn FAQ
- 4.10 Preparing for iOS 9
- 4.11 Unexpected CFBundleExecutable Key iOS submission error
- 4.12 Publisher Integration Checklist
- 4.13 Ad Reporting API
- 4.14 Analytics Data Export API
- 4.15 How to send an automated push
- 4.16 How to configure your push certificate
- 4.17 How to find sender ID and api key for GCM
- 4.18 Using Multiple Push Providers
- 4.19 Device Identifiers
- 4.20 How to use custom payload in push notification
- 4.21 How to Integrate Pay Per Engagement (PPE, also PPA or CPE) Campaigns
- 4.22 Dashboard User Roles and Permissions
- 4.23 Testflight, IDFA, and testing Tapjoy
- 4.24 Setting up test devices on Tapjoy dashboard
- 4.25 Tapjoy Device Content Cache
- 4.26 Switching from showOffers to Placement and Content
- 4.27 Integrating Tapjoy SDK with Swift Apps
- 4.28 Using Custom Events In Tapjoy
- 4.29 User Cohorts Guide
- 4.30 Options on reducing total method count in Tapjoy Android Apps
- 4.31 Push Troubleshooting Guide
- 4.32 Ad Behavioral Targeting
- 4.33 A/B Testing
- 4.34 How to find the Tapjoy SDK Key
Frequently Asked Questions
Where can I download the SDK?
Here is our SDK Download Page.
How much size will the Tapjoy SDK 11 add to my application?
For Android, the 11.10 SDK adds 726KB (the size of the library jar) to your app and has a method count of approximately 5,034 (9% reduction from 11.9.1). For iOS, SDK 11.10, has an arm64 slice of 1.21MB, and 2.35MB across all architectures. (Recent devices will use the arm64 slice size.) This is the difference between the size of a compiled empty app vs. that app compiled with Tapjoy and all required frameworks added. As an ongoing practice, we review and refactor our SDKs to look for efficiencies.
What device operating systems are supported?
Tapjoy 11 supports iOS 6.0 and higher and Android 2.3 and higher, but note that on Android 2.3, we cannot display ad content. For ad content on Android, version 3.0 or higher is required.
What development environments does Tapjoy 11 support?
Do you have information on switching from SDK10 to SDK11, and from the old (pre- March 2015) dashboard and the new one?
Yes. Our Partner Migrations section has all the necessary information.
Can I still see the old Tapjoy 10 documentation?
For Tapjoy SDK 10 documentation, please contact support.
What open source software is included in the Tapjoy SDK?
Here is the open source list for Tapjoy SDK 11.
What information does the Tapjoy SDK send to Tapjoy?
This comprehensive parameter list explains everything the Tapjoy SDK sends to Tapjoy servers.
I’ve integrated Tapjoy but I don’t see any ads. What is wrong?
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.
- The placement is integrated in code, but not set up on the dashboard.
- 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").
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
What is the difference between a "contextual" and a "user-initiated" placement, and why is it important that I designate my placements correctly in the dashboard?
For an explanation of placements in general, see the Placements section of the Getting Started Guide.
A "contextual" placement is one that is automatically shown to the user without the user explicitly initiating it. For example, a placement that triggered every time the user opens the application would be a contextual placement. So would a placement that triggered whenever the user hit a between-levels screen, or one that is triggered whenever the user enters the in-game store.
A "user-initiated" placement, on the other hand, is one that the user specifically opts-in to. A primary example would be a "Watch videos to earn coins!" button. This is something the user explicitly chooses to do; it does not happen just because the user navigated to a certain screen of the game. Another example of a user-initiated placement would be a "Complete offers to earn gems!" button.
The reason it is important to correctly classify your placements as "contextual" or "user-initiated" when creating them in the Tapjoy dashboard is twofold: First, when examining the performance characteristics of a placement, it is useful to separate the two kinds of placements as they have very different characteristics in terms of conversion rate, eCPM, etc. Second, when Tapjoy’s algorithm is deciding what kind of content to show at a given placement, it is able to better select content with correct information about whether the placement is contextual or user-initiated. Content that is optimal for a contextual placement might not be optimal for a user-initiated placement, and vice-versa.
When creating a placement in the Tapjoy Dashboard, I see "placement context" options: App Launch, User Pause, Achievement, and Failure. What are these options, and why is it important that I set it correctly?
A Placement is a specific area in your application where you can display content to your user. The placement context is used to describe the context of a specific point in the game-play where the placement is.
- App Launch: A placement that is called as soon as the application opens or resumes from the background should have this option selected.
- User Pause: A placement that is called when the user pauses the game should have this option selected. A placement that does not properly belong to any other category (for example, when the user enters the store) should have this option selected.
- Achievement: A placement that is called when the user passes a level, wins a battle, or accomplishes some other kind of objective should have this option selected.
- Failure: A placement that is called when the user dies, loses a battle, or otherwise fails at a task should have this option selected.
This allows advertisers to offer custom content tailored to that placement. For example, if a placement is an "achievement" placement, campaigns that specifically mention rewarding success ("You’re doing great! Brand X sends its congratulations!") will monetize particularly well there. Similarly, a Failure placement might be conducive to a different kind of message ("Don’t stop now! Brand X knows you’ll succeed next time!"). By providing correct placement context, you help Tapjoy select ads that will make the most money for your application.
How long will it take for these custom cohorts to appear in my dashboard once they are integrated and my app starts sending them?
The custom cohorts on the dashboard are created daily, so it might take up to 24 hours for them to appear.
Can I create a custom user segment by uploading a list of Advertiser IDs?
Yes. Follow the instructions for uploading Advertiser IDs.
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?
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.
How much memory is used during video playback?
On average, for iOS a video will use approximately 7mb of memory. For Android, its closer to 10mb of memory on video playback.
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?
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.
Encountering the following error: [iOS] [Win] Installation Error: ApplicationVerificationFailed message appears on installing IPA using adt command if there is any info plist inside the assets or ANE?
AIR 22 official version will fix this issue. Until then please use the osx environment.