diff --git a/Runtime/Procedures/Startup/ProcedureLauncherState.cs b/Runtime/Procedures/Startup/ProcedureLauncherState.cs index f6b7cb9..1bf5fad 100644 --- a/Runtime/Procedures/Startup/ProcedureLauncherState.cs +++ b/Runtime/Procedures/Startup/ProcedureLauncherState.cs @@ -39,6 +39,7 @@ private async UniTask StartLauncherUIAsync(IFsm procedureOwne GameApp.Web.RemoveBaseHeader(StartupProcedureUtility.GameFrameXApiKeyHeader); GameApp.Web.RemoveBaseHeader(StartupProcedureUtility.GameFrameXAppIdHeader); GameApp.Web.RemoveBaseHeader(StartupProcedureUtility.GameFrameXAppSecretHeader); + GameApp.Web.RemoveBaseHeader(StartupProcedureUtility.GameFrameXTenantSecretHeader); foreach (var header in StartupProcedureUtility.CreateGameFrameXHeaders(options)) { diff --git a/Runtime/Procedures/StartupProcedureUtility.cs b/Runtime/Procedures/StartupProcedureUtility.cs index a2f9168..1581a8e 100644 --- a/Runtime/Procedures/StartupProcedureUtility.cs +++ b/Runtime/Procedures/StartupProcedureUtility.cs @@ -16,9 +16,10 @@ namespace GameFrameX.Startup.Runtime /// internal static class StartupProcedureUtility { - public const string GameFrameXApiKeyHeader = "GameFrameX-Api-Key"; + public const string GameFrameXApiKeyHeader = "GameFrameX-Tenant-Id"; public const string GameFrameXAppIdHeader = "GameFrameX-App-Id"; public const string GameFrameXAppSecretHeader = "GameFrameX-App-Secret"; + public const string GameFrameXTenantSecretHeader = "GameFrameX-Tenant-Secret"; /// /// 从流程所有者中获取启动选项。 @@ -104,7 +105,7 @@ public static Dictionary CreateHttpParams(StartupOptions options public static Dictionary CreateGameFrameXHeaders(StartupOptions options) { - var headers = new Dictionary(3); + var headers = new Dictionary(4); if (options == null) { return headers; @@ -113,6 +114,7 @@ public static Dictionary CreateGameFrameXHeaders(StartupOptions AddHeaderIfNotEmpty(headers, GameFrameXApiKeyHeader, options.GameFrameXApiKey); AddHeaderIfNotEmpty(headers, GameFrameXAppIdHeader, options.GameFrameXAppId); AddHeaderIfNotEmpty(headers, GameFrameXAppSecretHeader, options.GameFrameXAppSecret); + AddHeaderIfNotEmpty(headers, GameFrameXTenantSecretHeader, options.GameFrameXTenantSecret); return headers; } diff --git a/Runtime/Startup/StartupOptions.cs b/Runtime/Startup/StartupOptions.cs index 6cae678..e62b139 100644 --- a/Runtime/Startup/StartupOptions.cs +++ b/Runtime/Startup/StartupOptions.cs @@ -12,6 +12,7 @@ public sealed class StartupOptions : ScriptableObject [Header("Admin")] [Tooltip("GameFrameX 管理后台的租户ID")] public string GameFrameXApiKey = ""; + [Tooltip("GameFrameX 管理后台的租户密钥")] public string GameFrameXTenantSecret = ""; [Tooltip("GameFrameX 管理后台的应用ID")] public string GameFrameXAppId = ""; [Tooltip("GameFrameX 管理后台的应用密钥")] public string GameFrameXAppSecret = ""; @@ -48,4 +49,4 @@ public sealed class StartupOptions : ScriptableObject [Tooltip("启动 UI 的资源路径,传给 IStartupUIHandler。")] public string LauncherUIResName = "UI/UILauncher"; } -} \ No newline at end of file +} diff --git a/Tests/Runtime/StartupOptionsTests.cs b/Tests/Runtime/StartupOptionsTests.cs index 0c2c75a..d676d6e 100644 --- a/Tests/Runtime/StartupOptionsTests.cs +++ b/Tests/Runtime/StartupOptionsTests.cs @@ -25,6 +25,7 @@ public void DefaultValues_AreCorrect() Assert.IsNotNull(options.GlobalInfoUrls); Assert.AreEqual(0, options.GlobalInfoUrls.Length, "GlobalInfoUrls default should be empty array"); Assert.AreEqual(string.Empty, options.GameFrameXApiKey); + Assert.AreEqual(string.Empty, options.GameFrameXTenantSecret); Assert.AreEqual(string.Empty, options.GameFrameXAppId); Assert.AreEqual(string.Empty, options.GameFrameXAppSecret); Assert.AreEqual(3, options.MaxAttemptsPerUrl); @@ -64,11 +65,11 @@ public void HasCreateAssetMenuAttribute() } [Test] - public void HasFifteenPublicFields() + public void HasSixteenPublicFields() { var publicFields = typeof(StartupOptions).GetFields(BindingFlags.Public | BindingFlags.Instance); - Assert.AreEqual(15, publicFields.Length, - "StartupOptions should expose exactly 15 public fields per spec §3.1.1"); + Assert.AreEqual(16, publicFields.Length, + "StartupOptions should expose exactly 16 public fields per spec §3.1.1"); } [Test] @@ -76,6 +77,7 @@ public void CreateGameFrameXHeaders_OnlyIncludesNonEmptyValues() { var options = ScriptableObject.CreateInstance(); options.GameFrameXApiKey = "api-key"; + options.GameFrameXTenantSecret = "tenant-secret"; options.GameFrameXAppId = ""; options.GameFrameXAppSecret = "app-secret"; @@ -83,9 +85,11 @@ public void CreateGameFrameXHeaders_OnlyIncludesNonEmptyValues() var method = utilityType.GetMethod("CreateGameFrameXHeaders", BindingFlags.Public | BindingFlags.Static); var headers = (Dictionary)method.Invoke(null, new object[] { options }); - Assert.AreEqual(2, headers.Count); - Assert.AreEqual("api-key", headers["GameFrameX-Api-Key"]); + Assert.AreEqual(3, headers.Count); + Assert.AreEqual("api-key", headers["GameFrameX-Tenant-Id"]); + Assert.AreEqual("tenant-secret", headers["GameFrameX-Tenant-Secret"]); Assert.AreEqual("app-secret", headers["GameFrameX-App-Secret"]); + Assert.IsFalse(headers.ContainsKey("GameFrameX-Api-Key")); Assert.IsFalse(headers.ContainsKey("GameFrameX-App-Id")); } }