feat: merge rustore test UI and unify SKU format across channels

- Merge VK login/link/check and Review test buttons from dev_rustore
- Unify Rustore/GooglePlay SKU format via ChannelHelpers.normalizeSkuList()
- Fix ChannelConfig runtime sync: Java InitSDK sets channel from ChannelHelpers.CHANNEL
- Fix AndroidMinSdkVersion 25→26 for tuyoosdk compatibility
- Fix Flexion AndroidManifest tools:replace missing fullBackupContent value
- Add [CHANNEL-VERIFY] debug logs for channel verification

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-30 15:38:21 +08:00
parent 66aa7a931b
commit d361d9078b
21 changed files with 1124 additions and 43 deletions

View File

@@ -0,0 +1,154 @@
# 合并记录: 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<List<SKUDetail>>
```
### 变更文件
#### 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# 端无需改动