Offerwall Migration Guide

  1. Firstly, you need to integrate the ironSource Tapjoy adapter. You can add this to your podfile like so:
pod 'IronSourceTapjoyAdapter',''

You can find the latest adapter version here.

  1. The adapter comes with a copy of the Tapjoy SDK so you can call Tapjoy SDK functions directly. This is what we need to do to display the Tapjoy Offerwall. First, we need to import Tapjoy into your class:
#import <Tapjoy/TJPlacement.h>
  1. Then we need to initialise the Tapjoy SDK. You will receive a callback when this succeeds (or fails) and you should not make any Tapjoy SDK calls until you have received the success callback.
[Tapjoy connect:@"TJ_SDK_KEY"];
- (void)tjcConnectSuccess:(NSNotification *)notifyObj 
    NSLog(@"Tapjoy connect succeeded");

- (void)tjcConnectFail:(NSNotification *)notifyObj 
    NSLog(@"Tapjoy connect failed");
  1. Next we create a placement object. A placement is something you configure on the Tapjoy dashboard and it will contain your Offerwall content card. In this example we are assuming you have named your placement ‘Offerwall’. In reality you can name it whatever you want but the name you use here in your code must match the dashboard.
TJPlacement *placement = [TJPlacement placementWithName:@"Offerwall" delegate:self];
  1. Now you are ready to request your placement. With this call we are loading the placement so it is ready when you choose to display it. An Offerwall placement should load quickly, but it’s best call this in advance of when you think you will display the Offerwall.
[p requestContent];
  1. We offer a range of callbacks which you should implement.
- (void)requestDidSucceed:(TJPlacement*)placement{}
- (void)requestDidFail:(TJPlacement*)placement error:(NSError*)error{}
- (void)contentIsReady:(TJPlacement*)placement{}
- (void)contentDidAppear:(TJPlacement*)placement{} 
- (void)contentDidDisappear:(TJPlacement*)placement{}

Some of these can replace the ironSource callbacks you may have already implemented. You can see the corresponding callbacks in the table below so that you can easily move any custom logic into the appropriate Tapjoy callbacks:

ironSource Callback Tapjoy Callback
offerwallDidShow contentDidAppear
offerwallDidClose contentDidDisappear
offerwallHasChangedAvailability contentIsReady

requestDidSuceed will be called when the content request returns from Tapjoy’s servers. contentIsReady will be called when the content (Offerwall) is ready to display. At this point you can either display Offerwall, or set some flag so that you know it is ready to display when you need it.

  1. To display your Offerwall placement you should check the content is ready, and then call showContent:
if (placement.isContentReady) {
   [placement showContentWithViewController:nil];

This will replace your existing ironSource call:

[IronSource showOfferwallWithViewController:UIViewController];

The showContent method takes a view controller argument. We recommend you pass nil and allow Tapjoy to create a view controller for you. In most cases this is the safest option. If you have a complex view hierarchy and for some reason want to manage the display yourself it is vitally important that the ViewController passed to this method be the top-most view and that it be unobstructed by other views, and that other views are not placed on top of this view until after the Tapjoy content has been dismissed.

  1. Once the user has dismissed the Offerwall you must request the content again. You cannot show a placement multiple times. We would recommend that you request the placement in the contentDidDisappear callback so that it is ready to display again the next time a user requests it.

  2. You can now remove any remaining ironSource Offerwall code. For example:

[IronSource setOfferwallDelegate:yourOfferwallDelegate];

Also any callbacks that you did not convert to an equivalent Tapjoy version. If you specify @[IS_OFFERWALL] when initialising the ironSource SDK, you can also remove this argument.


If you are using ironSource LevelPlay, you may use LevelPlay APIs to share with Tapjoy the following privacy flags:

  1. GDPR consent.
  2. Opt-out of sale or share of personal information under US state privacy laws.
  3. Flagging specific end users as children. Please note that if your app is primarily directed to children under COPPA you must flag all end users as children.

If you are not using ironSource LevelPlay or if you would like to configure Tapjoy's SDK separately, please follow these guidelines to share with Tapjoy the relevant privacy flags.