エクソラログインでEpicオンラインサービスを使用する方法

どのように動作するか

Epic オンラインサービス (EOS) は、開発者がゲームの立ち上げ、運営、スケールアップを容易かつ迅速に行えるようにするクロスプラットフォームのサービスです。

Epic オンラインサービスの使用を開始するには、ログインを設定し、各サービスのインターフェースを作成する必要があります。Epic オンラインサービスは、外部 OpenID プロバイダーとの認証をサポートしています。この方法で認証されると、各外部プロバイダーユーザーは、Epic システム内で内部 OpenID を受け取ります。

使用に適した方

すでにランチャーエクソラログインを統合しているパートナー。

入手方法

プロジェクトを作成して設定する

  1. Epic 開発者向けポータルで新しい製品を作成する。

  1. 製品設定に移動します。

  1. 顧客情報セクションを開き、新しい顧客を押します:

  1. 新しい顧客を作成し、次のようにパラメーターを入力します:
    • 顧客名フィールドにクライアントの名前を入力します;
    • 顧客役割フィールドに、ゲームサーバーを選択します。これにより、アプリはセッションを作成することができます。

  1. IDプロバイダーセクションで、OpenIDプロバイダーを選択して、構成を押します。

  1. 表示されたタブでニューエントリーを押し、以下のように入力します:
    • UserInfo API エンドポイントフィールドで、https://login.xsolla.com/api/users/meを挿します。この URL は、Epic がユーザーデータにアクセスするためのリクエストを送信するエクソラログイン メソッドです。レスポンスとして、ユーザーデータを含む JSON ファイルを受け取ります;
    • HTTP メソッドで、取得を選択します;
    • AccountIdの名前フィールドの場合、idを入力します。固有のユーザーidを持つフィールドの名前になります;
    • DisplayNameフィールドの名前の場合、external_idを入力します。外部リソースから利用できるユーザーIDを持つフィールドの名前になります。

  1. 作成した ID プロバイダーをサンドボックスに追加します。これを行うには、サンドボックスセクションに移動して IDプロバイダーを押します。

  1. ウィンドウのOpenIDセクションでプロバイダーを指定します。

EOS SDKを設定するには、いくつかのパラメータが必要です:

  • 製品ID:

  • サンドボックスID:

  • 配置ID:

配置の一覧は、サンドボックス > 配置で確認できます。

  • 顧客ID:

  • 顧客シークレット:

  1. Epic 開発者ポータルのダッシュボードセクションにアクセスし、SDK をダウンロードします。

  1. アーカイブを解凍し、ライブラリをプロジェクトにリンクします:

EOS SDKを初期化する

EOS SDK を初期化して、その機能にアクセスできるようにします。

ここではEOS SDKの初期化コードの一例を紹介します:

Copy
Full screen
Small screen
EOS_InitializeOptions SDKOptions;
SDKOptions.ApiVersion = EOS_INITIALIZE_API_LATEST;
SDKOptions.AllocateMemoryFunction = NULL;
SDKOptions.ReallocateMemoryFunction = NULL;
SDKOptions.ReleaseMemoryFunction = NULL;
SDKOptions.ProductName = "MyProduct";
SDKOptions.ProductVersion = "1.0";
SDKOptions.Reserved = NULL;
SDKOptions.SystemInitializeOptions = NULL;
EOS_Initialize(&SDKOptions);

初期化すると、プラットフォームインターフェースが利用可能になります。プラットフォームインターフェースは、他のEOS SDKコンポーネントへのアクセスを提供するオブジェクトです。プラットフォームインターフェースを作成するには、プロジェクト作成後に取得したIDが必要です。

EOS_Platform_Options構造でEOS_Platform_Create関数を呼び出して、プラットフォームインターフェースを作成します。

EOS_Platform_Options構造の説明:

Copy
Full screen
Small screen
/** API version of EOS_Platform_Create. */
int32_t ApiVersion;
/** A reserved field that should always be nulled. */
void* Reserved;
/** The product id for the running application, found on the dev portal */
const char* ProductId;
/** The sandbox id for the running application, found on the dev portal */
const char* SandboxId;
/** Set of service permissions associated with the running application */
EOS_Platform_ClientCredentials ClientCredentials;
/** Is this running as a server */
EOS_Bool bIsServer;
/** Only used by Player Data Storage. Must be null initialized if unused. 256-bit Encryption Key for file encryption in hexadecimal format (64 hex chars)*/
const char* EncryptionKey;
/** The override country code to use for the logged in user. (EOS_COUNTRYCODE_MAX_LENGTH)*/
const char* OverrideCountryCode;
/** The override locale code to use for the logged in user. This follows ISO 639. (EOS_LOCALECODE_MAX_LENGTH)*/
const char* OverrideLocaleCode;
/** The deployment id for the running application, found on the dev portal */
const char* DeploymentId;
/** Platform creation flags, e.g. EOS_PF_LOADING_IN_EDITOR. This is a bitwise-or union of the defined flags. */
uint64_t Flags;
/** Only used by Player Data Storage. Must be null initialized if unused. Cache directory path. Absolute path to the folder that is going to be used for caching temporary data. The path is created if it's missing. */
const char* CacheDirectory;
/**
 * A budget, measured in milliseconds, for EOS_Platform_Tick to do its work. When the budget is met or exceeded (or if no work is available), EOS_Platform_Tick will return.
 * This allows your game to amortize the cost of SDK work across multiple frames in the event that a lot of work is queued for processing.
 * Zero is interpreted as "perform all available work"
 */
uint32_t TickBudgetInMilliseconds;

プラットフォームインタフェースを作成する際には、次のパラメータを指定します:

  • PlatformOptions.bIsServer パラメータの値は、クライアントを作成する際に指定した顧客の役割と同じでなければなりません;
  • PlatformOptions.CacheDirectoryはアプリの作業ディレクトリです;
  • PlatformOptions.ProductId, PlatformOptions.SandboxIdPlatformOptions.DeploymentId, PlatformOptions.ClientCredentials.ClientIdPlatformOptions.ClientCredentials.ClientSecret は、プロジェクトの作成または設定時に受け取った値です。

Copy
Full screen
Small screen
EOS_Platform_Options PlatformOptions;
PlatformOptions.ApiVersion = EOS_PLATFORM_OPTIONS_API_LATEST;
PlatformOptions.Reserved = NULL;
PlatformOptions.bIsServer = false;
PlatformOptions.EncryptionKey = NULL;
PlatformOptions.OverrideCountryCode = NULL;
PlatformOptions.OverrideLocaleCode = NULL;
PlatformOptions.Flags = 0;
PlatformOptions.CacheDirectory = "path/to/cache/directory";

PlatformOptions.ProductId = "product id";
PlatformOptions.SandboxId = "sandbox id";
PlatformOptions.DeploymentId = "deployment id";
PlatformOptions.ClientCredentials.ClientId = "client id";
PlatformOptions.ClientCredentials.ClientSecret = "client secret";
EOS_HPlatform platformInterface = EOS_Platform_Create(&PlatformOptions);

EOS SDKが初期化されると、platformInterfaceオブジェクトを使用してユーザーを認証することができます。

ユーザーを認証する

EOS SDKを初期化し、プラットフォームインターフェースオブジェクトを作成した後、準備手順に従い、ユーザー認証リクエストを実行します。

準備手順

認証メソッドを実行する前に、タイマーでEOS_Platform_Tickメソッドを呼び出す設定をします。このメソッドの引数としてplatformInterfaceオブジェクトを渡します。これは、認証のものを含む様々なメソッドに渡されるコールバック関数の実行を確実にします。

ユーザー認証リクエスト

外部プロバイダーとの認証は、connectInterface オブジェクトを使用して行います。このオブジェクトを取得するには、次のコードを実行します。

Copy
Full screen
Small screen
EOS_HConnect connectInterface = EOS_Platform_GetConnectInterface(platformInterface);

ここでplatformInterfaceは、EOS SDKを初期化するステップで受信したプラットフォームインターフェースです。

connectInterfaceオブジェクトを取得した後、EOS_Connect_Loginメソッドを呼び出し、次のようにパラメーターを渡します:

  • connectInterfaceは、前のステップで受信した接続インターフェースです;
  • EOS_Connect_LoginOptions 構造。以下の説明を参照してください;
  • void *clientDataCompletionDelegateコールバック関数を実行するときに返されるデータです。
  • CompletionDelegate認証プロセスの終了後に実行する必要があるコールバック関数です。

メソッドに渡されるEOS_Connect_LoginOptions構造は、次のように入力する必要があります:

Copy
Full screen
Small screen
EOS_Connect_LoginOptions loginOptions;
loginOptions.ApiVersion = EOS_CONNECT_LOGIN_API_LATEST;
loginOptions.UserLoginInfo = NULL;
loginOptions.Credentials = &connectCredentials;

ここで、connectCredentialsは、ユーザートークンを含むEOS_Connect_Credentials構造です。次のように記入します:

Copy
Full screen
Small screen
EOS_Connect_Credentials connectCredentials;
connectCredentials.ApiVersion = EOS_CONNECT_CREDENTIALS_API_LATEST;
connectCredentials.Token = "jwt token";
connectCredentials.Type = EOS_EExternalCredentialType::EOS_ECT_OPENID_ACCESS_TOKEN;

このデータをコードに追加します:

  • connectCredentials.TokenはユーザーJWTトークンである。ゲームは起動引数としてランチャーからこれを受け取りました。
  • connectCredentials.Typeは認証タイプである。 ここでは、外部のOpenIDプロバイダーを利用した認証の例を示します。

構造を作成してオプションを入力した後、EOS_Connect_Loginメソッドを呼び出します:

Copy
Full screen
Small screen
EOS_Connect_Login(
  connectHandle,
  &loginOptions,
  NULL,
  &onLoginConnect
);

onLoginConnect静的関数は、認証処理が終了したときに呼び出されます。以下のように宣言します:

Copy
Full screen
Small screen
static void EOS_CALL onLoginConnect(const EOS_Connect_LoginCallbackInfo *Data);

ここで*Dataは、認証試行に関するデータを含む EOS_Connect_LoginCallbackInfo 構造体へのポインタです。

構造の説明:

Copy
Full screen
Small screen
/** Result code for the operation. EOS_Success is returned for a successful query, otherwise one of the error codes is returned. See eos_result.h */
EOS_EResult ResultCode;
/** Context that was passed into EOS_Connect_Login */
void* ClientData;
/** If login was successful, this is the account ID of the local player that logged in */
EOS_ProductUserId LocalUserId;
/**
* If the user was not found with credentials passed into EOS_Connect_Login,
* this continuance token can be passed to either EOS_Connect_CreateUser
* or EOS_Connect_LinkAccount to continue the flow
*/
EOS_ContinuanceToken ContinuanceToken;

コールバック関数の例:

Copy
Full screen
Small screen
static void EOS_CALL onLoginConnect(const EOS_Connect_LoginCallbackInfo *Data) {
  if (Data->ResultCode == EOS_EResult::EOS_InvalidUser) {
    continuanceToken = Data->ContinuanceToken;
  }
  if (Data->ResultCode == EOS_EResult::EOS_Success) {
    userId = Data->LocalUserId;
  }
}

認証時には、外部プロバイダーアカウントにリンクされた Epic アカウントがあるかどうかがチェックされます。

このタイプの Epic アカウントが存在する場合:

  • Dataオブジェクトでは、ResultCodeパラメータは EOS_EResult::EOS_Success (0) の値を返します;
  • Dataオブジェクトでは、LocalUserIdパラメータはアカウントIDを返します。他のEpicサービスとのさらなる相互作用のためにこれを保存します。

リンクされた Epic アカウントがない場合:

  • Dataオブジェクトでは、ResultCodeパラメータはOS_EResult::EOS_InvalidUser (3)の値を返します;
  • Data->ContinuanceTokenパラメータは、認証の試みに関するデータを返します。これを保存して、新しい Epic ユーザーを作成し、外部のプロバイダーアカウントとリンクさせます。

新しいEpicユーザーを作成するには、EOS_Connect_CreateUserメソッドをよびだします。以下のコード例を参照してください:

  • connectHandleは使用されたconnectInterfaceオブジェクトです;
  • optionsは前のステップで受信された continuanceTokenを含まれたEOS_Connect_CreateUserOptions構造です;
  • NULLは前のステップでEOS_Connect_Loginメソッドとともに受信された clientData
  • onCreateUserは、前のステップの関数とともにアカウントを作成した後に呼び出される静的なコールバック関数です。

Copy
Full screen
Small screen
EOS_Connect_CreateUserOptions options;
options.ApiVersion = EOS_CONNECT_CREATEUSER_API_LATEST;
options.ContinuanceToken = continuanceToken;
EOS_Connect_CreateUser(
  connectHandle,
  &options,
  NULL,
  &onCreateUser
);

onCreateUser関数の例:

Copy
Full screen
Small screen
static void EOS_CALL onCreateUser(const EOS_Connect_CreateUserCallbackInfo *Data) {
  if (Data->ResultCode == EOS_EResult::EOS_Success) {
    userId = Data->LocalUserId;
  }
}
/** Result code for the operation. EOS_Success is returned for a successful query, otherwise one of the error codes is returned. See eos_result.h */
EOS_EResult ResultCode;
/** Context that was passed into EOS_Connect_CreateUser */
void* ClientData;
/** Account ID of the local player created by this operation */
EOS_ProductUserId LocalUserId;

Epic のユーザーアカウントが正常に作成され、外部プロバイダーアカウントにリンクされている場合:

  • Dataオブジェクトでは、ResultCodeパラメータは EOS_EResult::EOS_Success (0) の値を返します;
  • Dataオブジェクトでは、LocalUserIdパラメータはアカウントIDを返します。他のEpicサービスとのさらなる相互作用のためにこれを保存します。

この記事は役に立ちましたか?
ありがとうございます!
改善できることはありますか? メッセージ
申し訳ありません
この記事が参考にならなかった理由を説明してください。 メッセージ
ご意見ありがとうございました!
あなたのメッセージを確認し、体験を向上させるために利用させていただきます。
このページを評価する
このページを評価する
改善できることはありますか?

答えたくない

ご意見ありがとうございました!
最終更新日: 2021年6月25日

誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。

問題を報告する
当社は常にコンテンツを見直しています。お客様のご意見は改善に役立ちます。
フォローアップ用のメールをご提供してください
ご意見ありがとうございました!