In-app messaging is a strategic way to drive more users to your offerwall. Messaging can be used in the context of targeting specific user cohorts or currency sales. Tapjoy’s Message to Earn product provides granular control to customize the content, targeting and frequency of your messages. Alternatively, if you prefer using your internal messaging, you can deeplink your in-app messages to offerwall. See below for more details on how to leverage both.
Message to Earn (M2E) content cards are customizable in-app “pop up” messages that provide context before directing users to an Offerwall. These messages help drive more users to your Offerwall. In addition, they can be used in conjunction with currency sales and targeting tests to maximize their effectiveness. For example, you can target first time users with 2X exchange rate with the following message, “Earn Free Gold. Get Double the golds when completing your 1st offer!”
The placements you select to add your Message to Earn content cards will determine where these messages and Offerwalls will appear to your users in gameplay. M2E placements should be set up in contextual placements instead of user-initiated placements. A contextual placement is initiated once certain conditions are met by the user in game play.
We recommend setting up M2E with the following type of placements:
Learn more about how to add new placements here.
Placements are required for the implementation for Message to Earn. Please follow these steps to create placements if there are no placements created for your app yet.
If there are already existing placements where you would like to add Message to Earn, please proceed with the following steps.
After going live, you may review your M2E content card in Overview. If the M2E content card is underperforming, consider setting up an A/B test to test different messages and targeting.
The following features can be used in conjunction with the M2E content cards.
Currency Sale
Alternative to Message to Earn, you can leverage your internal in-game messaging to direct users to the Offerwall. Please refer to the set up instructions below.
TJPlacementListener placementListener = this;
TJPlacement p = Tapjoy.getPlacement("[PLACEMENT_NAME]", placementListener);
// Listeners
public void onRequestSuccess(TJPlacement placement);
public void onRequestFailure(TJPlacement placement, TJError error);
public void onContentReady(TJPlacement placement);
public void onContentShow(TJPlacement placement);
public void onContentDismiss(TJPlacement placement);
TJPlacement *p = [TJPlacement placementWithName:@"Main Menu" delegate:self];
// Callbacks
- (void)requestDidSucceed:(TJPlacement*)placement{}
- (void)requestDidFail:(TJPlacement*)placement error:(NSError*)error{}
- (void)contentIsReady:(TJPlacement*)placement{}
- (void)contentDidAppear:(TJPlacement*)placement{}
- (void)contentDidDisappear:(TJPlacement*)placement{}
let p = TJPlacement(name: "Main Menu", delegate: self)
// Callbacks
func requestDidSucceed(_ placement: TJPlacement!) {}
func requestDidFail(_ placement: TJPlacement!, error: Error!) {}
func contentIsReady(_ placement: TJPlacement!) {}
func contentDidAppear(_ placement: TJPlacement!) {}
func contentDidDisappear(_ placement: TJPlacement!) {}
TJPlacement p = TJPlacement.CreatePlacement("APP_LAUNCH");
TJPlacement.OnRequestSuccess += HandlePlacementRequestSuccess;
TJPlacement.OnRequestFailure += HandlePlacementRequestFailure;
TJPlacement.OnContentReady += HandlePlacementContentReady;
TJPlacement.OnContentShow += HandlePlacementContentShow;
TJPlacement.OnContentDismiss += HandlePlacementContentDismiss;
let placement = new TJPlacement("Placement Name");
placement.on(TJPlacement.REQUEST_DID_SUCCEED, (placement: TJPlacement) => { });
placement.on(TJPlacement.REQUEST_DID_FAIL, (placement: TJPlacement) => { });
placement.on(TJPlacement.CONTENT_IS_READY, (placement: TJPlacement) => { });
placement.on(TJPlacement.CONTENT_DID_APPEAR, (placement: TJPlacement) => { });
placement.on(TJPlacement.CONTENT_DID_DISAPPEAR, (placement: TJPlacement) => { });
if(Tapjoy.isConnected()) {
p.requestContent();
} else {
Log.d("MyApp", "Tapjoy SDK must finish connecting before requesting content.")
}
[p requestContent];
p?.requestContent()
if (Tapjoy.IsConnected()) {
p.requestContent();
} else {
Debug.LogWarning("Tapjoy SDK must be connected before you can request content.");
}
placement.requestContent();
public void onContentReady(TJPlacement tjPlacement) {
if(tjPlacement.isContentReady()) {
p.showContent();
}
}
if (p.isContentReady) {
[p showContentWithViewController: nil];
}
else {
//handle situation where there is no content to show, or it has not yet downloaded.
}
if (p.isContentReady) {
p.showContent(with: nil)
} else {
//handle situation where there is no content to show, or it has not yet downloaded.
}
if (p.IsContentReady()) {
p.ShowContent();
} else {
// Code to handle situation where content is not ready goes here
}
if (placement.isContentReady()) {
placement.showContent();
}