diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx
index 271f4b03..4eef0a9d 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx
@@ -540,7 +540,7 @@
Verification failed
- 验证码已发送至邮箱
+ The verification code has been sent to your e-mail.
Validation request is too frequent. Please try again in 1 minute.
@@ -1167,16 +1167,16 @@
Configure Geetest CAPTCHA Verficaition API
- 登录胡桃通行证
+ Login to Snap Hutao Passport
- 注册胡桃通行证
+ Signup Snap Hutao Passport
- 重置胡桃通行证密码
+ Reset Password of Snap Hutao Passport
- 注销胡桃通行证账号
+ Delete Snap Hutao Passport
Export App
@@ -1941,7 +1941,7 @@
Reset Password
- 注销账号的数据将永远丢失,无法恢复
+ Delete Snap Hutao Passport will cause your data to lose without any recovery option
Enter your email
@@ -2226,49 +2226,49 @@
Home
- 三思而后行
+ Proceed with caution
- 危险操作
+ Danger Zone
- 胡桃云服务到期时间
+ Snap Hutao Cloud Expiring in
- 胡桃通行证账号
+ Snap Hutao Passport
- 您可以无限制使用任何基于胡桃云服务的功能
+ You are unlimited in any Snap Hutao Cloud features
- 已认证的合作开发者
+ Certificated Developer
- 登录
+ Sign in
- 退出登录
+ Sign out
- 您可以无限制的使用任何测试功能
+ You are unlimited in any testing feature
- 胡桃开发/运维
+ Snap Hutao developer and maintainer
- 我们有时会向某些用户赠送胡桃云兑换码
+ We sometimes give away Snap Hutao Cloud redemption codes to some users
- 使用兑换码
+ Use Redemption Code
- 注册
+ Register
- 修改密码
+ Change Password
- 注销账号
+ Delete Account
After a full reading of the Genshin Impact and Snap Hutao user agreements, I choose to enable「Game Launcher - Advanced Features」.
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx
index 9e93df7c..af2b3f46 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx
@@ -540,7 +540,7 @@
認証に失敗しました。
- 验证码已发送至邮箱
+ 入力されたメールアドレスへ確認コードが送信されました
認証リクエストが多すぎます。一分後にやり直してください。
@@ -1167,16 +1167,16 @@
Geetest/CAPTCHA 認証APIの設定
- 登录胡桃通行证
+ 胡桃パスポートへログイン
- 注册胡桃通行证
+ 胡桃パスポートの登録
- 重置胡桃通行证密码
+ 胡桃パスポートのパスワードをリセット
- 注销胡桃通行证账号
+ 胡桃パスポート アカウントの削除
Appをエクスポート
@@ -1941,7 +1941,7 @@
パスワードを忘れました
- 注销账号的数据将永远丢失,无法恢复
+ 削除されたアカウントのデータは永久的に削除され、復元することは出来ません。
メールアドレスを入力してください。
@@ -2226,49 +2226,49 @@
ホーム
- 三思而后行
+ 考え直して!!
- 危险操作
+ 危険な操作
- 胡桃云服务到期时间
+ 胡桃クラウドサービスの有効期限
- 胡桃通行证账号
+ 胡桃アカウント
- 您可以无限制使用任何基于胡桃云服务的功能
+ 胡桃クラウドのサービスをベースにした様々な機能が制限なく利用できます
- 已认证的合作开发者
+ 認定済みの共同開発者
- 登录
+ ログイン
- 退出登录
+ ログアウト
- 您可以无限制的使用任何测试功能
+ テスト段階のあらゆる機能を使用できます。
- 胡桃开发/运维
+ 胡桃の運用と開発または保守
- 我们有时会向某些用户赠送胡桃云兑换码
+ 胡桃クラウドの引き替えコードを一部のユーザーに配布する事があります。
- 使用兑换码
+ 引き替えコードの使用
- 注册
+ 登録
- 修改密码
+ パスワードの変更
- 注销账号
+ アカウントの削除
原神およびSnap Hutaoの利用規約を全て熟読し、その後に『ゲームランチャー - 上級者向け設定』を有効にします。
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
index ec6fea39..25ff0bcd 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
@@ -4,6 +4,7 @@
using Snap.Hutao.Core;
using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.Core.IO.Ini;
+using Snap.Hutao.Factory.Abstraction;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Service.Game.Locator;
using Snap.Hutao.Service.Game.Package;
@@ -25,6 +26,7 @@ namespace Snap.Hutao.Service.Game;
[Injection(InjectAs.Singleton, typeof(IGameService))]
internal sealed partial class GameService : IGameService
{
+ private readonly IContentDialogFactory contentDialogFactory;
private readonly PackageConverter packageConverter;
private readonly IServiceProvider serviceProvider;
private readonly IGameDbService gameDbService;
@@ -300,7 +302,7 @@ internal sealed partial class GameService : IGameService
{
// ContentDialog must be created by main thread.
await taskContext.SwitchToMainThreadAsync();
- LaunchGameAccountNameDialog dialog = serviceProvider.CreateInstance();
+ LaunchGameAccountNameDialog dialog = await contentDialogFactory.CreateInstanceAsync().ConfigureAwait(false);
(bool isOk, string name) = await dialog.GetInputNameAsync().ConfigureAwait(false);
if (isOk)
diff --git a/src/Snap.Hutao/Snap.Hutao/View/UserView.xaml b/src/Snap.Hutao/Snap.Hutao/View/UserView.xaml
index d84bbad5..0dcba325 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/UserView.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/UserView.xaml
@@ -280,7 +280,6 @@
Text="{shcm:ResourceString Name=ViewUserUser}"/>
();
+ UserDialog dialog = await contentDialogFactory.CreateInstanceAsync().ConfigureAwait(false);
ValueResult result = await dialog.GetInputCookieAsync().ConfigureAwait(false);
// User confirms the input
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs
index 2b40fd6a..4247f148 100644
--- a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs
@@ -168,7 +168,7 @@ internal static class ApiEndpoints
}
#endregion
- #region
+ #region ApiTakumiEventBbsSignReward
///
/// 签到活动Id
@@ -367,6 +367,19 @@ internal static class ApiEndpoints
public const string AccountCreateActionTicket = $"{PassportApi}/account/ma-cn-verifier/app/createActionTicketByToken";
#endregion
+ #region PublicDataApi
+
+ ///
+ /// 获取 fingerprint
+ ///
+ public const string DeviceFpGetFp = $"{PublicDataApiDeviceFpApi}/getFp";
+
+ public static string DeviceFpGetExtList(int platform)
+ {
+ return $"{PublicDataApiDeviceFpApi}/getExtList?platform={platform:D}";
+ }
+ #endregion
+
#region SdkStaticLauncherApi
///
@@ -418,6 +431,9 @@ internal static class ApiEndpoints
private const string PassportApiAuthApi = $"{PassportApi}/account/auth/api";
private const string PassportApiV4 = "https://passport-api-v4.mihoyo.com";
+ private const string PublicDataApi = "https://public-data-api.mihoyo.com";
+ private const string PublicDataApiDeviceFpApi = $"{PublicDataApi}/device-fp/api";
+
private const string SdkStatic = "https://sdk-static.mihoyo.com";
private const string SdkStaticLauncherApi = $"{SdkStatic}/hk4e_cn/mdk/launcher/api";
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PublicData/DeviceFp/DeviceFpClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PublicData/DeviceFp/DeviceFpClient.cs
new file mode 100644
index 00000000..d0d397c3
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PublicData/DeviceFp/DeviceFpClient.cs
@@ -0,0 +1,12 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient;
+
+namespace Snap.Hutao.Web.Hoyolab.PublicData.DeviceFp;
+
+[HttpClient(HttpClientConfiguration.Default)]
+internal sealed partial class DeviceFpClient
+{
+
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PublicData/DeviceFp/DeviceFpData.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PublicData/DeviceFp/DeviceFpData.cs
new file mode 100644
index 00000000..7f744fb4
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PublicData/DeviceFp/DeviceFpData.cs
@@ -0,0 +1,31 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+namespace Snap.Hutao.Web.Hoyolab.PublicData.DeviceFp;
+
+internal sealed class DeviceFpData
+{
+ [JsonPropertyName("device_id")]
+ public string DeviceId { get; set; } = default!;
+
+ [JsonPropertyName("bbs_device_id")]
+ public string? BbsDeviceId { get; set; }
+
+ [JsonPropertyName("seed_id")]
+ public string SeedId { get; set; } = default!;
+
+ [JsonPropertyName("seed_time")]
+ public string SeedTime { get; set; } = default!;
+
+ [JsonPropertyName("platform")]
+ public string Platform { get; set; } = default!;
+
+ [JsonPropertyName("device_fp")]
+ public string DeviceFp { get; set; } = default!;
+
+ [JsonPropertyName("app_name")]
+ public string AppName { get; set; } = default!;
+
+ [JsonPropertyName("ext_fields")]
+ public Dictionary ExtFields { get; set; } = default!;
+}
\ No newline at end of file