Set up Epic as an Identity Provider
概要
このガイドは、検証済みの Epic Games デベロッパーが Epic Games アカウントを AccelByte Gaming Services (AGS) に接続することを支援するためのものです。ゲームによっては、ここに記載されていない Epic Games サービス内の追加機能を設定する必要があります。Epic Games サービスの設定に関する詳細情報については、Epic Games 担当者にお問い合わせいただき、また直接 Epic Gamesのドキュメント を確認されることをお勧めします。
目標
- AccelByte Game SDK で、ゲームの Epic 認証方法を有効化する。
- AccelByte プレイヤーポータルで、パブリッシャーウェブサイトの Epic 認証方法を有効化する。
前提条件
- Epic デベロッパーアカウントを所有しておきます。
- Unreal Engine をご利用の場合は、UE バージョン 4.27 または 5.0 をインストールする必要があります。
- Unityを使用している場合は、PlayEveryWare/eos_plugin_for_unity が必要です。
- 認証を設定し、権限を管理する AccelByte 管理者ポータルアカウントを所有しておきます。
- まだ設定していない場合は、プレイヤーポータルlとランチャーにパブリッシャーの名前空間を設定します。次に、ゲームに対し、ゲームの名前空間を設定します。
- プレイヤーポータルを所有しておきます。
- AccelByte Game SDK をインポートしたUnityまたはUnrealゲームプロジェクトを所有しておきます。
- 最新版の AccelByte Unity SDK またはUnreal SDK を入手します。
- AccelByte IAM クライアントに精通しておきます。
Epic 製品の設定
組織の作成
デベロッパーアカウント下の組織 を所有し、それに検証済みドメインを追加する必要があります。
Epic ではドメインの検証に時間がかかります。
製品ブランドの設定
製品のブランド設定、権限、リンクしたクライアントを設定します。EOS Epic アカウントサービスガイドの設定方法 の指示に従ってください。
- ブランド設定には検証済みドメインが必要です。どれか 1 つが足りなくとも、それなしで続行できますが、プレイヤーはログイン時に警告メッセージを受け取ります。
- 権限の設定では、Basic Profile、Online Presence、Friends List を有効にする必要があります。
- リンクしたクライアントの設定では、以前に作成したクライアントを選択します。
Epic Developer Portal での設定に問題がある場合は、カスタマーサポートに連絡して AccelByte からガイドを入手してください。
Epic Games 認証の設定
Epic Games SDK ログインの設定
AccelByte 管理者ポータルにログインし、[Game Namespace (ゲームの名前空間)]を選択し、[User Management (ユーザー管理)]サイドバーの下にある[Login Method (ログイン方法)]をクリックし、右側の[+ Add New (+新規を追加)]ボタンをクリックします。
[Epic Games]をクリックします。
[Client ID (クライアント ID)]と[Client Secret (クライアントの秘密)]に Epic Games Dev Portal の認証情報を入力します。[Redirect URI (リダイレクト URI)]にベース URL
http://127.0.0.1
を入力し、[Create (作成)]ボタンをクリックします。アクティベートします。
IAM クライアントの作成
IAM クライアントとは、Epic プラットフォームでリリースしたいゲームクライアントのことです。IAM クライアントを使用すると、ゲームクライアントは適切な権限を使用して、保護されている AGS リソースへのアクセスを要求できます。
[Platform Configurations (プラットフォーム設定)]に移動し、次に[IAM Clients (IAM クライアント)]に移動します。
[+ Create New (+新規作成)]ボタンをクリックして、新しいIAM クライアントを作成します。
a.[Client Type (クライアントタイプ)]に[Confidential (機密)]と入力します。[Confidential (機密)]タイプを使用することを強くお勧めします。なぜなら AGS リソースにアクセスするために、場合によっては後でこの IAM クライアントにいくつかのアクセス権限を追加する必要があり、その場合[Public (公開)]タイプを使用していると適切なセキュリティが利用できないためです。
b.[Secret (秘密)]を入力します。許容される形式で秘密を入力するか、[Generate Client Secret (クライアントの秘密を生成)]オプションをクリックすれば、秘密鍵を生成できます。
危険この作成ステップの後、クライアントの秘密は表示されませんので、その値をコピーして保存してください。ゲームの設定時に必要になります。
c.[Client Name (クライアント名)]を入力します。この IAM クライアントは Epic プラットフォームに固有であるため、
<game name> steam build
のような特定の名前を名付けます。d.特定のゲームの名前空間を選択します。
e.[Scopes (スコープ)]はデフォルトのままでかまいません。
f.[Redirect URI (リダイレクト URI)]は、ゲームクライアントビルド用なので、
http://127.0.0.1
を入力します。g.[Target Audience (ターゲットオーディエンス)]は空白のままでかまいません。
h.[BASE URI (ベース URI)]も空白のままでかまいません。
i.IAM クライアントは[Description (説明)]フィールドに記述できます。
j.SDK 設定の[Platform Input (プラットフォーム入力)]とは、ゲームをビルドするためのターゲットプラットフォームのことです。ここでは[Epic]に設定します。
k. [Advanced Configuration (高度な設定)]は、二要素認証や有効期限の上書きなどの追加機能で構成されています。これはゲームクライアントビルド用なので、デフォルト/無効のままでかまいません。
注記クライアント ID は既に生成されていて、コピーできます。後ほどゲームをビルドする際に、SDK 設定でクライアント ID を使用できます。
[Client Detail (クライアントの詳細)]ページにリダイレクトされます。必要に応じて権限を設定してください。権限の詳細については、IAM クライアントの権限についてのドキュメントを参照してください。
- Unreal Engine Instructions
- Unity Instructions
Unrealゲーム内ログインの統合
AccelByte SDK を使用してゲームのサインインを統合できるので、プレイヤーは Epic 認証情報を使用してゲームにログインできます。
Unrealの準備と設定
依存関係の追加
最初に、公開依存関係モジュールOnlineSubsystemEOS
とOnlineSubsystem
を<YourProject>.Build.cs
ファイルに追加します。これらはすべて、プロジェクトを統合してUnreal Engine 内から Online Subsystem EOS を使用するために必要な依存関係です。
public ABThirdPartyLogin(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" , "AccelByteUe4Sdk", "Slate", "SlateCore" });
PrivateDependencyModuleNames.AddRange(new string[] { "Json", "OnlineSubsystem", "OnlineSubsystemEOS", "HTTP" });
}
OnlineSubsystemEOS を<YourProject>.Target.cs
の中に追加します。
public ABThirdPartyLoginTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemEOS" } );
}
<YourProject>.Target.cs
と<YourProjectEditor>.Target.cs
ファイルの中に OnlineSubsystemSteam を追加します。
public ABThirdPartyLoginEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemEOS" } );
}
Epic のUnreal Engine プロジェクト設定
DefaultEngine.ini
ファイルの中に、Epic 設定のための変数をいくつか追加する必要があります。プロジェクトを開くと確実に Epic Online Services が自動的に開始されるようにするには、この設定が必要です。
Unreal Engine にOnline Subsystem EOS を使用するように指示するには、次の設定を追加します。
[OnlineSubsystem]
DefaultPlatformService=EOS
これで、アプリケーションが EOS Online Subsystem を使用することをUnreal Engine に伝えたので、次の設定を追加してOnlineSubsystemEOS
モジュールを設定する必要があります。
[OnlineSubsystemEOS]
bEnabled=true
Epic Developer Portal から取得した値に基づいて、以下の値を入力します。
[/Script/OnlineSubsystemEOS.NetDriverEOS]
bIsUsingP2PSockets=true
[/Script/OnlineSubsystemEOS.EOSSettings]
CacheDir=CacheDir
DefaultArtifactName=YOUR Product Name
TickBudgetInMilliseconds=0
bEnableOverlay=True
bEnableSocialOverlay=True
bShouldEnforceBeingLaunchedByEGS=False
TitleStorageReadChunkLength=0
+Artifacts=(ArtifactName="[Your Product Name]",
ClientId="[Your Client ID]",//This ID should start with "xyz" as the first 3 characters
ClientSecret="[Your Client Secret]",//This is the password that is used to verify your Client ID
ProductId="[Your Product ID]",//The EOS SDK uses this ID to identify your product
SandboxId="[Your Sandbox ID]",//The artifact belongs to the sandbox with this ID value.
DeploymentId="[Your Deployment ID]",//Deployment IDs differ for each artifact
EncryptionKey="[Your Encyption Key]")//When you upload data to an EOS service, this 64-byte hexadecimal string is used to encrypt it
bUseEAS=True
bUseEOSConnect=True
bMirrorStatsToEOS=True
bMirrorAchievementsToEOS=True
bUseEOSSessions=True
bMirrorPresenceToEAS=True
zUnreal Engine Project Setting for AccelByte Gaming Services
Add your AccelByte credentials here in DefaultEngine.ini
[/Script/AccelByteUe4Sdk.AccelByteSettings]
ClientId=<Your IAM_Client_Id>
ClientSecret=<Your IAM_Client_Secret>
Namespace=<Your Namespace>
PublisherNamespace=<Your Publisher Namespace>
RedirectURI=
BaseUrl="https://demo.accelbyte.io"
AppId=133xxx
IamServerUrl="https://demo.accelbyte.io/iam"
PlatformServerUrl="https://demo.accelbyte.io/platform"
Unrealサンプルコードの実装
次に、以下のサンプルコードを使用してゲームの Epic 認証方法を実装する方法を説明します。
IOnlineSubsystem
が、DefaultEngine.ini
で定義されているDefaultPlatformService
値を読み取ります。IdentityInterface
は、ユーザーアカウントに関連するこれらのサービスとのやり取りを管理し、ユーザー認証とアクセストークンの取得を可能にします。操作に問題がなければ、AccelByte SDK のLoginWithOtherPlatform
関数は、アイデンティティインターフェイスから取得した認証トークンを使用して、サードパーティのプラットフォームのログインを処理します。
FOnlineAccountCredentials Credentials;
Credentials.Id = FString();
Credentials.Token = FString();
Credentials.Type = FString("accountportal");
UE_LOG(LogTemp, Warning, TEXT("%s"), TEXT("Begin Login"));
const IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get();
if (OnlineSubsystem == nullptr)//will get active OSS Platform Service
{
FString Message = TEXT("Cannot login with no online subsystem set!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
return;
}
const IOnlineIdentityPtr OnlineIdentity = OnlineSubsystem->GetIdentityInterface();
if (!OnlineIdentity.IsValid())
{
FString Message = TEXT("Could not retrieve identity interface from native subsystem.");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
return;
}
APlayerController* MyPlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);;
const ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(MyPlayerController->Player);
if (LocalPlayer == nullptr)
{
FString Message = TEXT("Can only login with native platform for local players");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
return;
}
const FVoidHandler OnLoginSuccessDelegate = FVoidHandler::CreateLambda([=]() {
FAccountUserData AccountUserData = FRegistry::Credentials.GetAccountUserData();
//if Success will return some user credential
FString AccountUserDataString;
FJsonObjectConverter::UStructToJsonObjectString(AccountUserData, AccountUserDataString);
FString Message = FString::Printf(TEXT("Login to AB Service Success : %s"), *AccountUserDataString);
});
const FCustomErrorHandler OnLoginErrorDelegate = FCustomErrorHandler::CreateLambda([=](int32 ErrorCode, const FString& ErrorMessage, const FJsonObject& ErrorObject) {
FString Message = FString::Printf(TEXT("Error Login to AB Service : %s"), *ErrorMessage);//Failed Login to AB Service
});
const FOnLoginCompleteDelegate NativeLoginComplete = FOnLoginCompleteDelegate::CreateLambda([=]
(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error) {
UE_LOG(LogTemp, Warning, TEXT("OnLoginComplete %s : %s"), bWasSuccessful ? TEXT("Success") : TEXT("Fail"), *Error);
FString Message = FString::Printf(TEXT("OnLoginComplete %s : %s"), bWasSuccessful ? TEXT("Success") : TEXT("Fail"), *Error);
OnActionInfoUpdated.Broadcast(Message);
if (bWasSuccessful)
{
const FString PlatformToken = OnlineIdentity->GetAuthToken(LocalPlayer->GetControllerId());
UE_LOG(LogTemp, Warning, TEXT("PlatformToken : %s"), *PlatformToken);
OnActionInfoUpdated.Broadcast(FString::Printf(TEXT("PlatformToken : %s"), *PlatformToken));//Will Obtained Auth Ticket from OnlineIdentity
FRegistry::User.LoginWithOtherPlatform(EAccelBytePlatformType::EpicGames, PlatformToken, OnLoginSuccessDelegate, OnLoginErrorDelegate);
UE_LOG(LogTemp, Warning, TEXT("Request LoginWithOtherPlatform"));
OnActionInfoUpdated.Broadcast(TEXT("Request LoginWithOtherPlatform"));
}//this method will hitting the AccelByte endpoint and will return value after success
});
OnlineIdentity->AddOnLoginCompleteDelegate_Handle(LocalPlayer->GetControllerId(), NativeLoginComplete);
const bool bWaitForDelegate = OnlineIdentity->Login(LocalPlayer->GetControllerId(), Credentials);
if (!bWaitForDelegate)
{
FString Message = TEXT("The online subsystem couldn't login");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
}
FString Message = TEXT("Sending login request to native subsystem!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
このコードをプロジェクトに追加したら、プロジェクトをコンパイル、ビルド、実行します。以上です。
サンプルコードのテスト
以下の画像は、Epic アカウントを使用して当社のテストアプリに正常にログインしたことを示しています。
Unityゲーム内ログイン統合
Epic ゲームを統合して AccelByte SDK でサインインすれば、プレイヤーは Epic 認証情報を使用してログインできます。
Unityの準備と設定
AccelByte Gaming Services のUnityプロジェクト設定
AccelByte SDK をプロジェクトで正しく実行するには、AccelByte 管理者ポータルで以前に作成した値を入力し、以下の各手順を実行する必要があります。
ゲームクライアント設定用の、
AccelByteSDKConfig.json
という名前のファイルを作成します。AccelByteSDKConfig.json ファイルをコピーし、[Assets/Resource (アセット/リソース)]ディレクトリのUnityプロジェクトディレクトリに追加します。
ゲームに基づく情報を使用して
AccelByteSDKConfig.json
ファイルに入力します。JSON ファイルの例を以下に示します。
{
"Default": {
"Namespace": "<Your Game Namespace>",
"UsePlayerPrefs": true,//It will use Player Preferences
"EnableDebugLog": true,//Enable Debug Logging
"DebugLogFilter": "Log",//Type of Debug Log
"BaseUrl": "https://demo.accelbyte.io",
"RedirectUri": "http://127.0.0.1",
"AppId": "<Your AppId>",
"PublisherNamespace": "<Your Publisher Namespace>"
}
}
AccelByteServerSDKConfig.json
という名前のファイルを作成し、[Assets/Resource
(アセット/リソース)]ディレクトリ内のUnityプロジェクトディレクトリに追加します。以下のコードで
AccelByteServerSDKConfig.json
を更新します。これはゲームサーバーの設定に使用します。JSON ファイルの例を以下に示します。
{
"Default": {
"Namespace": "Default",
"BaseUrl": "",
"RedirectUri": "http://127.0.0.1"
}
}
AccelByteSDKOAuthConfig.json
とAccelByteServerSDKOAuthConfig.json
という名前の 2 つのファイルを作成します。この両ファイルを[Assets/Resources (アセット/リソース)]ディレクトリの Unity プロジェクトディレクトリに追加します。これらの両 JSON ファイルの内容は次のとおりです。
{
"Default": {
"ClientId": "<Your IAM Client ID>",
"ClientSecret": "<Your IAM Client Secret>"
}
}
Unityサンプルコードの実装
次に、以下のサンプルコードを使用してゲームの Epic 認証方法を実装する方法を示します。
以下のサンプルコードではLoginWithOtherPlatform
関数を扱っていますが、これは EOS プラグインを呼び出すGetAuthSessionInterface
メソッドから取得した認証トークンによるサードパーティのプラットフォームログインを処理する AccelByte SDK の一部です。
// AccelByte's Multi Registry initialization
apiClient = MultiRegistry.GetApiClient();
//Grab a reference to the current User, even though they have not been logged in yet.
//This also acts as the initialization point for the whole AccelByte plugin.
user = apiClient.GetApi < User, UserApi > ();
string platformToken = string.Empty();
PlatformInterface s_PlatformInterface = PlatformInterface.Create(ref options);
if (s_PlatformInterface == null)
{
throw new Exception("Failed to create platform");
}
s_PlatformInterface.GetAuthInterface().Login(ref loginOptions, null,
(ref LoginCallbackInfo loginCallbackInfo) =>
{
if (loginCallbackInfo.ResultCode == Result.Success)
{
Debug.Log("Login succeeded");
CopyUserAuthTokenOptions tokenOptions = new CopyUserAuthTokenOptions();
Token? token = null;// will grab Token from EOS Token Model
s_PlatformInterface.GetAuthInterface().CopyUserAuthToken(ref tokenOptions, loginCallbackInfo.LocalUserId,
out token);
if (token == null) {
Debug.Log("Could not get token");
return;
}
platformToken = token.Value.AccessToken;
}
else if (Common.IsOperationComplete(loginCallbackInfo.ResultCode))
{
Debug.Log("Login failed: " + loginCallbackInfo.ResultCode);
}
});
// Login to AccelByte Gaming Service
ApiClient apiClient = MultiRegistry.GetApiClient();
User user = apiClient.GetApi<User, UserApi>();
Result<TokenData, OAuthError> loginResult = null;
user.LoginWithOtherPlatform(PlatformType.EpicGames, platformToken, (Result<TokenData, OAuthError> loginResult) =>
{
if (loginResult.IsError)
{
//If we error, grab the Error Error and Description to print in the Log
Debug.Log($ "Login failed : {loginResult.Error.error} Description : {loginResult.Error.error_description}");
}
else
{
Debug.Log($"Login successful : {loginResult.Value.ToJsonString()}");
}
});
プロジェクトにログインハンドラスクリプトを追加すると、プロジェクトをコンパイルできます。
エピックサンプルコードのテスト
これでプロジェクトをビルドし、実行することができます。以下の画像は、Epic アカウントと当社のテストアプリを使用して正常にログインしたことを示しています。
Epic Games のログイン認証情報を入力してログインを完了します。
Epic Games のウェブログインの設定
設定手順
AccelByte 管理者ポータルにログインし、[Publisher Namespace (パブリッシャーの名前空間)]を使用して、[User Management (ユーザー管理)]サイドバーの下にある[Login Methods (ログイン方法)]をクリックします。次に右側の[+ Add New (+新規を追加)]ボタンをクリックします。
[Epic Games]をクリックします。
[Client ID (クライアント ID)]と[Client Secret (クライアントの秘密)]に Epic Games Dev Portal の認証情報を入力します。[Redirect URI (リダイレクト URI)]にドメイン URL (たとえば https://demo.accelbyte.io), を入力し、[Create (作成)]ボタンをクリックします。
アクティベートします。
試行
プレイヤーポータルで、[Login (ログイン)]ボタンをクリックします。
Epic アイコンが見つからない場合は、[More login options (その他のログインオプション)]をクリックしてください。
[Login with Epic Games (Epic Games でログイン)]をクリックします。
[Epic Games Web Login (Epic Games ウェブログイン)]ページにリダイレクトされます。Epic の認証情報を入力して続行できます。以上です。必要な手順を完了しました。
これで、プレイヤーは Epic アカウントを既存の AccelByte アカウントと、あるいは新しいアカウントとリンクするよう求められます。AccelByte では、これを設定可能にするための取り組みを進めています。この設定により、プレイヤーがヘッドレスアカウントで プレイヤーポータルに直接ログインできるようになります。