#import <Tapjoy/TJPlacement.h>
그런 다음 TJPlacement 클래스의 인스턴스를 만들고 플레이스먼트 이름으로 초기화합니다. 코드의 플레이스먼트 이름 문자열이 대시 보드의 플레이스먼트 이름과 정확하게 일치하는지 확인하십시오. 콜백을 수신하도록 delegate method를 구현할 수도 있습니다 (아래 설명 참조).
TJPlacement *p = [TJPlacement placementWithName:@"Main Menu" delegate:self];
마지막으로 콘텐츠를 요청하십시오.
[p requestContent];
NB: 콘텐츠를 요청하기 전에 connect 요청이 정상적으로 완료되어야 합니다. onConnectSuccess callback을 통해 connect 요청이 성공된 것을 확인한 후에 콘텐츠를 요청해야 합니다.
콘텐츠 로딩에 시간이 지연된다면, 사용자 경험을 향상시키키 위해서 콘텐츠 프리로딩 방식을 사용하실 것을 권장드립니다. 예를들어 메인메뉴에 콘텐츠를 보여주는 버튼이 있는 경우, 버튼이 눌려지는 시점이 아니라 어플리케이션 시작하고 connect 요청이 성공한 바로 다음 시점에 미리 requestContent를 실행한다면 사용자가 버튼을 누를 때 지연 없이 즉시 콘텐츠를 표시할 수 있을 것입니다. 이러한 작은 차이가 사용자 이탈을 막고 광고 수익 증대에 기여할 수 있습니다.
콘텐츠 요청 상태에 대한 피드백을 받으려면 다음 TJPlacementDelegate 메서드를 구현합니다.
- (void)requestDidSucceed:(TJPlacement*)placement{} // 콘텐츠 요청이 Tapjoy의 서버에서 반환 될 때 호출됩니다. 반드시 콘텐츠를 사용할 수 있다는 의미는 아닙니다.
- (void)requestDidFail:(TJPlacement*)placement error:(NSError*)error{}
- (void)contentIsReady:(TJPlacement*)placement{} // 콘텐츠를 실제로 표시할 수 있을 때 호출됩니다.
- (void)contentDidAppear:(TJPlacement*)placement{}
- (void)contentDidDisappear:(TJPlacement*)placement{}
[p showContentWithViewController: nil];
주의 : showContentWithViewController에 'nil'을 전달하면 Tapjoy SDK는 광고 표시를 처리하기 위해 자체 뷰 컨트롤러를 생성합니다. 대부분의 경우 이것이 가장 안전한 옵션입니다. 복잡한 뷰 계층 구조가 있고 디스플레이를 직접 관리하려는 경우 선택적으로 자신의 뷰 컨트롤러를 showContentWithViewController에 전달할 수 있습니다. 이 메서드에 전달 된 ViewController가 최상위 뷰이고 다른 뷰에 의해 방해받지 않고 Tapjoy 콘텐츠가 닫힐 때까지 다른 뷰가 이 뷰 위에 배치되지 않도록 해야 합니다.
showContent 호출 전에 콘텐츠가 준비되었는지 확인해야합니다.
if (p.isContentReady) {
[p showContentWithViewController: nil];
}
else {
// 표시 할 콘텐츠가 없거나 아직 다운로드되지 않은 상황을 처리합니다.
}
비디오 콘텐츠를 보여주기 전에 앱의 자체 오디오를 음소거해야 합니다. 그렇지 않으면, 비디오의 오디오와 앱 자체 오디오가 서로 오버랩 되거나 충돌할 수 있습니다.
contentIsReady 델리게이트 함수가 호출될 때 콘텐츠를 사용자에게 보여주도록 구현하는 방식을 권장합니다. 이와 같은 방식으로 구현하면 콘텐츠가 완전히 디바이스에 로딩된 것을 보장할 수 있으며 지연 없이 콘텐츠를 사용자에게 보여줄 수 있습니다. 다른 방식으로는, 위 예제와 같이 p.isContentReady의 리턴값이 true 경우 콘텐츠를 보여주는 방식이 있습니다.
플레이스먼트의 콘텐츠를 사용자에게 성공적으로 표시 한 후에는 콘텐츠를 다시 요청(즉, [p requestContent]; 다시 호출)하여 다음 콘텐츠 위해 플레이스먼트를 "다시 로드"해야합니다. 컨텐츠를 재요청 하지 않으면 *[p showContentWithViewController: self];*를 다시 호출 할 수 없습니다. 콘텐츠를 재요청하기 전에 콘텐츠를 표시하려고 하면 showContent가 실패합니다.
리워드 및 IAP 프로모션과 같은 일부 탭조이 콘텐츠 유형은 해당 콘텐츠에서 전달한 파라메터 값을 기반으로 콜백 코드를 작성해야 합니다. 예를 들어, 리워드 콘텐츠는 사용자에게 제공 할 아이템 이름(문자열값)과 수량(정수값)을 지정합니다. 리워드 지급이 반영되도록 사용자의 인벤토리를 실제로 조정하는 것은 애플리케이션에 달려 있습니다. 이러한 특수한 유형의 콘텐츠에 대해 다음과 같은 위임 메소드가 있습니다.
- (void)placement:(TJPlacement*)placement didRequestPurchase:(TJActionRequest*)request productId:(NSString*)productId {
//사용자가 IAP 프로모션 콘텐츠에서 제품 링크를 클릭 할 때 호출됩니다. 실제로 IAP를 트리거하는 코드를 여기에 작성
}
- (void)placement:(TJPlacement*)placement didRequestReward:(TJActionRequest*)request itemId:(NSString*)itemId quantity:(int)quantity {
//리워드 콘텐츠에서 콘텐츠가 닫힐 때 호출됩니다. 아이템 지급 코드를 여기에 작성
}
didRequestReward는 탭조이 광고와 상호 작용 한 사용자에게 가상화폐가 지급될 때 호출되는 것이 아닙니다. 이 콜백은 리워드 기브어웨이 컨텐츠를 사용할 때만 활용됩니다.
선택사항으로 각 플레이스먼트 별로 진입 경로를 설정할 수 있습니다. 이를 위해 아래의 미리 설정된 값을 통해 설정할 수 있습니다.
TJEntryPointUnknown //Not set, but removes any value that was already set
TJEntryPointOther
TJEntryPointMainMenu
TJEntryPointHud
TJEntryPointExit
TJEntryPointFail
TJEntryPointComplete
TJEntryPointInbox
TJEntryPointInitialisation
TJEntryPointStore
진입 경로는 플레이스먼트 오브젝트 생성 후, 콘텐츠를 요청하기 전에 호출합니다.
TJPlacement *placement = [TJPlacement placementWithName:@"myPlacement" delegate:nil];
[placement setEntryPoint:TJEntryPointMainMenu];
[placement requestContent];