# 合并记录: dev_rustore 测试内容 → dev_flexion **日期:** 2026-04-30 **源分支:** dev_rustore (c105818) **目标分支:** dev_flexion (66aa7a9) --- ## 已合并的文件 ### 1. sdk-intergration/Assets/Scripts/SDKTest.cs 新增 VK 登录/绑定/检查 和 Review 测试按钮及事件处理: **新增字段:** - `_loginVkBtn` — VK 登录按钮 - `_linkVkBtn` — VK 绑定按钮 - `_checkVkBtn` — VK 检查绑定按钮 - `_reviewBtn` — 应用评价按钮 **新增监听 (Start):** ```csharp _loginVkBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwVkid)); _linkVkBtn.onClick.AddListener(OnLinkVkId); _checkVkBtn.onClick.AddListener(OnCheckVKId); _reviewBtn.onClick.AddListener(OnReview); ``` **新增方法:** ```csharp private async void OnLinkVkId() // VK 绑定 → TYSdkFacade.Instance.LinkAccount(EAccoutType.hwVkid) private async void OnCheckVKId() // VK 检查 → TYSdkFacade.Instance.LinkCheck(EAccoutType.hwVkid) private void OnReview() // 评价 → UnityBridgeFunc.Review() ``` ### 2. sdk-intergration/Assets/Scenes/SampleScene.unity 直接从 dev_rustore 检出完整文件,包含新增 UI 按钮 GameObject: - VK Login 按钮 - VK Link 按钮 - VK Check 按钮 - Review 按钮 ### 3. sdk-intergration/ProjectSettings/ProjectSettings.asset 修复构建错误,将 `AndroidMinSdkVersion` 从 25 提升到 26: - **原因:** `tuyoosdk_1.0.0.aar` 声明 minSdkVersion 26,低于此版本会 manifest 合并失败 - **影响:** 全局生效,所有渠道统一 minSdk 26 --- ## 跳过的文件 (dev_flexion 已有更完善的实现) ### TYSdkModel.cs — 跳过 - dev_rustore: 硬编码 `AccountInfo.hwPayType = "rustore.global.app"`, SKUDetail 写死 Rustore 格式 - dev_flexion: 使用 `ChannelConfig.Channel` 动态区分渠道,同时兼容 Google/Rustore/Flexion - **理由:** dev_flexion 的 `ChannelConfig` 抽象更成熟,无需降级 ### TYSdkFacade.cs — 跳过 - dev_rustore: 硬编码 `Channel = "hwVkid"`, 超时 120s - dev_flexion: 已有 `Channel => ChannelConfig.Channel`, 动态 `LoginTimeoutSeconds` - **理由:** dev_flexion 已包含 VK 映射 `{"vk.global.app", EAccoutType.hwVkid}`, 且抽象更优 ### TYSdkFacade_Pay.cs — 跳过 - dev_rustore: `var pType = tysdk.AccountInfo.hwPayType` (硬编码 rustore) - dev_flexion: `var pType = ChannelConfig.PayType` (动态配置) - **理由:** dev_flexion 的方案已覆盖 rustore 支付类型 ### UnityBridgeFunc.cs — 跳过 - dev_rustore: 仅代码格式重排,无功能变更 - dev_flexion: 已包含 `Review()` 等方法声明 --- ## 构建错误修复 ``` Error: uses-sdk:minSdkVersion 25 cannot be smaller than version 26 declared in library [:tuyoosdk_1.0.0:] ``` **修复:** `ProjectSettings.asset` → `AndroidMinSdkVersion: 25` → `26` **替代方案分析:** - `tools:overrideLibrary="com.tuyoo.gamesdk"` (rustore AndroidManifest 已有) 只能绕过 manifest 合并冲突 - 无法绕过 gradle 层 `processReleaseMainManifest` task 的 minSdkVersion 检查 - 改 ProjectSettings 是唯一可行方案 --- ## SKU 列表格式统一 **问题:** Rustore 和 GooglePlay 返回的商品列表 JSON 字段不同,C# 端用同一个 `SKUDetail` 类反序列化。 **方案:** 在 Java 端 `ChannelHelpers.normalizeSkuList()` 中统一格式,C# 端不做渠道判断。 ### 数据流 ``` SDK API → defaultThirdExtend() → ChannelHelpers.normalizeSkuList(msg) → Unity SKUListResult → DeserializeObject> ``` ### 变更文件 #### 1. ExtraPluginCfgs/Android/rustore/ChannelHelpers.java — 新增 normalizeSkuList ```java // 将 Rustore 原始格式转为统一格式: // price: "199" (戈比) → "₽1.99" // 新增 price_amount_micros: "199" * 10000 = "1990000" // 新增 price_currency_code: ← currency 字段 ``` #### 2. ExtraPluginCfgs/Android/googleplay/ChannelHelpers.java — 新增 normalizeSkuList ```java // GooglePlay 格式已是标准,直接原样返回 public static String normalizeSkuList(String msg) { return msg; } ``` #### 3. ExtraPluginCfgs/Android/flexion/ChannelHelpers.java — 新增 normalizeSkuList ```java // Flexion 有自己的 SDKHelper.queryProducts(),不走 defaultThirdExtend,编译需要方法存在 public static String normalizeSkuList(String msg) { return msg; } ``` #### 4. SDKManager.java — defaultThirdExtend 调用 normalizeSkuList ```java // 回调成功时: result.put("respObj", ChannelHelpers.normalizeSkuList(msg)); ``` #### 5. TYSdkModel.cs — SKUDetail 简化 ```csharp // 去掉 Normalize() 方法和 normalized 字段 // 属性直接用统一字段: // ProdPrice => float.Parse(price_amount_micros) / 1000000 // ProdPriceStr => price ``` #### 6. TYSdkFacade_Pay.cs — SKUListResult 去掉 Normalize 调用 ```csharp // 反序列化后直接赋值,不再调 sku.Normalize() ``` ### 扩展新渠道 添加新渠道时只需: 1. 创建 `ExtraPluginCfgs/Android/{channel}/ChannelHelpers.java` 2. 实现 `normalizeSkuList()` 将该渠道 SKU JSON 转为统一格式 3. C# 端无需改动