> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Native と Android Studio 向け Java クイックスタート

> PlayFab Java クライアント SDK の JAR ファイルをダウンロードし、classpath を設定して、ネイティブ Java または Android で最初の LoginWithCustomID API 呼び出しを行います。

このクイックスタートでは、PlayFab JavaSDK とシンプルな Java プログラムを使用して動作させるまでの手順を説明します。

PlayFab API を呼び出す前に、[PlayFab 開発者アカウント](https://developer.playfab.com) が必要です。

このチュートリアルの目標は次のとおりです。

* 必要な JAR ファイルを取得する。

* JAR ファイルを classpath に追加する。

* [Custom ID Login API 呼び出し](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid) を実行する最小限の Java コンソール アプリケーションを作成する。

## 必要な JAR ファイルを取得する

PlayFab JavaSDK を利用するには、PlayFab Client JavaSDK と、その依存関係である Google GSON が必要です。

PlayFab Client JavaSDK JAR ライブラリは [こちら](https://github.com/PlayFab/JavaSDK/tree/versioned/builds) からダウンロードできます。**client-sdk-\*.jar** と、対応する Java Doc \[オプションですが便利です] を探してください。

最新の Google GSON は [こちら](https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.0/) からダウンロードできます。**gson-\*.jar** を探してください。

## Intellij Idea でのプロジェクト セットアップ

シンプルな Intellij Idea Java プロジェクトを初期化したら、以下の例に示すように、必要な JAR ファイルを配置してください。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-proj-setup.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=85dc548792dd8ba7c4dffd3eaddd3d43" alt="Intellij - プロジェクト セットアップ" width="473" height="299" data-path="images/playfab/sdks/java/intellij-proj-setup.png" />

次のステップは、JAR ファイルを classpath に追加することです。以下の例のように、**File** -> **,** に移動します。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-add-jar-files-to-classpath.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=167ce0cbbce7cefb93979d2ccfa8b896" alt="Intellij - jar ファイルを classpath に追加" width="388" height="435" data-path="images/playfab/sdks/java/intellij-add-jar-files-to-classpath.png" />

**Libraries** に移動し、以下の画像に示すように新しい Java ライブラリを追加します。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-add-new-java-library.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=db7b46a3ccb01057f0d1e66474ab828c" alt="Intellij - 新しい Java ライブラリを追加" width="395" height="361" data-path="images/playfab/sdks/java/intellij-add-new-java-library.png" />

libs フォルダーに追加した JAR ファイルを選択し、以下のように **OK** を選択します。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-select-jar-files.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=e60d7b28a9a1880a0ddd32661d6c7765" alt="Intellij - jar ファイルを選択" width="574" height="529" data-path="images/playfab/sdks/java/intellij-select-jar-files.png" />

**Module** を尋ねられた場合は、リストの最初のものを選択します。すべての JAR ファイルがライブラリ リストに追加されていることを確認してください。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-ensure-jar-files-added.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=6dc524df20ee6c2b4a2cb3a894fd83c2" alt="Intellij - jar ファイルが追加されていることを確認" width="876" height="372" data-path="images/playfab/sdks/java/intellij-ensure-jar-files-added.png" />

## その他の IDE でのプロジェクト セットアップ

主な要件は、JAR ファイルを classpath に追加することです。JAR ファイルを classpath に追加する方法については、お使いの IDE のガイドを参照してください。

## 最初の API 呼び出しをセットアップする

以下のコードをメイン クラス コードとして使用します。

```java theme={null}
import java.util.concurrent.*;
import java.util.*;

import com.playfab.PlayFabErrors.*;
import com.playfab.PlayFabSettings;
import com.playfab.PlayFabClientModels;
import com.playfab.PlayFabClientAPI;

public class Main
{
    private static boolean _running = true;

    public static void main(String[] args) {
        PlayFabSettings.TitleId = "144";

        PlayFabClientModels.LoginWithCustomIDRequest request = new PlayFabClientModels.LoginWithCustomIDRequest();
        request.CustomId = "GettingStartedGuide";
        request.CreateAccount = true;

        FutureTask<PlayFabResult<com.playfab.PlayFabClientModels.LoginResult>> loginTask = PlayFabClientAPI.LoginWithCustomIDAsync(request);
        loginTask.run();

        while (_running) {
            if (loginTask.isDone()) { // You would probably want a more sophisticated way of tracking pending async API calls in a real game
                OnLoginComplete(loginTask);
            }

            // Presumably this would be your main game loop, doing other things
            try {
                Thread.sleep(1);
            } catch(Exception e) {
                System.out.println("Critical error in the example main loop: " + e);
            }
        }
    }

    private static void OnLoginComplete(FutureTask<PlayFabResult<com.playfab.PlayFabClientModels.LoginResult>> loginTask) {
        PlayFabResult<com.playfab.PlayFabClientModels.LoginResult> result = null;
        try {
            result = loginTask.get(); // Wait for the result from the async call
        } catch(Exception e) {
            System.out.println("Exception in PlayFab api call: " + e); // Did you assign your PlayFabSettings.TitleId correctly?
        }

        if (result != null && result.Result != null) {
            System.out.println("Congratulations, you made your first successful API call!");
        } else if (result != null && result.Error != null) {
            System.out.println("Something went wrong with your first API call.");
            System.out.println("Here's some debug information:");
            System.out.println(CompileErrorsFromResult(result));
        }

        _running = false; // Because this is just an example, successful login triggers the end of the program
    }

    // This is a utility function we haven't put into the core SDK yet. Feel free to use it.
    private static <RT> String CompileErrorsFromResult(PlayFabResult<RT> result) {
        if (result == null || result.Error == null)
            return null;

        String errorMessage = "";
        if (result.Error.errorMessage != null)
            errorMessage += result.Error.errorMessage;
        if (result.Error.errorDetails != null)
            for (Map.Entry<String, List<String>> pair : result.Error.errorDetails.entrySet() )
                for (String msg : pair.getValue())
                    errorMessage += "\n" + pair.getKey() + ": " + msg;
        return errorMessage;
    }
}
```

## 完了して実行する

アプリケーションを実行するには:

1. 右上の **再生の矢印 >** を選択します。プログラムの実行が開始され、出力パネルが表示されます。
2. **デバッグ メッセージ** を確認します。これは API 呼び出しが成功したことを示します。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-run-program.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=04ce4add6100b9b56db869bf97baadbb" alt="Intellij - プログラムを実行" width="968" height="719" data-path="images/playfab/sdks/java/intellij-run-program.png" />

この時点で、他の API 呼び出しを開始し、ゲームを構築できます。

利用可能なすべてのクライアント API 呼び出しの一覧については、[PlayFab API リファレンス](/services/playfab/api-references) のドキュメントを参照してください。

## コードの詳細解説

このオプションの最終セクションでは、`GettingStarted.java` の各行を詳細に説明します。

* インポート
  * PlayFab API 呼び出しに使用される最小限のインポート セットです。

* public static void `main(String[] args) {`
  * API 呼び出しを開始し、完了するまで待機するだけの基本的なループです。

  * `PlayFabSettings.TitleId = "xxxx"`;
    * すべての PlayFab 開発者は、Game Manager でタイトルを作成します。ゲームを公開する際、その titleId をゲームにコーディングする必要があります。これにより、クライアントは PlayFab 内の正しいデータへのアクセス方法を知ることができます。ほとんどのユーザーにとって、これは PlayFab を動作させるために必要な手順と考えてください。

  * `PlayFabClientModels.LoginWithCustomIDRequest request = new PlayFabClientModels.LoginWithCustomIDRequest();`
    * ほとんどの PlayFab API メソッドは入力パラメーターを必要とし、それらの入力パラメーターはリクエスト オブジェクトにまとめられます。

    * すべての API メソッドには、オプションと必須のパラメーターが混在した一意のリクエスト オブジェクトが必要です。
      * `LoginWithCustomIDRequest` には、プレイヤーを一意に識別する必須パラメーター `CustomId` と、この呼び出しで新しいアカウントの作成を許可する `CreateAccount` があります。

    * ログインについては、ほとんどの開発者はより適切なログイン メソッドを使用することを望むでしょう。
      * すべてのログイン メソッドと入力パラメーターの一覧については、PlayFab のログイン ドキュメントを参照してください。一般的な選択肢は次のとおりです。
        * `LoginWithAndroidDeviceID`
        * `LoginWithIOSDeviceID`
        * `LoginWithEmailAddress`

  * `FutureTask<PlayFabResult<com.playfab.PlayFabClientModels.LoginResult>> loginTask = PlayFabClientAPI.LoginWithCustomIDAsync(request)`;
    * これは、Java FutureTask フレームワークを使用して `LoginWithCustomID` への非同期リクエストを開始します。

  * While (running) `{ if (loginTask.isDone()) { OnLoginComplete(loginTask); } }`
    * 単純なメイン ループを実行し、loginTask の完了を非同期に待機します。
    * 完了したら `OnLoginComplete` を呼び出します。

* `OnLoginComplete (loginTask)`
  * `result = loginTask.get()`;
    * 非同期の結果を取得します (FutureTask が既に完了していることを確認済みなので、ブロックは発生しません)。

  * if (`result.Result != null`) の場合、API 呼び出しは成功しています。
    * 成功した場合、多くの API コールバックの `result.Result` オブジェクトには要求された情報が含まれます。

    * `LoginResult` には特にプレイヤーに関する基本情報が含まれます。ただし、ほとんどのユーザーにとって、ログインは他の API を呼び出す前の必須ステップです。

  * if (`result.Error != null`) の場合、API 呼び出しは失敗しています。
    * API 呼び出しはさまざまな理由で失敗する可能性があるため、常に失敗を処理するようにしてください。
    * API 呼び出しが失敗する理由 (可能性の高い順)
      * `PlayFabSettings.TitleId` が設定されていない。`TitleId` をタイトルに設定するのを忘れた場合、何も動作しません。
      * リクエスト パラメーター。特定の API 呼び出しに対して正しい情報や必要な情報を提供していない場合、失敗します。詳細については、`error.errorMessage`、`error.errorDetails`、または `error.GenerateErrorReport()` を参照してください。
      * デバイスの接続の問題。携帯電話は接続を頻繁に失ったり回復したりします。そのため、いつでも API 呼び出しがランダムに失敗し、その後すぐに動作することがあります。トンネルに入ると、完全に切断される可能性があります。
      * PlayFab サーバーの問題。すべてのソフトウェアと同様に、問題が発生する可能性があります。更新については [リリース ノート](/services/playfab/release-notes) を参照してください。
      * インターネットは 100% 信頼できるわけではありません。メッセージが破損したり、PlayFab サーバーに到達しなかったりすることがあります。

  * 問題のデバッグに苦労しており、エラー情報内の情報だけでは不十分な場合は、[フォーラム](https://community.playfab.com/index.html) にアクセスしてください。


## Related topics

- [Native と Phaser 向け JavaScript クイックスタート](/ja-jp/services/playfab/sdks/javascript/quickstart.md)
- [クイックスタート Android](/ja-jp/services/playfab/sdks/c/quickstart-android.md)
- [Windows 向け C++ クイックスタート](/ja-jp/services/playfab/sdks/playfab-cpp/quickstart-windows.md)
- [Lobby SDK クイックスタート](/ja-jp/services/playfab/multiplayer/lobby/lobby-getting-started.md)
- [Linux 向け C++ クイックスタート](/ja-jp/services/playfab/sdks/playfab-cpp/quickstart-linux.md)
