Steam をアイデンティティプロバイダーとして設定する
注釈:本資料はAI技術を用いて翻訳されています。
Overview
このガイドは、認証された Steam デベロッパーが Steam プレイヤーアカウントを AccelByte Gaming Services (AGS) に接続する際の手助けとなることを目的としています。ゲームによっては、ここに記載されていない Steam サービス内の追加機能を設定する必要がある場合があります。Steam サービスの設定に関する完全な情報については、Steam の担当者に直接問い合わせ、Steam のドキュメントを確認することをお勧めします。
このガイドは一般公開を目的としており、機密性の関係で限定的な情報のみを含みます。まずは完全な機密ガイドを参照することをお勧めします。機密ガイドのコピーをリクエストするには、AccelByte のテクニカルプロデューサーにお問い合わせください。
Goals
- AGS SDK を使用して、ゲームで Steam 認証方式を有効にする。
- AGS Player Portal を使用して、パブリッシャーウェブサイトで Steam 認証方式を有効にする。
Prerequisites
Web ログイン統合の場合
- 有効な Steam デベロッパーアカウントと、Steamworks にログインできること。
- 認証を設定し権限を管理するための AGS Admin Portal アカウント。
- Player Portal と Launcher 用のパブリッシャーネームスペース。
- Player Portal。
Web ログイン統合は現在、AGS Public Cloud では利用できず、AGS Private Cloud でのみサポートされています。
ゲーム内ログイン統合の場合
- 有効な Steam デベロッパーアカウントと、Steamworks にログインできること。
- Unreal Engine Steam OSS。
- UE V4.27 以下: Unreal Engine OSS
- UE V5.0: Unreal Engine OSS
- Unity 用の Steamworks.NET バージョン 20.2.0 以上。
- Unreal Engine または Unity 用の Steamworks ページ から取得した Steamworks SDK。
- 最新バージョンの AGS SDK がインポートされた Unity または Unreal のゲームプロジェクト。
- 認証を設定し権限を管理するための AGS Admin Portal アカウント。
- ゲームネームスペース。
- AGS アイデンティティおよびアクセス管理 (IAM) クライアントに関する知識。
Steam アプリを設定する
Steam アプリを作成する
Steamworks アカウント配下で Steam アプリケーションを作成します。Steam アプリケーションの詳細については、アプリケーションに関する Steam のドキュメントを参照してください。 Steamworks アカウント配下で Steam アプリケーションを作成します。Steam アプリケーションの詳細については、アプリケーションに関する Steam のドキュメントを参照してください。
Steam Publisher Web API Key を作成する
Steamworks アカウントを使用して、グループ配下に Publisher Web API Key を作成します。Steam Publisher Web API Key の詳細については、Web API の概要に関する Steam のドキュメントを参照してください。 Steamworks アカウントを使用して、グループ配下に Publisher Web API Key を作成します。Steam Publisher Web API Key の詳細については、Web API の概要に関する Steam のドキュメントを参照してください。
Steam ログイン方式を設定する
Web ログイン
-
AGS Admin Portal で、パブリッシャーネームスペースに移動します。
-
サイドバーメニューで、Foundations > 3rd Party Integrations > Auth & Account Linking に移動します。
-
Auth & Account Linking ページで、+ Add New ボタンをクリックします。

-
ログイン方式のオプションの一覧から、Steam Web を選択します。

-
Steamworks Portal から取得した Steam Publisher Web API Key を入力し、Redirect URI にドメイン URL(例:
https://prod.gamingservices.accelbyte.io)を入力してから、Create ボタンをクリックして完了します。注記無効な Steam Publisher Web API Key を入力すると、「Steam Web API Key is invalid」というエラーメッセージが表示されます。

-
Integration の横にある Activate をクリックします。表示されたポップアップで Activate をクリックして確定します。

試してみる
-
Player Portal に移動し、Login ボタンをクリックします。

-
Steam アイコンが見つからない場合は、More login options をクリックしてください。

-
Login with Steam をクリックします。

Steam Web Login ページにリダイレクトされ、そこで Steam の認証情報を入力できます。

現在、プレイヤーは Steam アカウントを既存の AGS アカウントにリンクするか、新しいアカウントにリンクするかを求められます。プレイヤーがヘッドレスアカウントで Player Portal に直接ログインできるように、これを設定可能にするための取り組みが AccelByte で進行中です。
ゲーム内ログイン
-
AGS Admin Portal で、ゲームネームスペースに移動します。
-
サイドバーメニューで、Foundations > 3rd Party Integrations > Auth & Account Linking に移動します。
-
Auth & Account Linking ページで、+ Add New ボタンをクリックします。

-
Steam SDK をクリックします。

-
Steamworks Portal から取得した App ID と Steam Publisher Web API Key を入力します。Redirect URI に http://127.0.0.1 を入力し、Create ボタンをクリックします。
注記無効な Steam Publisher Web API Key を入力すると、「Steam Web API Key is invalid」というエラーメッセージが表示されます。

-
Integration の横にある Activate をクリックします。表示されたポップアップで Activate をクリックして確定します。

Steam 用の IAM クライアントを作成する
IAM クライアントは、対象プラットフォームでリリースしたいゲームクライアントを表すものです。IAM クライアントの詳細については、アプリケーションのアクセス制御を管理するを参照してください。
ゲーム内ログインの手順
ゲームエンジンごとに設定が異なります。以下のタブから使用しているゲームエンジンを選択してください。
- Unreal Engine Instructions
- Unity Instructions
ゲーム内ログイン統合 (Unreal)
AGS SDK を使用して Steam ログインを統合することで、プレイヤーが Steam の認証情報を使ってゲームにログインできるようになります。
準備と設定 (Unreal)
依存関係の追加 (Unreal)
まず、OnlineSubsystem、OnlineSubsystemSteam、Steamworks というパブリック依存モジュールを追加する必要があります。これらは、Unreal Engine 内で Steam オンラインサブシステムを使用するようにプロジェクトを統合するために必要な依存関係です。
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", "OnlineSubsystemSteam", "Steamworks", "HTTP" });
}
<YourProject>.Target.cs と <YourProjectEditor>.Target.cs ファイルの内部に OnlineSubsystemSteam を追加します。
public ABThirdPartyLoginTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemSteam" } );
}
public ABThirdPartyLoginEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemSteam" } );
}
Steam ログイン用のプロジェクト設定 (Unreal)
DefaultEngine.ini ファイル内に、Steam の設定に必要ないくつかの変数を追加する必要があります。この設定により、プロジェクトを開いたときに Steam が自動的に起動するようになります。
Unreal Engine に Steam オンラインサブシステムを使用するよう指示するには、以下の設定を追加します。
[OnlineSubsystem]
DefaultPlatformService=Steam
Unreal Engine にアプリケーションで Steam オンラインサブシステムを使用することを伝えたら、次に以下の設定を追加して OnlineSubsystemSteam モジュールを設定する必要があります。
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
SteamDevAppId は、あなたの Steam ゲームの App ID です。
アプリケーションの接続に使用する Net Driver に Steam クラスを指定します。
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
AGS 用のプロジェクト設定 (Unreal)
DefaultEngine.ini に AGS の認証情報を追加します。
[/Script/AccelByteUe4Sdk.AccelByteSettings]
ClientId=<Your Client_Id>
ClientSecret=<Your Client_Secret>
Namespace=<Your Namespace>
PublisherNamespace=<Your Publisher Namespace>
RedirectURI="http://127.0.0.1"
BaseUrl="https://prod.gamingservices.accelbyte.io"
AppId=480
IamServerUrl="https://prod.gamingservices.accelbyte.io/iam"
PlatformServerUrl="https://prod.gamingservices.accelbyte.io/platform"
AppId は、あなたの Steam ゲームの App ID です。
推奨される DefaultEngine.ini の設定 (Unreal)
これらの手順に従うと、DefaultEngine.ini ファイルは以下の例のようになります。
[OnlineSubsystem]
DefaultPlatformService=Steam
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=<your steam game app id>
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
[/Script/AccelByteUe4Sdk.AccelByteSettings]
ClientId=<Your IAM_Client_Id>
ClientSecret=<Your IAM_Client_Secret>
Namespace=<Your Namespace>
PublisherNamespace=<Your Publisher Namespace>
RedirectURI="http://127.0.0.1"
BaseUrl="https://prod.gamingservices.accelbyte.io"
AppId=<your steam game app id>
IamServerUrl="https://prod.gamingservices.accelbyte.io/iam"
PlatformServerUrl="https://prod.gamingservices.accelbyte.io/platform"
サンプルコードの実装 (Unreal)
次に、サンプルコードを使ってゲームで Steam 認証方式を実装する方法を紹介します。
IOnlineSubsystem は、DefaultEngine.ini で定義された DefaultPlatformService の値を読み取ります。IdentityInterface は、ユーザーアカウントに関連するこれらのサービスとのやり取りを管理し、ユーザー認証とアクセストークンの取得を可能にします。処理が成功すると、AGS SDK の LoginWithOtherPlatform 関数が、Identity Interface から取得した認証トークンを使用してサードパーティプラットフォームのログインを処理します。
AccelByte OnlineSubystem (OSS) の AccelByteOnlineSubsystemPtr は、このガイドで取得できます。
UE_LOG(LogTemp, Warning, TEXT("%s"), TEXT("Begin Login"));
const IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get();
if (OnlineSubsystem == nullptr)
{
FString Message = TEXT("Cannot login with no online subsystem set!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);//will get active OSS Platform Service
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;
}
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient(TEXT("YOUR_KEY"));
auto UserApi = ApiClient->GetUserApi().Pin();
const FVoidHandler OnLoginSuccessDelegate = FVoidHandler::CreateLambda([&]() {
FAccountUserData AccountUserData = ApiClient->CredentialsRef->GetAccountUserData();
FString AccountUserDataString;
FJsonObjectConverter::UStructToJsonObjectString(AccountUserData, AccountUserDataString);
FString Message = FString::Printf(TEXT("Login to AB Service Success : %s"), *AccountUserDataString);//Success Login to AB Service
});
const FErrorHandler OnLoginErrorDelegate = FErrorHandler::CreateLambda([=](int32 ErrorCode, const FString& ErrorMessage) {
FString Message = FString::Printf(TEXT("Error Login to AB Service : %s"), *ErrorMessage);
});
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
UserApi->LoginWithOtherPlatform(EAccelBytePlatformType::Steam, 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);
Steam 認証における platform_token は Auth Ticket です。
このサンプルコードをプロジェクトに追加したら、コンパイル、ビルド、実行を行います。これで完了です。
サンプルコードのテスト (Unreal)
以下の画像は、サンプルコードを使用した Steam ログインの成功例を示しています。

ゲーム内ログイン統合 (Unity)
AGS SDK を使用して Steam ゲームでのサインインを統合することで、プレイヤーが Steam の認証情報を使ってゲームにログインできるようになります。
準備と設定 (Unity)
プロジェクト設定 (Unity)
SDK Config を開く方法の詳細については、SDK のインストールと設定を参照してください。その後、AGS Admin Portal の値に基づいて各属性を入力し、設定を保存します。
サンプルコードの実装 (Unity)
このサンプルコードの実装では、Steam SDK のラッパーとして Steamworks.NET を使用します。
この例では、Steamworks.Net のバージョン 20.2.0 以上が必要です。
Steam トークンを生成する
GetAuthTicketForWebApi という新しい API を使用して、Steam のチケットを生成できます。
using AccelByte.Core;
using AccelByte.Models;
using Steamworks;
/// <summary>
/// API to generate Steam token
/// </summary>
/// <param name="serviceId">Value of any unique identifier</param>
public static void GenerateSteamTicket(string serviceId, System.Action<string> onGetSteamTokenFinished)
{
if (!SteamManager.Initialized)
{
Debug.LogError("Failed to initialize Steam");
return;
}
Callback<GetTicketForWebApiResponse_t> getAuthSessionTicketResponse = null;
GetTicketForWebApiResponse_t? responseResult = null;
getAuthSessionTicketResponse = Callback<GetTicketForWebApiResponse_t>.Create(response =>
{
getAuthSessionTicketResponse.Dispose();
responseResult = response;
if (response.m_eResult == EResult.k_EResultOK)
{
byte[] bytes = response.m_rgubTicket;
int byteSize = response.m_cubTicket;
string steamTicket = System.BitConverter.ToString(bytes, startIndex: 0, byteSize);
steamTicket = steamTicket.Replace("-", string.Empty);
Debug.Log($"Get steam ticket:\n{steamTicket}");
onGetSteamTokenFinished?.Invoke(steamTicket);
}
else
{
Debug.LogError("Failed to get Steam token");
onGetSteamTokenFinished?.Invoke(null);
}
});
SteamUser.GetAuthTicketForWebApi(serviceId);
}
Epic Games 認証における platform_token は、Access Token または Auth Code です。
AccelByte IAM Service にログインします。
private void LoginAccelByteSteamPlatform(string serviceId)
{
GenerateSteamTicket(serviceId, steamTicket =>
{
if (string.IsNullOrEmpty(steamTicket))
{
Debug.LogError("Steam ticket is empty");
return;
}
AccelByte.Api.User user = AccelByteSDK.GetClientRegistry().GetApi().GetUser();
string platformToken = $"{serviceId}:{steamTicket}";
user.LoginWithOtherPlatform(AccelByte.Models.PlatformType.Steam, platformToken, OnLoginWithSteamDone);
});
}
private void OnLoginWithSteamDone(Result<TokenData, OAuthError> loginResult)
{
if (loginResult.IsError)
{
Debug.Log($"Login failed, Error: {loginResult.Error.error}, Description {loginResult.Error.error_description}");
}
else
{
Debug.Log("Login success");
}
}
Troubleshooting
このセクションでは、サービス利用時に発生し得る一般的なエラーや問題と、その解決方法に関する推奨事項を紹介します。
設定の誤り
Unreal Engine の設定(DefaultEngine.ini に記載)で Steam App ID が誤っていたり、設定されていない場合、ゲームは Steam のログインサービスにアクセスできません。
DefaultEngine.iniファイルを再確認し、Steam App ID が正しく設定されていることを確認してください。
Steam ログインが機能しない
Steam 側でアクセストークンが不足している場合、プレイヤーは Steam でのログインに失敗します。
- Steam アプリがバックグラウンドで実行されていることを確認してください。