# SDK /SDK

> TJPlacement クラスを使用して広告プレースメントをリクエストする方法について基本の SDK ドキュメントを参照して、プレースメント名が Tapjoy ダッシュボードで設定されている名前と一致することを確認してください。

## プレースメントのリクエスト##requesting-a-placement

プレースメントをリクエストするには、`TJPlacement` クラスを使用します。コード内のプレースメント名の文字列が、ダッシュボード内のプレースメント名と正確に一致していることを確認します。

```java title="Java"
TJPlacementListener placementListener = this;
TJPlacement p = Tapjoy.getPlacement("[PLACEMENT_NAME]", placementListener);
```

リスナーメソッドを配置し、プレースメントをインスタンス化したら、そのプレースメントのコンテンツをリクエストできます。

```java title="Java"
if(Tapjoy.isConnected())
	p.requestContent();
else
	Log.d("MyApp", "Tapjoy SDK must finish connecting before requesting content.")
```

コンテンツをリクエストする前に、Tapjoy の接続呼び出しが成功したことを確認してください。`onConnectSuccess` コールバックを受け取る前にリクエストを行わないでください。

## コンテンツの事前キャッシュ##pre-caching-the-content

最高のユーザー体験を提供するために、ユーザーにそのコンテンツが表示されるコンテンツを事前にリクエストします。例えば、プレースメントがメインメニューのボタンの場合、アプリケーションの起動時に、Tapjoy Connect の呼び出しが成功した直後にコンテンツをリクエストすることをお勧めします。コンテンツをリクエストするまで待つと、多くの場合、ユーザーはコンテンツがロードされるまで、ローディングスピナーを見ながら待たされることになります。広告の場合、ユーザーが広告に関与する可能性が低くなり、収益を得る可能性が低くなります。

## リスナー##listeners

さまざまなプレースメント応答をハンドルするためにデリゲートメソッドを準備する必要があります。少なくとも、クラスで TJPlacementListener インターフェースを拡張する必要があります (パブリッククラス YourMainActivity で拡張し、Activity で TJPlacementListener を実装します)。

`TJPlacementListener` インターフェースによって定義される主なメソッドは次のとおりです。

```java title="Java"
public void onRequestSuccess(TJPlacement placement); // This just means the SDK has made contact with the Offerwall servers. It does not necessarily mean that any content is available.
public void onRequestFailure(TJPlacement placement, TJError error);
public void onContentReady(TJPlacement placement); //This is called when the content is actually available to display.
public void onContentShow(TJPlacement placement);
public void onContentDismiss(TJPlacement placement);
```

お勧めのベストプラクティスは、ビデオを含む可能性のあるプレースメントからコンテンツを表示する前にオーディオをミュートすることです。ミュートしないと、ビデオとアプリのオーディオが競合する可能性があります。

多くの場合、onContentReady デリゲートが発生するまで待ってから、ユーザーにコンテンツを表示することをお勧めします。こうすることにより、コンテンツが実際にデバイス上にあること、遅延なくユーザーに表示できることを確認できます。もう 1 つの同等の方法は、上の例のように、p.isContentReady() が true かどうかを確認することです。

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

## プレースメントの表示##show-a-placement

TJPLacement をリクエストするときは、TJPLacementListener オブジェクトを渡します。TJPlacementListener には "onRequestSuccess" のコールバックがあります。onRequestSuccess コールバックは、SDK によるサーバーへのコンテンツリクエストが正常に行われた後に発生します。これが発生すると、isContentAvailable 関数を呼び出すことで TJPlacement にコンテンツがあるかどうかを確認できます。

```java title="Java"
public void onRequestSuccess(TJPlacement tjPlacement)
{
	if(tjPlacement.isContentAvailable())
	{
		//There is an ad unit available
	}
	else 
	{
		//Fall-through
  }
}
```

> **Note:**
>
> `isContentAvailable` は、利用可能な広告があることを意味しますが、ダウンロードが終了したことを意味するものではありません。広告のロードが完了すると、TJPlacementListener の `onContentReady` 関数が呼び出されます。また、TJPlacement オブジェクトで `isContentReady` を呼び出して、ロードが完了したかどうかを確認することもできます。`showContent` 関数を呼び出すことで、ロード完了後にいつでも広告を表示できます。

```java title="Java"
public void onContentReady(TJPlacement tjPlacement) 
{
	if(tjPlacement.isContentReady()) 
	{
		// We can uncomment the following line to show the ad as soon as it finishes loading,
		// or call showContent at a later point when we're ready to display the ad.
	    tjPlacement.showContent();
	}
}
```

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

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

コンテンツの準備ができたら、コンテンツを表示できます。

```java title="Java"
if(p.isContentReady()) {
    p.showContent();
}
else {
    //handle situation where there is no content to show, or it has not yet downloaded.
}
```

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

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

```java title="Java"
public void onPurchaseRequest(TJPlacement placement, TJActionRequest request, String productId); //onPurchaseRequest called when user clicks the product link in IAP promotion content. Put the code that actually triggers the IAP here.
//
//
public void onRewardRequest(TJPlacement placement, TJActionRequest request, String itemId, int quantity); //called when the content closed in reward content
```

> **Note:**
>
> `onRewardRequest` は、Tapjoy が広告を操作したユーザーに報酬を与えるときに呼び出されるものではありません。Reward コンテンツ単位にのみ使用されます。

## エントリーポイントの設定##setting-the-entry-point

任意で、各プレースメントのエントリーポイントを Tapjoy に伝えることができます。以下のさまざまなプリセット値から選択できます。

```java title="Java"
TJEntryPoint.ENTRY_POINT_UNKNOWN
TJEntryPoint.ENTRY_POINT_OTHER
TJEntryPoint.ENTRY_POINT_MAIN_MENU
TJEntryPoint.ENTRY_POINT_HUD
TJEntryPoint.ENTRY_POINT_EXIT
TJEntryPoint.ENTRY_POINT_FAIL
TJEntryPoint.ENTRY_POINT_COMPLETE
TJEntryPoint.ENTRY_POINT_INBOX
TJEntryPoint.ENTRY_POINT_INIT
TJEntryPoint.ENTRY_POINT_STORE 
```

プレースメントオブジェクトの作成後、かつコンテンツをリクエストする前にエントリーポイントを設定します。

```java title="Java"
TJPlacement placement = Tapjoy.getPlacement("myPlacement", null);
placement.setEntryPoint(TJEntryPoint.ENTRY_POINT_MAIN_MENU);
placement.requestContent(); 
```
