# SDK

> 了解如何根据 SDK 指南在 Flutter 中请求和显示 Tapjoy 广告位，包括建议的初始化和回调处理做法。

## 请求广告位##requesting-a-placement

创建 TJPlacement 的一个实例，并使用广告位名称对其进行初始化。确保代码中的广告位名称字符串与后台中的广告位名称完全匹配。还可以实现委托来接收回调（下文对此进行了说明）。

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

现在可以请求内容。

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

在请求内容之前，请确保 Tapjoy connect 调用已成功。在收到 onConnectSuccess 回调之前，不要发起请求。

## 预缓存内容##pre-caching-the-content

为了提供最佳用户体验，请在向用户显示内容之前提前请求内容。例如，如果广告位是主菜单上的按钮，您可能需要在应用程序启动时（就在 Tapjoy Connect 调用成功后）为其请求内容。如果等到最后一刻才请求内容，用户很可能需要等待内容加载并看着加载图标旋转。对于广告，这种情况会导致用户不太可能与广告互动，因此不太可能给您带来收入。

## 回调##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，如以上示例中所示。

为了确保功能正常，在创建广告位对象之前，需要先发出 Tapjoy connect 调用并获得成功。

## 重新请求内容##re-requesting-the-content

成功向用户显示广告位中的内容后，必须再次请求内容（例如，再次调用 `placement.requestContent();`），以便为该广告位“重新加载”另一个内容单元。不能再次调用 `placement.showContent();`。如果在请求内容之前尝试显示内容，内容显示将失败。

## 设置入口点##setting-the-entry-point

（可选）您可以将每个广告位的“入口点”告诉 Tapjoy。有多种预设值可供选择：

```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(); 
```
