인앱 메시징은 더 많은 사용자를 오퍼월로 유도하는 전략적 방법입니다. 메시징은 특정 사용자 집단이나 커런시 세일을 타겟팅하는 용도로 사용될 수 있습니다. Tapjoy의 Message to Earn 은 메시지의 내용, 타겟팅 및 빈도를 설정할 수 있도록 지원합니다. 또는 앱 내 자체적으로 사용중이신 메시징 기능을 사용하려는 경우 인앱 메시지를 통해 오퍼월로 연결하실 수 있습니다. 이를 활용하는 방법에 대한 자세한 내용은 아래를 참조하세요.
M2E(Message to Earn) 콘텐츠 카드는 사용자를 오퍼월로 안내하기 전 이에 대한 정보를 제공하는 사용자 정의 가능한 앱 내 "팝업" 메시지입니다. 메시지는 더 많은 사용자를 오퍼월로 유도하는 데 도움이 됩니다. 또한, 커런시 세일 및 타겟팅 테스트와 연계하여 효율성을 극대화할 수 있습니다. 예를 들어, “무료 골드를 받으세요. 첫 광고를 완료하고 골드는 두 배로 받으세요!”라는 메시지를 노출시켜 오퍼월을 최초로 사용하는 사용자를 타켓팅하여 2배의 리워드를 지급할 수 있습니다.
M2E 추가하기 위해 설정한 플레이스먼트에서 해당 메시지와 오퍼월이 사용자에게 노출됩니다. M2E가 노출되는 플레이스먼트는 사용자 상황에 맞는 플레이스먼트로 설정되어야 합니다. 앱 내 사용자가 특정 조건을 충족하면 각 상황에 맞게 플레이스먼트가 노출됩니다.
Tapjoy 에서는 아래와 같은 타입의 플레이스먼트에 M2E를 노출하길 권장합니다.
플레이스먼트를 추가하는 방법에 대해서는 본 문서 를 참고해 주시길 부탁드립니다.
Message to Earn 을 추가하기 위해서는 우선 플레이스먼트 설정이 필요합니다. 앱 내 플레이스먼트가 설정되어있지 않은 경우 플레이스먼트 생성 절차에 따라 플레이스먼트를 추가해야 합니다.
이미 플레이스먼트가 존재할 경우 Message to Earn을 노출할 플레이스먼트를 선택 후 아래 절차에 따라 설정합니다.
라이브 배포 후 기본 지표를 통해 M2E 컨텐츠의 성과를 리뷰합니다. 만약 M2E의성과가 낮을 경우 A/B test를 통해 서로 다른 메시지와 타켓팅 테스트를 고려해 보시길 바랍니다.
M2E 컨텐츠 카드와 함께 다음 기능을 사용할 수 있습니다.
커런시 세일
타켓팅
A/B 테스팅
Message to Earn의 대안으로 앱 내 메시지를 활용하여 사용자를 Offerwall로 유도할 수 있습니다. 아래의 설정 지침을 참조하시기 바랍니다.
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();
}