Native 및 Android Studio용 Java 빠른 시작

이 빠른 시작을 사용하면 PlayFab JavaSDK와 간단한 Java 프로그램을 구동하여 실행할 수 있습니다.

PlayFab API를 호출하려면 먼저 PlayFab 개발자 계정이 있어야 합니다.

이 자습서의 목표는 다음과 같습니다.

  • 필요한 JAR 파일을 획득합니다.

  • JAR 파일을 클래스 경로에 추가합니다.

  • 사용자 지정 ID 로그인 API 호출을 실행하는 가장 작은 Java 콘솔 응용 프로그램을 만듭니다.

필요한 JAR 파일 획득

PlayFab JavaSDK를 활용하려면 PlayFab 클라이언트 JavaSDK 및 그 종속인 Google GSON이 필요합니다.

여기에 PlayFab 클라이언트 JavaSDK JAR 라이브러리를 다운로드합니다. client-sdk-*.jar 및 해당 Java 문서 [선택 사항이지만 유용합니다]를 찾습니다.

여기에서 최신 Google GSON을 다운로드할 수 있습니다. gson *.jar을 찾습니다.

Intellij Idea로 프로젝트 설정

간단한 Intellij Idea Java 프로젝트를 초기화한 후, 필수 JAR 파일을 아래 예시와 같은 위치에 배치해야 합니다.

Intellij - 프로젝트 설정

다음 단계는 JAR 파일을 클래스 경로에 추가하는 것입니다. 아래 예시와 같이 파일 ->,(으)로 이동합니다.

Intellij - 클래스 경로에 jar 파일 추가

라이브러리로 이동하고 아래 이미지와 같이 Java 라이브러리를 추가합니다.

Intellij - 새 Java 라이브러리 추가

libs 폴더에 추가한 JAR 파일을 선택한 다음 아래와 같이 확인을 선택합니다.

Intellij - jar 파일 선택

모듈을 묻는 메시지가 표시되면 목록에서 첫 번째 모듈을 선택합니다. 모든 JAR 파일이 라이브러리 목록에 추가되었는지 확인합니다.

Intellij - jar 파일이 추가되었는지 확인

임의 IDE로 프로젝트 설정

주 요구 사항은 JAR 파일을 클래스 경로에 추가하는 것입니다. 클래스 경로에 JAR 파일을 추가하는 방법은 IDE에 대한 가이드를 참조하세요.

첫 번째 API 호출 설정

아래에 표시된 코드를 주 클래스 코드로 사용합니다.

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 호출이 성공했음을 나타냅니다.

Intellij - 프로그램 실행

이 시점에서 다른 API 호출을 만들고 게임을 빌드할 수 있습니다.

사용 가능한 모든 클라이언트 API 호출 목록을 보려면 PlayFab API 참조 설명서를 참조하세요.

코드 분해

선택 사항인 이 마지막 섹션은 GettingStarted.java의 모든 줄에 대해 자세히 설명합니다.

  • 가져오기

    • PlayFab API 호출을 만드는 데 사용되는 일련의 최소 가져오기입니다.
  • public static void main(String[] args) {

    • API 호출을 시작하는 기본 루프로, 완료될 때까지 기다립니다.

    • PlayFabSettings.TitleId = "xxxx";

      • 모든 PlayFab 개발자는 게임 관리자에서 타이들을 만듭니다. 게임을 게시할 때 게임에 해당 titleId를 코딩해야 합니다. 이렇게 하면 클라이언트가 PlayFab 내에서 올바른 데이터에 액세스하는 방법을 알 수 있습니다. 대부분의 사용자는 이 작업을 PlayFab을 작동시키기 위한 필수 단계로 생각하면 됩니다.
    • PlayFabClientModels.LoginWithCustomIDRequest request = new PlayFabClientModels.LoginWithCustomIDRequest();

      • 대부분의 PlayFab API 메서드에는 입력 매개 변수가 필요하고 이러한 입력 매개 변수는 요청 개체로 압축됩니다.

      • 모든 API 메서드는 선택적 매개 변수와 필수 매개 변수가 혼합된 고유 요청 개체가 필요합니다.

        • LoginWithCustomIDRequest의 경우, 플레이어와 CreateAccount를 고유하게 식별하는 CustomId라는 필수 매개 변수가 있어 이 호출로 새로운 계정을 생성하도록 합니다.
      • 로그인을 위해 대부분의 개발자들은 보다 적절한 로그인 메서드를 사용하고자 합니다.

        • 모든 로그인 메서드 및 입력 매개 변수 목록 목록은 PlayFab 로그인 설명서를 참조하세요. 일반적인 옵션은 다음과 같습니다.
          • LoginWithAndroidDeviceID
          • LoginWithIOSDeviceID
          • LoginWithEmailAddress
    • FutureTask<PlayFabResult<com.playfab.PlayFabClientModels.LoginResult>> loginTask = PlayFabClientAPI.LoginWithCustomIDAsync(request);

      • 이는 Java FutureTask 프레임워크를 사용하여 LoginWithCustomID 비동기 요청을 시작합니다.
    • While (실행 중) { if (loginTask.isDone()) { OnLoginComplete(loginTask); } }

      • 작은 주 루프를 실행하고 loginTask가 완료될 때까지 비동기적으로 기다립니다.
      • 완료되면 OnLoginComplete을(를) 호출합니다.
  • OnLoginComplete (loginTask)

    • result = loginTask.get();

      • 비동기 결과를 가져옵니다(FutureTask가 이미 완료되었음을 확인했기 때문에 차단이 발생하지 않습니다.
    • (result.Result != null)인 경우 API 호출이 성공한 것입니다.

      • 성공한 경우 많은 API 콜백에 대한 result.Result 개체에는 요청된 정보가 포함됩니다.

      • LoginResult에는 특히 플레이어에 대한 몇 가지 기본 정보가 포함되어 있습니다. 그러나 대부분의 사용자에게는 다른 API를 호출하기 전에 수행해야 할 필수 단계일 뿐입니다.

    • (result.Error != null)인 경우 API 호출이 실패한 것입니다.

      • API 호출은 여러 가지 이유로 실패할 수 있으며, 항상 실패 처리를 시도해야 합니다.
      • API 호출이 실패하는 이유(가능성이 높은 순서대로 나열)
        • PlayFabSettings.TitleId이(가) 설정되지 않았습니다. 타이틀에 TitleId를 설정하는 것을 잊은 경우 아무 작업도 수행되지 않습니다.
        • 요청 매개 변수. 특정 API 호출에 대해 정확하거나 필요한 정보를 제공하지 않은 경우 호출에 실패합니다. 자세한 내용은 error.errorMessage, error.errorDetails 또는 error.GenerateErrorReport()를 참조하세요.
        • 장치 연결 문제. 휴대폰은 지속적으로 연결이 끊어졌다가 다시 연결되므로 언제든지 모든 API 호출이 실패하고 난 후 바로 다시 작동할 수 있습니다. 터널로 들어가면 연결이 완전히 끊길 수 있습니다.
        • PlayFab 서버 문제. 모든 소프트웨어와 마찬가지로 문제가 있을 수 있습니다. 업데이트에 대해서는 릴리스 정보를 참조하세요.
        • 인터넷은 100% 신뢰할 수 없습니다. 때때로 메시지가 손상되었거나 PlayFab 서버에 연결되지 않을 수 있습니다.
    • 문제를 디버깅하는 데 문제가 있는 경우 오류 정보 내의 정보로는 충분하지 않습니다. 포럼에서 문의해 주시기 바랍니다.