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

> 앱의 기존 아이언소스 오퍼월 구현에서 탭조이 오퍼월로 전환하려면 단계별 마이그레이션 설명을 따릅니다.

1. 먼저 아이언소스 탭조이 어댑터를 연동해야 합니다. 이렇게 podfile에 추가할 수 있습니다.

```ruby
pod 'IronSourceTapjoyAdapter','4.1.23.1'
```

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

2. 이 어댑터에는 Offerwall SDK 사본이 함께 제공되므로 Offerwall SDK 함수를 직접 호출할 수 있습니다. 탭조이 오퍼월을 표시하는 데 필요한 작업입니다. 먼저 탭조이를 다음 클래스로 임포트해야 합니다.

```objective-c title="Objective-C"
#import <Tapjoy/TJPlacement.h>
```

3. 그런 다음 Offerwall SDK를 초기화해야 합니다 성공하거나 실패하면 콜백이 수신되며, 성공 콜백을 수신하기 전까지 Offerwall SDK 호출은 수행할 필요가 없습니다.

```objective-c title="Objective-C"
[Tapjoy connect:@"TJ_SDK_KEY"];
    
- (void)tjcConnectSuccess:(NSNotification *)notifyObj 
{
    NSLog(@"Tapjoy connect succeeded");
}

- (void)tjcConnectFail:(NSNotification *)notifyObj 
{
    NSLog(@"Tapjoy connect failed");
}
```

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

```objective-c title="Objective-C"
TJPlacement *placement = [TJPlacement placementWithName:@"Offerwall" delegate:self];
```

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

```objective-c title="Objective-C"
[p requestContent];
```

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

```objective-c title="Objective-C"
- (void)requestDidSucceed:(TJPlacement*)placement{}
- (void)requestDidFail:(TJPlacement*)placement error:(NSError*)error{}
- (void)contentIsReady:(TJPlacement*)placement{}
- (void)contentDidAppear:(TJPlacement*)placement{} 
- (void)contentDidDisappear:(TJPlacement*)placement{}
```

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

| 아이언소스 콜백                        | 탭조이 콜백              |
| ------------------------------- | ------------------- |
| offerwallDidShow                | contentDidAppear    |
| offerwallDidClose               | contentDidDisappear |
| offerwallHasChangedAvailability | contentIsReady      |

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

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

```objective-c title="Objective-C"
if (placement.isContentReady) {
   [placement showContentWithViewController:nil];
}
```

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

```objective-c title="Objective-C"
[IronSource showOfferwallWithViewController:UIViewController];
```

`showContent` 메서드는 뷰 컨트롤러 인자를 취합니다. nil을 전달하고 탭조이에서 뷰 컨트롤러를 생성하도록 허용하는 것이 좋습니다. 대부분의 경우에 맞는 가장 안전한 옵션입니다. 복잡한 뷰 계층 구조가 있고 어떤 이유로든 디스플레이를 직접 관리하고 싶으면 이 메서드에 전달된 ViewController가 최상위 뷰이고 다른 뷰로 인해 방해받지 않고 탭조이 콘텐츠가 닫힌 후에 다른 뷰가 이 뷰 위에 배치되지 않도록 해야 합니다.

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

9. 이제 남아 있는 아이언소스 오퍼월 코드를 제거할 수 있습니다. 예제는 아래와 같습니다.

```objective-c title="Objective-C"
[IronSource setOfferwallDelegate:yourOfferwallDelegate];
```

동등한 탭조이 버전으로 전환하지 않은 콜백도 마찬가지입니다. 레벨플레이 SDK를 초기화할 때 `@[IS_OFFERWALL]`을 지정하면 이 인수도 제거할 수 있습니다.

### 개인정보##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(아동 온라인 프라이버시 보호법)에 따라 앱의 주요 대상이 아동인 경우 모든 최종 사용자의 플래그를 아동으로 지정해야 합니다.

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