アプリ内メッセージングは、ユーザーをオファーウォールに誘導するための戦略的な手段です。メッセージングは、特定のユーザーグループやカレンシーセールのターゲティングに活用できます。Tapjoyの「Message to Earn」は、メッセージの内容、ターゲティング、頻度を細かくカスタマイズできるよう設計されています。また、独自のメッセージングを使用したい場合は、アプリ内メッセージをオファーウォールへディープリンクさせることも可能です。以下で両方の活用方法について詳しく説明します。
Message to Earn(M2E)のコンテンツカードは、ユーザーにオファーウォールを案内する前に文脈を提示するカスタマイズ可能なアプリ内の"ポップアップ"メッセージです。これらのメッセージは、より多くのユーザーをオファーウォールに誘導するのに役立ちます。また、カレンシーセールやターゲティングテストと併用することで、さらにその効果を高めることが可能です。例えば、「無料でゴールドを獲得。初回オファー完了で2倍のゴールドを獲得!」というメッセージで、初回ユーザーに2倍のレートを提示できます。
Message to Earn コンテンツカードを追加するプレイスメントによって、メッセージやオファーウォールがユーザーにどこで表示されるかが決まります。M2Eはユーザー操作によるプレイスメントではなく、コンテキストに基づいたプレイスメントに設定する必要があります。コンテキストプレイスメントとは、ユーザーがゲーム内で特定の条件を満たしたときに自動で表示されるものです。
以下のようなプレイスメントでのM2Eの設定を推奨します:
新しいプレイスメントの追加方法についてはこちらをご覧ください。
Message to Earnを実装するには、プレイスメントが必要です。まだプレイスメントが作成されていない場合は、この手順に従って作成してください。
すでにMessage to Earn追加したいプレイスメントがある場合は、以下の手順に進んでください:
公開後は、[Overview]でM2Eコンテンツカードのパフォーマンスを確認できます。成果が振るわない場合は、異なるメッセージやターゲティングのA/Bテストを実施してください。
以下の機能は、M2Eコンテンツカードと併用可能です。
カレンシーセール
A/Bテスト
Message to Earnの代わりに、独自のアプリ内メッセージ機能を使ってオファーウォールにユーザーを誘導することも可能です。以下に設定手順を示します。
TJPlacement
クラスを使用。ダッシュボードで設定したプレイスメント名とコード内の文字列は完全に一致させてください。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();
onConnectSuccess
コールバックが返る前にリクエストしないようにしてください。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();
}