1. Requesting a Placement

Create an instance of TJPlacement and initialize it with your placement name. Be sure the placement name string in your code matches the placement name in the dashboard exactly. You can also implement a delegate to receive callbacks (explained below).

TJPlacement p = TJPlacement.CreatePlacement("APP_LAUNCH");

Now you can request the content.

if (Tapjoy.IsConnected()) {
} else {
    Debug.LogWarning("Tapjoy SDK must be connected before you can request content.");

NB: Before you request content please ensure that the Tapjoy connect call has succeeded. Do not make a request before you have received the onConnectSuccess callback.

2. Pre-caching the content

For the best user experience, you should request content in advance of when the user might be shown that content. For example, if the placement is a button on your main menu, you might want to request content for it when your application starts, just after the Tapjoy Connect call succeeds. If you wait until the last moment to request content, it is likely the user will have to wait for the content to load, and watch a loading spinner. For ads, this makes the user less likely to interact with the ad, and therefore less likely to make money for you.

3. Callbacks

To get feedback on the status of the content request, implement the following callbacks:

TJPlacement.OnRequestSuccess += HandlePlacementRequestSuccess;
public void HandlePlacementRequestSuccess(TJPlacement placement) {

TJPlacement.OnRequestFailure += HandlePlacementRequestFailure;
public void HandlePlacementRequestFailure(TJPlacement placement, string error) {
TJPlacement.OnContentReady += HandlePlacementContentReady;
public void HandlePlacementContentReady(TJPlacement placement) {
    // This gets called when content is ready to show.

TJPlacement.OnContentShow += HandlePlacementContentShow;
public void HandlePlacementContentShow(TJPlacement placement) {
TJPlacement.OnContentDismiss += HandlePlacementContentDismiss;
public void HandlePlacementContentDismiss(TJPlacement placement) {

4. Displaying a Placement

To actually display content, use p.ShowContent();

You should check to make sure that content is ready before ShowContent():

if (p.IsContentReady()) {
} else {
    // Code to handle situation where content is not ready goes here

NB: you should mute your app’s audio before showing content from a placement that might include video, otherwise the audio for the video and your app’s audio might conflict.

Often, it is a good idea to wait until the HandlePlacementContentReady callback fires before showing content to the user. This way, you can be sure that the content is actually on the device, and can be shown to the user without delay. Another equivalent way is to check to see if p.IsContentReady() is true, as in the example above.

NB: In order to ensure proper functionality, prior to creating a placement object, the Tapjoy connect call needs to have been made and succeeded.

5. Re-requesting the content

Once you successfully display content from a placement to a user, you must request content again (i.e. call p.RequestContent(); again) to "reload" the placement with another content unit. You cannot simply call p.ShowContent(); again. If you try to show content before requesting content, the show content will fail.

For placements that are expecting video content, the proper time to re-request content is right after the content is shown. This will pre-load the next video while the user is watching the current video. If you wait until the content is dismissed to re-request content, there will be a delay if the user immediately tries to watch another video.

6. Handling Tapjoy Content Action Requests

Some Tapjoy content types, like Reward and IAP Promotion, require your code to take action based on parameters passed by that content unit. For example, the Reward content unit specifies an item name (a string) and a quantity (an integer) to be given to the user. It is up to the application to actually adjust the user’s inventory to reflect the reward. The following delegate methods are called and passed the appropriate information from the content unit:

TJPlacement.OnPurchaseRequest += HandleOnPurchaseRequest;
public void HandleOnPurchaseRequest(TJPlacement placement, TJActionRequest request, string productId) {

TJPlacement.OnRewardRequest += HandleOnRewardRequest;
public void HandleOnRewardRequest(TJPlacement placement, TJActionRequest request, string itemId, int quantity) {

Note that HandleOnRewardRequest is NOT what gets called when Tapjoy rewards the user for interacting with an ad. It is only used for the Reward Giveaway content unit.

7. Setting the Entry Point

You can optionally tell Tapjoy the 'entry point' of each placement. There are a variety of preset values to choose from:


You should set the entry point after creating your placement object, but before requesting content:

TJPlacement placement = TJPlacement.CreatePlacement("placementName");