メインコンテンツまでスキップ

Steam をアイデンティティプロバイダーとして設定する

Last updated on June 12, 2024

概要

このガイドは、検証済みのSteam デベロッパーが、Steam プレイヤーアカウントを AccelByte Gaming Services (AGS)に接続することを支援するためのものです。ゲームによっては、ここに記載されていない Steam サービス内の追加機能を設定する必要があります。Steam サービスの設定の詳細については、Steam 担当者にお問い合わせいただき、また Steam のドキュメントを直接確認されることをお勧めします。

AccelByte デベロッパーパートナーマネージャーにリクエストできる機密のガイド資料をご用意しています。

目標

  • AccelByte Game SDK を使用して、ゲームの Steam 認証方法を有効化する。
  • AccelByte プレイヤーポータルを使用して、パブリッシャーウェブサイトの Steam 認証方法を有効化する。

前提条件

  • 有効な Steam デベロッパーアカウントを所有していて、Steamworksにログインできる必要があります。

    • Steam Direct プロセスを通じて App ID を設定します。

    • Steamworks ドキュメントに従い、Steam パブリッシャー Web API キーを設定します。

    • Unreal Engine またはUnityについては、Steamworks GitHub ページから Steamworks SDK を入手します。

      注記

      Steam アプリやパブリッシャー Web API キーの設定に問題がある場合は、デベロッパーパートナーマネージャーに連絡して AccelByte からガイドを入手してください。

  • Unreal Engine Steam OSS を所有しておきます。

    • UE V4.27 以降:Unreal Engine OSS
    • UE V5.0:Unreal Engine OSS
  • 認証を設定し、権限を管理するための AccelByte 管理者ポータルアカウントを所有しておきます。まだ設定していない場合は以下を設定します。

    • プレイヤーポータルとランチャーにパブリッシャーの名前空間を設定します。
    • ゲームに対し、ゲームの名前空間を設定します。
  • ウェブログインを設定するにはプレイヤーポータルが必要になります。 AccelByte Game SDK をインポートしたUnityまたはUnrealゲームプロジェクトを所有しておきます。

    • 最新版の AccelByte Unity SDK または AccelByte Unreal SDK を入手します。
  • AccelByte IAM クライアントに精通しておきます。

Steam 認証の有効化

Steam SDK ログイン方法の設定

  1. AccelByte 管理者ポータルにログインし、[Game Namespace (ゲームの名前空間)]を選択し、[User Management (ユーザー管理)]サイドバーの下にある[Login Method (ログイン方法)]をクリックし、右側の[+ Add New (+新規を追加)]ボタンをクリックします。

    AccelByte Admin Portal Login

  2. Steam SDK]をクリックします。

    Steam SDK

  3. Steam ネットワークポータルの[APP ID (アプリ ID)]と[Web API Key (Web API キー)]を入力します。[Redirect URI (リダイレクト URI)]に http://127.0.0.1 と入力し、[Create (作成)]ボタンをクリックします。

    Steam Create Configuration

  4. アクティベートします。

    Activate Steam SDK

IAM クライアントの作成

IAM クライアントとは、Steam プラットフォームでリリースしたいゲームクライアントのことです。IAM クライアントを使用すると、ゲームクライアントは適切な権限を使用して、保護されている AccelByte Gaming Services リソースへのアクセスを要求できます。

  1. Platform Configurations (プラットフォーム設定)]に移動し、[IAM Clients (IAM クライアント)]を見つけます。

    IAM clients

  2. + Create New (+新規作成)]ボタンをクリックして、新しいIAM クライアントを作成します。

    Create IAM client

    a.[Client Type (クライアントタイプ)]には[Confidential (機密)]と入力します。[Confidential type (機密タイプ)]を使用することを強くお勧めします。なぜなら、AccelByte Gaming Services リソースにアクセスするために、場合によっては後でこの IAM クライアントにいくつかの権限を追加する必要があり、その場合[Public (公開)]タイプを使用していると適切なセキュリティが利用できないためです。

    b.[Secret (秘密)]を入力します。許容される形式で秘密を自分で入力するか、[Generate Client Secret (クライアントの秘密を作成)]をクリックすると、秘密鍵を生成できます。

    この作成ステップの後、クライアントの秘密は表示されません。必ずその値をコピーして保存してください。ゲームの設定時に必要になります。

    c.[Client Name (クライアント名)]を入力します。この IAM クライアントは Steam プラットフォームに固有であるため、<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 (プラットフォーム入力)]とは、ゲームをビルドするためのターゲットプラットフォームのことです。ここでは[Steam]に設定します。

    k. [Advanced Configuration (高度な設定)]は、二要素認証や有効期限の上書きなどの追加機能で構成されています。これはゲームクライアントのビルド用なので、デフォルト/無効のままでかまいません。

    IAM client configuration

    注記

    クライアント ID は既に生成されていて、コピーできます。後ほどゲームをビルドする際に、SDK 設定でクライアント ID を使用できます。

    IAM client configuration

  3. [Client Detail (クライアントの詳細)]ページにリダイレクトされます。必要に応じて権限を設定してください。権限の詳細については、IAM クライアントの権限についてのドキュメントを参照してください。

    Steam game details

    Steam game details

ゲーム内ログイン手順

ゲームエンジンごとに設定が異なります。利用可能なタブからゲームエンジンを選択してください。

Unrealゲーム内ログインの統合

AccelByte SDK を使用して Steam ログインを統合できるので、プレイヤーは Steam 認証情報を使用してゲームにログインできます。

Unrealの準備と設定

依存関係の追加

最初に、公開依存関係モジュールOnlineSubsystemOnlineSubsystemSteamSteamworksを追加する必要があります。これらはすべて、プロジェクトを統合して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 Engine プロジェクト設定

DefaultEngine.iniファイルの中に、Steam 設定のための変数をいくつか追加する必要があります。プロジェクトを開くと確実に Steam が自動で開始されるようにするには、この設定が必要です。

Unreal Engine に Online Subsystem Steam を使用するように指示するには、次の設定を追加します。

[OnlineSubsystem]
DefaultPlatformService=Steam

これで、アプリケーションが Steam オンラインサブシステムを使用することをUnreal Engine に伝えたので、次の設定を追加してOnlineSubsystemSteamモジュールを設定する必要があります。

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
注記

SteamDevAppId は Steam ゲームの App ID です。

アプリケーションの接続のために Net Driver に Steam クラスを指定します。

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

Unreal Engine プロジェクト設定

AccelByte 認証情報をDefaultEngine.iniに追加します。

[/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 設定

この指示に従うと、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"

サンプルコードの実装

次に、サンプルコードを使用してゲームの Steam 認証方法を実装する方法について説明します。

IOnlineSubsystemが、DefaultEngine.iniで定義されているDefaultPlatformService値を読み取ります。IdentityInterfaceは、ユーザーアカウントに関連するこれらのサービスとのやり取りを管理し、ユーザー認証とアクセストークンの取得を可能にします。操作に問題がなければ、AccelByte SDK のLoginWithOtherPlatform関数は、アイデンティティインターフェイスから取得した認証トークンを使用して、サードパーティのプラットフォームのログインを処理します。

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;
}
const FVoidHandler OnLoginSuccessDelegate = FVoidHandler::CreateLambda([=]() {
FAccountUserData AccountUserData = FRegistry::Credentials.GetAccountUserData();

FString AccountUserDataString;
FJsonObjectConverter::UStructToJsonObjectString(AccountUserData, AccountUserDataString);

FString Message = FString::Printf(TEXT("Login to AB Service Success : %s"), *AccountUserDataString);//Failed 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

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);

このサンプルコードをプロジェクトに追加したら、プロジェクトをコンパイル、ビルド、実行します。以上です。

サンプルコードのテスト

以下の画像は、Steam を使用してサンプルコードで正常にログインしたことを示しています。

Steam login with sample code

トラブルシューティング

このセクションには、サービス使用時に発生しうる一般的なエラーや問題、およびそれらを解決する方法についての推奨事項を記載しています。

設定ミス

Steam アプリ ID が正しくない場合、またはUnreal Engine 設定(DefaultEngine.iniにて指定)に欠落がある場合、ゲームは Steam ログインサービスにアクセスできません。

  • DefaultEngine.iniファイルを再確認し、Steam App ID が正しく設定されていることを確認します。

Steam ログインが機能しない

Steam 側にアクセストークンがないと、プレイヤーは Steam でログインできません。

  • Steam アプリがバックグラウンドで実行されていることを確認します。