Steam をアイデンティティプロバイダーとして設定する
注釈:本資料はAI技術を用いて翻訳されています。
概要
このガイドは、認証されたSteamデベロッパーがSteamプレイヤーアカウントをAccelByte Gaming Services (AGS) に接続するのを支援することを目的としています。ゲームによっては、ここに記載されていないSteamサービス内の追加機能を設定する必要がある場合があります。Steamサービスの設定に関する完全な情報については、Steamの担当者に連絡し、Steamドキュメントを直接確認することをお勧めします。
このガイドは公開用であり、機密性のため限定的な情報が含まれています。まず完全な機密ガイドを参照することをお勧めします。機密ガイドのコピーをリクエストするには、AccelByteテクニカルプロデューサーにお問い合わせください。
目標
- AGS SDKを使用してゲームのSteam認証方法を有効にする。
- AGS Player Portalを使用してパブリッシャーウェブサイトのSteam認証方法を有効にする。
前提条件
ウェブログイン統合
- 有効なSteamデベロッパーアカウントとSteamworksへのログイン機能。
- 認証を設定し、権限を管理するためのAGS Admin Portalアカウント。
- Player PortalとLauncher用のパブリッシャーnamespace。
- Player Portal。
ウェブログイン統合は現在AGS Shared 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アカウント。
- ゲームnamespace。
- AGS Identity and Access Management (IAM) Clientsに関する知識。
Steamアプリの設定
Steamアプリの作成
Steamworksアカウントの下にSteamアプリケーションを作成します。Steamアプリケーションの詳細については、Steamのアプリケーションドキュメントを参照してください。
Steam Publisher Web API Keyの作成
Steamworksアカウントを使用してグループの下にPublisher Web API Keyを作成します。Steam Publisher Web API Keyの詳細については、SteamのWeb API概要ドキュメントを参照してください。
Steamログイン方法の設定
ウェブログイン
-
AGS Admin portalで、パブリッシャーnamespaceに移動します。
-
サイドバーメニューで、Game Setup > 3rd Party Configuration > 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認証情報を入力できるSteam Webログインページにリダイレクトされます。

現在、プレイヤーはSteamアカウントを既存のAGSアカウントにリンクするか、新しいアカウントにリンクするよう求められます。AccelByteでは、プレイヤーがヘッドレスアカウントでPlayer Portalに直接ログインできるように、これを設定可能にする取り組みが進行中です。
ゲーム内ログイン
-
AGS Admin portalで、ゲームnamespaceに移動します。
-
サイドバーメニューで、Game Setup > 3rd Party Configuration > 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手順
- Unity手順
ゲーム内ログイン統合 (Unreal)
AGS SDKを使用してSteamログインを統合し、プレイヤーがSteam認証情報を使用してゲームにログインできるようにすることができます。
準備と設定 (Unreal)
依存関係の追加 (Unreal)
まず、これらのpublic依存関係モジュールを追加する必要があります: 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 Online Subsystemを使用するように指示するには、以下の設定を追加します:
[OnlineSubsystem]
DefaultPlatformService=Steam
Unreal Engineにアプリケーションでsteam Online Subsystemを使用することを伝えたので、次の設定を追加してOnlineSubsystemSteamモジュールを設定する必要があります:
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
SteamDevAppIdはSteam Game App IDです。
アプリケーションの接続用にSteamクラスをNet Driverに指定します:
[/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 Game 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 FCustomErrorHandler OnLoginErrorDelegate = FCustomErrorHandler::CreateLambda([=](int32 ErrorCode, const FString& ErrorMessage, const FJsonObject& ErrorObject) {
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を使用します。
この例には、最小バージョン20.2.0のSteamworks.Netが必要です。
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サービスにログインします。
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");
}
}
トラブルシューティング
このセクションでは、サービスを使用する際に発生する可能性のある一般的なエラーと問題、およびそれらを解決する方法に関する推奨事項を見つけることができます。
設定ミス
Steam App IDがUnreal Engine設定(DefaultEngine.iniにあります)で正しくないか欠落している場合、ゲームはSteamログインサービスにアクセスできません。
DefaultEngine.iniファイルを再確認し、Steam App IDが正しく設定されていることを確認してください。
Steamログインが機能しない
Steam側でアクセストークンが欠落しているため、プレイヤーがSteamでログインできません。
- Steamアプリがバックグラウンドで実行されていることを確認してください。