# Offerwall 迁移指南

> 按照分步迁移说明从应用中实现的现有 ironSource Offerwall 过渡到 Tapjoy Offerwall。

1. 首先需要集成 ironSource Tapjoy 适配器。可按如下方式将其添加到 podfile：

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

您可以在[此处](/grow/levelplay/sdk/ios/mediation-networks.md)找到最新版的适配器。

2. 适配器附带 Offerwall SDK 副本，因此可以直接调用 Offerwall SDK 函数。我们需要这样做才能显示 Tapjoy Offerwall。首先，需要将 Tapjoy 导入您的类：

```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 内容卡片。在以下示例中，假设您已将广告位命名为“Offerwall”。实际上，您可以将其命名为任何名称，但此处在代码中使用的名称必须与后台上的名称匹配。

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

5. 您现在可以请求广告位了。通过以下调用来加载广告位，以便在需要显示广告位时广告位准备就绪。Offerwall 广告位应该会快速加载，但最好在显示 Offerwall 之前进行此调用。

```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{}
```

以上有一些回调可以替换您可能已经实现的 ironSource 回调。下表显示了相应的回调，便于您将自定义逻辑移到相应的 Tapjoy 回调中：

| ironSource 回调                   | Tapjoy 回调           |
| ------------------------------- | ------------------- |
| offerwallDidShow                | contentDidAppear    |
| offerwallDidClose               | contentDidDisappear |
| offerwallHasChangedAvailability | contentIsReady      |

从 Tapjoy 服务器返回内容请求时，将调用 `requestDidSuceed`。当内容 (Offerwall) 准备好显示时，将调用 `contentIsReady`。此时，您可以显示 Offerwall，或设置某种标志，以便在需要时知道其已准备好显示。

7. 要显示 Offerwall 广告位，请检查内容是否已准备就绪，然后调用 `showContent`：

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

此调用将替换您现有的 ironSource 调用：

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

`showContent` 方法接受视图控制器参数。建议您传递 nil 并允许 Tapjoy 为您创建视图控制器。在大多数情况下，这是最安全的选项。如果您的视图层级结构很复杂，并且出于某种原因希望自己管理广告显示，则必须确保传递给此方法的 ViewController 是最顶层的视图，此视图未被其他视图遮挡，并且在 Tapjoy 内容被移除之前，其他视图没有置于此视图之上。

8. 用户关闭 Offerwall 后，您必须再次请求内容。您不能多次显示广告位。建议您在 `contentDidDisappear` 回调中请求广告位，以便下次用户请求时准备好再次显示。

9. 现在可以移除所有剩余的 ironSource Offerwall 代码。例如：

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

还可以移除所有未转换为等效 Tapjoy 版本的回调。如果在初始化 LevelPlay SDK 时指定 `@[IS_OFFERWALL]`，也可以移除此参数。

### 隐私##privacy

如果您使用 Unity LevelPlay，则可以使用 LevelPlay 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 LevelPlay，或者希望单独配置 Offerwall SDK，请按照[这些准则](../advanced/user-privacy)与 Tapjoy 共享相关的隐私标志。
