# SDK

> SDK 가이드를 사용하여 Flutter에서 탭조이 광고 플레이스먼트를 요청하고 표시하는 방법을 알아봅니다. 여기에는 권장되는 초기화와 콜백 처리 관행이 포함됩니다.

## 플레이스먼트 요청##requesting-a-placement

TJPlacement의 인스턴스를 생성하고 플레이스먼트 이름으로 해당 인스턴스를 초기화합니다. 코드의 플레이스먼트 이름 문자열이 대시보드의 플레이스먼트 이름과 정확히 일치해야 합니다. 또한 콜백을 수신하기 위한 델리게이트를 구현할 수 있습니다(아래 설명 참고).

```dart
TJPlacement placement = await TJPlacement.getPlacement();
```

이제 콘텐츠를 요청할 수 있습니다.

```dart
placement.requestContent();
```

콘텐츠를 요청하기 전에 탭조이 연결 호출이 성공해야 합니다. onConnectSuccess 콜백을 수신한 이후 요청해야 합니다.

## 콘텐츠 사전 캐싱##pre-caching-the-content

최적의 사용자 경험을 제공하려면 사용자에게 해당 콘텐츠가 표시되기 전에 콘텐츠를 요청합니다. 예를 들어 플레이스먼트가 메인 메뉴의 버튼이면 탭조이 연결 호출 성공 직후 애플리케이션이 시작될 때 해당 콘텐츠를 요청할 수 있습니다. 마지막 순간까지 대기하여 콘텐츠를 요청하면 사용자가 콘텐츠가 로드될 때까지 기다리고 로딩 스피너를 보게 될 수 있습니다. 이렇게 하면 광고에서 사용자가 광고와 상호 작용할 가능성이 감소하므로 사용자가 수익을 창출할 가능성 역시 줄어듭니다.

## 콜백##callbacks

콘텐츠 요청 상태에 관한 피드백을 받으려면 다음 콜백을 구현합니다.

```dart
TJPlacement placement = await TJPlacement.getPlacement(placementName: 'placementName',
    onRequestSuccess: (placement) {},
    onRequestFailure: (placement, error) {},
    onContentReady: (placement) {},
    onContentShow: (placement) {},
    onContentDismiss: (placement) {}
);
```

## 플레이스먼트 표시##displaying-a-placement

콘텐츠를 표시하려면 `placement.showContent();`를 사용합니다.

`showContent()` 전에 콘텐츠가 준비되었는지 확인합니다.

```dart
if (await placement.isContentReady()) {
  placement.showContent();
}
```

동영상이 포함될 수 있는 플레이스먼트의 콘텐츠를 표시하기 전에 앱 오디오를 음소거로 설정하는 것이 좋습니다. 그렇지 않으면 동영상 오디오와 앱 오디오가 충돌할 수 있습니다.

종종 `onContentReady` 콜백이 작동할 때까지 기다린 후 사용자에게 콘텐츠를 표시하는 것이 좋습니다. 이렇게 하면 콘텐츠가 실제로 디바이스에 있는지 확인할 수 있으며 사용자에게 지연 없이 표시할 수 있습니다. 다른 동등한 방법은 위 예시와 같이 `p.isContentReady()`가 true인지 확인하는 것입니다.

적절한 기능을 제공하려면 플레이스먼트 오브젝트를 생성하기 전에 탭조이 연결 호출을 수행하고 성공해야 합니다.

## 콘텐츠 다시 요청##re-requesting-the-content

플레이스먼트에서 사용자에게 콘텐츠를 성공적으로 표시할 경우 다른 콘텐츠 유닛으로 플레이스먼트를 ‘재로드’하려면 콘텐츠를 다시 요청해야 합니다(예: `placement.requestContent();` 다시 호출). `placement.showContent();`를 다시 호출할 수 없습니다. 콘텐츠를 요청하기 전에 콘텐츠를 표시하려고 하면 콘텐츠가 표시되지 않습니다.

## 엔트리 포인트 설정##setting-the-entry-point

필요에 따라 각 플레이스먼트의 ‘엔트리 포인트’를 탭조이에 제공할 수 있습니다. 선택 가능한 다양한 프리셋 값은 다음과 같습니다.

```dart
TJEntryPoint.entryPointUnknown;
TJEntryPoint.entryPointOther
TJEntryPoint.entryPointMainMenu
TJEntryPoint.entryPointHUD
TJEntryPoint.entryPointExit
TJEntryPoint.entryPointFail
TJEntryPoint.entryPointComplete
TJEntryPoint.entryPointInbox
TJEntryPoint.entryPointInit
TJEntryPoint.entryPointStore
```

플레이스먼트 오브젝트를 생성한 후, 콘텐츠를 요청하기 전에 엔트리 포인트를 설정합니다.

```dart
TJPlacement placement = await TJPlacement.getPlacement("myPlacement");
placement.setEntryPoint(TJEntryPoint.entryPointMainMenu);
placement.requestContent(); 
```
