플레이스먼트 SDK 연동

1. 플레이스먼트 요청

플레이스먼트를 생성하기 위해, TJPlacement 클래스를 사용하셔야 합니다. 플레이스먼트의 이름이 대시보드에 있는 플레이스먼트 이름과 정확히 일치해야합니다.

TJPlacementListener placementListener = this;
TJPlacement p = Tapjoy.getPlacement("[PLACEMENT_NAME]", placementListener);

먼저 리스너가 설정되고 플레이스먼트가 초기화된 다음 플레이스먼트를 통해 콘텐츠를 요청할 수 있습니다.

if(Tapjoy.isConnected())
	p.requestContent();
else
	Log.d("MyApp", "Tapjoy SDK must finish connecting before requesting content.")

NB: 콘텐츠를 요청하기 전에 connect 요청이 정상적으로 완료되어야 합니다. onConnectSuccess callback을 통해 connect 요청이 성공된 것을 확인한 후에 콘텐츠를 요청해야 합니다.

2. 콘텐츠 프리로딩

콘텐츠 로딩에 시간이 지연된다면, 사용자 경험을 향상시키키 위해서 콘텐츠 프리로딩 방식을 사용하실 것을 권장드립니다. 예를들어 메인메뉴에 콘텐츠를 보여주는 버튼이 있는 경우, 버튼이 눌려지는 시점이 아니라 어플리케이션 시작하고 connect 요청이 성공한 바로 다음 시점에 미리 requestContent를 실행한다면 사용자가 버튼을 누를 때 지연 없이 즉시 콘텐츠를 표시할 수 있을 것입니다. 이러한 작은 차이가 사용자 이탈을 막고 광고 수익 증대에 기여할 수 있습니다.

3. 리스너 활용

여라가지 플레이스먼트 응답에 대해서 처리할 수 있는 리스너들이 정의되어 있습니다. 가장 간편하게 구현하는 방법은 TJPlacementListener 인터페이스를 구현하는 방법입니다. (public class YourMainActivity extends and Activity implements TJPlacementListener) EasyApp sample app을 참조하시면 리스너 구현에 대한 샘플 코드를 확인하실 수 있습니다. TJPlacementListener 인터페이스 주요 정의 내용은 다음과 같습니다.

public void onRequestSuccess(TJPlacement placement); // SDK가 탭조이 서버에 성공적으로 connect 되었을 때 호출됨. 콘텐츠가 준비되었다는 것을 의미하지 않음
public void onRequestFailure(TJPlacement placement, TJError error);
public void onContentReady(TJPlacement placement); // 실제 콘텐츠가 로드되어 보여질 준비가 되었을 때 호출됨.
public void onContentShow(TJPlacement placement);
public void onContentDismiss(TJPlacement placement);

비디오 콘텐츠를 보여주기 전에 오디오를 mute 놓으셔야 합니다. 그렇지 않으면, 비디오의 오디오와 앱 자체의 오디오가 서로 오버랩 되거나 충돌할 수 있습니다.

onContentReady 리스너 함수가 호출될 때 콘텐츠를 사용자에게 보여주도록 구현하는 방식을 권장합니다. 이와 같은 방식으로 구현하면 콘텐츠가 완전히 디바이스에 로딩된 것을 보장할 수 있으며 지연 없이 콘텐츠를 사용자에게 보여줄 수 있습니다. 다른 방식으로는, 예제와 같이 p.isContentReady()의 리턴값이 true 경우 콘텐츠를 보여주는 방식이 있습니다.

NOTE: 플레이스먼트 오브젝트를 생성하기 전에 탭조이 connect 요청의 성공 여부를 먼저 확인해야 합니다.

4. 플레이스먼트 보여주기

TJPLacement를 요청할 때 TJPLacementListener 객체를 전달합니다. TJPlacementListener에 "onRequestSuccess"에 대한 콜백이 있습니다. onRequestSuccess 콜백은 SDK가 서버에 콘텐츠 요청을 성공적으로 수행 한 후에 시작됩니다. 이 콜백이 실행되면 isContentAvailable 함수를 호출하여 TJPlacement에 콘텐츠가 있는지 확인할 수 있습니다.

public void onRequestSuccess(TJPlacement tjPlacement)
{
	if(tjPlacement.isContentAvailable())
	{
		//사용 가능한 광고 유닛이 있습니다.
	}
	else {
		//사용 불가능할 경우
    }
}

isContentAvailable 함수는 사용 가능한 광고가 있음을 의미하지만 다운로드가 완료된 것은 아닙니다. 광고 로드가 완료되면 TJPlacementListener의 'onContentReady'함수가 실행됩니다. TJPlacement 객체에서 isContentReady를 호출하여로드가 완료되었는지 확인할 수도 있습니다. 로드가 완료된 후 'showContent'함수를 호출하여 언제든지 광고를 표시 할 수 있습니다.

public void onContentReady(TJPlacement tjPlacement) 
{
	if(tjPlacement.isContentReady()) 
	{
		// 광고 표시
	    tjPlacement.showContent();
	}
}

5. 콘텐츠를 다시 요청하기

플레이스먼트의 콘텐츠를 사용자에게 성공적으로 표시한 후에는 콘텐츠를 반드시 다시 요청 해야 합니다(p.requestContent(); 코드를 다시 호출). 단순히 p.showContent (); 코드를 다시 호출한다면 콘텐츠를 보여주기 위한 시도는 실패하게 됩니다.

콘텐츠가 준비된 경우 콘텐츠를 표시 할 수 있습니다.

if(p.isContentReady()) {
    p.showContent();
}
else {
    //표시 할 콘텐츠가 없거나 아직 다운로드되지 않은 상황을 처리합니다.
}

6. 탭조이 콘텐츠 액션 요청 처리

리워드 및 IAP 프로모션과 같은 일부 탭조이 콘텐츠 유형은 해당 콘텐츠에서 전달한 파라메터 값을 기반으로 콜백 코드를 작성해야 합니다. 예를 들어, 리워드 콘텐츠는 사용자에게 제공 할 아이템 이름(문자열값)과 수량(정수값)을 지정합니다. 리워드 지급이 반영되도록 사용자의 인벤토리를 실제로 조정하는 것은 애플리케이션에 달려 있습니다. 이러한 특수한 유형의 콘텐츠에 대해 다음과 같은 위임 메소드가 있습니다.

public void onPurchaseRequest(TJPlacement placement, TJActionRequest request, String productId); //onPurchaseRequest는 사용자가 IAP 프로모션 콘텐츠에서 제품 링크를 클릭 할 때 호출됩니다. 실제로 IAP를 트리거하는 코드를 여기에 넣으십시오.

public void onRewardRequest(TJPlacement placement, TJActionRequest request, String itemId, int quantity); //리워드 콘텐츠에서 콘텐츠가 닫힐 때 호출됩니다.

** onRewardRequest는 탭조이 광고와 상호 작용 한 사용자에게 가상화폐가 지급될 때 호출되는 것이 아닙니다 ** . 리워드 콘텐츠를 통해 게임 자체 리워드 아이템 지급할 때만 사용됩니다.

이러한 특수 콘텐츠를 사용하는 방법을 알아 보려면 다음 문서 페이지를 확인하십시오.. 리워드 기브어웨이 콘텐츠 사용. "인엡프로모션" 콘텐츠 사용.

7. 진입 경로 설정

선택사항으로 각 플레이스먼트 별로 진입 경로를 설정할 수 있습니다. 이를 위해 아래의 미리 설정된 값을 통해 설정할 수 있습니다.

java
TJEntryPoint.ENTRY_POINT_UNKNOWN
TJEntryPoint.ENTRY_POINT_OTHER
TJEntryPoint.ENTRY_POINT_MAIN_MENU
TJEntryPoint.ENTRY_POINT_HUD
TJEntryPoint.ENTRY_POINT_EXIT
TJEntryPoint.ENTRY_POINT_FAIL
TJEntryPoint.ENTRY_POINT_COMPLETE
TJEntryPoint.ENTRY_POINT_INBOX
TJEntryPoint.ENTRY_POINT_INIT
TJEntryPoint.ENTRY_POINT_STORE 

진입 경로는 플레이스먼트 오브젝트 생성 후, 콘텐츠를 요청하기 전에 호출합니다.

java
TJPlacement placement = Tapjoy.getPlacement("myPlacement", null);
placement.setEntryPoint(TJEntryPoint.ENTRY_POINT_MAIN_MENU);
placement.requestContent();