# 오퍼월 마이그레이션 가이드

> 기존 아이언소스 콜백을 onContentReady와 onContentDismiss 등의 탭조이에 상응하는 항목에 매핑하여 오퍼월 로직을 마이그레이션합니다.

1. 아이언소스 탭조이 어댑터를 연동합니다. 다음 예시와 유사하게 Gradle 파일에 추가할 수 있습니다.

```java
maven { url "https://sdk.tapjoy.com/"}
implementation 'com.ironsource.adapters:tapjoyadapter:4.1.23'
implementation 'com.tapjoy:tapjoy-android-sdk:12.11.1'
```

최신 어댑터 버전은 [여기](/grow/levelplay/sdk/android/mediation-networks.md)에서 찾을 수 있습니다.

2. 표시되는 바와 같이 어댑터와 함께 Offerwall SDK를 추가하여 Offerwall SDK 함수를 직접 호출합니다. 탭조이 오퍼월을 표시하는 데 필요한 작업입니다. 먼저 탭조이를 다음 클래스로 임포트해야 합니다.

```java
import com.tapjoy.Tapjoy;
```

3. Offerwall SDK를 초기화합니다. 성공하거나 실패하면 콜백이 수신되며, 성공 콜백을 수신하기 전까지 Offerwall SDK 호출은 수행되지 않습니다.

```java
Hashtable<String, Object> connectFlags = new 
Hashtable<String, Object>();

Tapjoy.connect(getApplicationContext(), "TJ_SDK_KEY", connectFlags, new TJConnectListener() {
  @Override
  public void onConnectSuccess() {

  } 
      
  @Override
  public void onConnectFailure() {

  }
});
```

4. 다음 2가지 새로운 클래스 변수를 정의합니다.

```java
private TJPlacementListener placementListener = this;
private TJPlacement placement;
```

5. 플레이스먼트 오브젝트를 설정합니다. 플레이스먼트는 Tapjoy 대시보드에서 설정하고, 오퍼월 콘텐츠 카드가 포함됩니다. 이 예시에서는 플레이스먼트의 이름을 ‘Offerwall’이라고 가정합니다. 실제로는 원하는 대로 이름을 지정할 수 있지만 코드에서 사용하는 이름은 대시보드와 일치해야 합니다.

```java
placement = Tapjoy.getPlacement("Offerwall", placementListener);
```

6. 이제 플레이스먼트를 요청할 준비가 되었습니다. 이 호출로 플레이스먼트를 로드하여 사용자가 표시하기로 선택했을 때 준비되도록 합니다. 오퍼월 플레이스먼트는 빠르게 로드되어야 하지만, 오퍼월을 표시할 때보다 사전에 호출하는 것이 좋습니다.

```java
placement.requestContent();
```

7. 구현할 수 있는 다양한 콜백을 제공합니다.

```java
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);
public void onPurchaseRequest(TJPlacement placement, TJActionRequest request, String productId);
public void onRewardRequest(TJPlacement placement, TJActionRequest request, String itemId, int quantity);
public void onClick(TJPlacement placement);
```

이 중 일부는 이미 구현한 아이언소스 콜백(`OfferwallListener` 사용 가능)을 대체할 수 있습니다. 커스텀 로직을 적절한 탭조이 콜백으로 쉽게 이전할 수 있도록 아래 표에서 해당 콜백을 확인할 수 있습니다.

| 아이언소스 콜백             | 탭조이 콜백           |
| -------------------- | ---------------- |
| onOfferwallOpened    | onContentShow    |
| onOfferwallClosed    | onContentDismiss |
| onOfferwallAvailable | onContentReady   |

콘텐츠 요청이 탭조이의 서버에서 반환되면 `onRequestSuccess`가 호출됩니다. 콘텐츠(오퍼월)가 표시될 준비가 되면 `onContentReady`가 호출됩니다. 이 시점에서 오퍼월을 표시하거나 필요 시 표시할 준비가 되도록 몇 가지 플래그를 설정할 수 있습니다.

8. 오퍼월 플레이스먼트를 표시하려면 콘텐츠가 준비되었는지 확인한 다음 `showContent`를 호출합니다.

```java
if(placement.isContentReady()) {
  placement.showContent();
}
```

기존 아이언소스 호출을 대체합니다.

```java
IronSource.showOfferwall();
```

9. 사용자가 오퍼월을 닫으면 콘텐츠를 다시 요청해야 합니다. 여러 번 플레이스먼트를 표시할 수 없습니다. 다음에 사용자가 요청할 때 다시 표시할 준비가 되도록 `onContentDismiss` 콜백에서 플레이스먼트를 요청하는 것을 권장합니다.

10. 이제 남아 있는 아이언소스 오퍼월 코드를 제거할 수 있습니다. 예를 들어 아이언소스 오퍼월 리스너를 더 이상 설정할 필요가 없으며 클래스에서 `OfferwallListener`를 구현하면 이 레퍼런스를 제거합니다.

### 개인정보##privacy

Unity 레벨플레이를 사용하는 경우 레벨플레이 API를 사용하여 Tapjoy와 다음의 개인정보 보호 플래그를 공유할 수 있습니다.

1. [GDPR을 동의](/grow/is-ads/legal-resources/ironsource-gdpr-compliance.md)합니다.
2. [미국의 개인정보 보호법에 따라 개인정보를 판매하거나 공유하는 것을 거부](/grow/is-ads/legal-resources/ironsource-us-state-privacy-laws.md)합니다.
3. [특정 최종 사용자의 플래그를 아동으로 지정](/grow/is-ads/legal-resources/children-child-directed-apps.md)합니다. COPPA(아동 온라인 프라이버시 보호법)에 따라 앱의 주요 대상이 아동인 경우 모든 최종 사용자의 플래그를 아동으로 지정해야 합니다.

또한 앱이 Google Play가 설계한 가족을 위한 앱 프로그램에 참여하거나 Google Play의 ‘가족’ 섹션에 표시되는 경우 모든 앱 사용자의 플래그를 아동으로 지정하고 사용자의 GAID를 수집하지 않도록 Offerwall SDK의 [이 API](../advanced/user-privacy)를 사용합니다.

Unity 레벨플레이를 사용하지 않거나 오퍼월 SDK를 별도로 설정하려면 이 가이드라인에 따라 [탭조이](../advanced/user-privacy)와 관련 개인정보 보호 플래그를 공유합니다.
