# SDK /SDK

> Unity SDK ガイドを使用して、ゲーム内通貨やオファーウォールなどの広告プレースメントをリクエスト、表示、処理するためのサンプル コードとともに Tapjoy をプロジェクトに追加する方法を学びます。

## プレースメントのリクエスト##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 の接続呼び出しが成功したことを確認してください。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 コールバックが発生するまで待ってから、ユーザーにコンテンツを表示することをお勧めします。こうすることにより、コンテンツが実際にデバイス上にあること、遅延なくユーザーに表示できることを確認できます。もう 1 つの同等の方法は、上の例のように、`p.IsContentReady()` が true かどうかを確認することです。

正しく動作するには、プレースメントオブジェクトを作成する前に、Tapjoy の接続呼び出しを行って成功する必要があります。

## コンテンツの再リクエスト##re-requesting-the-content

プレースメントからユーザーにコンテンツを正常に表示したら、コンテンツを再度リクエストして (例えば `p.RequestContent();` を再度呼び出し)、別のコンテンツ単位でそのプレースメントを "リロード" する必要があります。`p.ShowContent();` を再度呼び出すことはできません。コンテンツをリクエストする前にコンテンツを表示しようとすると、コンテンツの表示に失敗します。

動画コンテンツを想定しているプレースメントの場合、コンテンツを再リクエストする適切なタイミングは、コンテンツの表示直後です。ユーザーが現在の動画を見ている間に、次の動画が事前ロードされます。コンテンツが却下されるまで待ってからコンテンツを再リクエストすると、ユーザーがすぐに別の動画を視聴しようとした場合は遅延が発生します。

## Tapjoy コンテンツアクションリクエストの処理##handling-tapjoy-content-action-requests

Reward (ゲーム内報酬) や IAP Promotion (アプリ内課金プロモーション) などの Tapjoy コンテンツタイプでは、そのコンテンツ単位で渡されたパラメーターに基づいてコードがアクションを実行する必要があります。例えば、Reward コンテンツ単位はアイテム名 (string) と数量 (integer) がユーザーに渡されることを指定します。ゲーム内報酬を反映するためにユーザーの広告在庫を実際に調整するのはアプリケーションです。以下のデリゲートメソッドが呼び出され、コンテンツ単位から適切な情報が渡されます。

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