# SDK

> 查看 Unity SDK 指南了解如何将 Tapjoy 添加到项目中，并参考示例代码以请求、显示和处理广告位（如虚拟货币或 Offerwall）。

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

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

```csharp
TJPlacement p = TJPlacement.CreatePlacement("APP_LAUNCH");
```

现在可以请求内容。

```csharp
if (Tapjoy.IsConnected()) {
    p.requestContent();
} else {
    Debug.LogWarning("Tapjoy SDK must be connected before you can request content.");
}
```

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

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

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

## 回调##callbacks

要获取有关内容请求状态的反馈，请实现以下回调：

```csharp
TJPlacement.OnRequestSuccess += HandlePlacementRequestSuccess;
...
public void HandlePlacementRequestSuccess(TJPlacement placement) {
...
}

TJPlacement.OnRequestFailure += HandlePlacementRequestFailure;
...
public void HandlePlacementRequestFailure(TJPlacement placement, string error) {
}
TJPlacement.OnContentReady += HandlePlacementContentReady;
...
public void HandlePlacementContentReady(TJPlacement placement) {
    // This gets called when content is ready to show.
}

TJPlacement.OnContentShow += HandlePlacementContentShow;
...
public void HandlePlacementContentShow(TJPlacement placement) {
...
}
TJPlacement.OnContentDismiss += HandlePlacementContentDismiss;
...
public void HandlePlacementContentDismiss(TJPlacement placement) {
...
}
```

## 显示广告位##displaying-a-placement

要显示内容，请使用 `p.ShowContent();`。

请进行检查以确保内容在 `ShowContent()` 前已准备就绪：

```csharp
if (p.IsContentReady()) {
    p.ShowContent();
} else {
    // Code to handle situation where content is not ready goes here
}
```

最好是在显示可能包含视频的广告位的内容之前先将应用的音频静音，否则视频的音频与应用的音频可能会发生冲突。

通常，最好等到 HandlePlacementContentReady 回调触发之后再向用户显示内容。这样就可以确保内容已实际位于设备上，并可立即向用户显示而不会有延迟。另一种等效方法是检查 `p.IsContentReady()` 是否为 true，如以上示例中所示。

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

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

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

对于需要视频内容的广告位，重新请求内容的最佳时机是在内容显示结束后立即进行。这样就会在用户观看当前视频时预加载下一个视频。如果您等到内容消失后再重新请求内容，而用户立即尝试观看另一个视频，则会出现延迟。

## 处理 Tapjoy 内容操作请求##handling-tapjoy-content-action-requests

某些 Tapjoy 内容类型（如奖励和内购推荐）要求代码根据该内容单元传递的参数执行操作。例如，奖励内容单元指定要奖励给用户的物品名称（字符串）和数量（整数）。实际调整用户背包以反映奖励结果的行为由应用程序处理。需调用以下委托方法并从内容单元传递相应信息：

```csharp
TJPlacement.OnPurchaseRequest += HandleOnPurchaseRequest;
...
public void HandleOnPurchaseRequest(TJPlacement placement, TJActionRequest request, string productId) {

...
}
TJPlacement.OnRewardRequest += HandleOnRewardRequest;
...
public void HandleOnRewardRequest(TJPlacement placement, TJActionRequest request, string itemId, int quantity) {
...
}
```

> **Note:**
>
> `HandleOnRewardRequest` 不是 Tapjoy 奖励用户与广告交互时调用的函数。此函数仅用于 Reward Giveaway（奖励赠送）内容单元。

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

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

```csharp
TJEntryPoint.UNKNOWN
TJEntryPoint.OTHER
TJEntryPoint.MAIN_MENU
TJEntryPoint.HUD
TJEntryPoint.EXIT
TJEntryPoint.FAIL
TJEntryPoint.COMPLETE
TJEntryPoint.INBOX
TJEntryPoint.INIT
TJEntryPoint.STORE 
```

在创建广告位对象之后但在请求内容之前设置入口点：

```csharp
TJPlacement placement = TJPlacement.CreatePlacement("placementName");
placement.SetEntryPoint(TJEntryPoint.COMPLETE); 
```
