Files
tysdk-intergration/docs/merge-rustore-test-to-flexion.md
Liubing\LB d361d9078b 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>
2026-04-30 15:38:21 +08:00

4.9 KiB
Raw Blame History

合并记录: 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):

_loginVkBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwVkid));
_linkVkBtn.onClick.AddListener(OnLinkVkId);
_checkVkBtn.onClick.AddListener(OnCheckVKId);
_reviewBtn.onClick.AddListener(OnReview);

新增方法:

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.assetAndroidMinSdkVersion: 2526

替代方案分析:

  • 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

// 将 Rustore 原始格式转为统一格式:
// price: "199" (戈比) → "₽1.99"
// 新增 price_amount_micros: "199" * 10000 = "1990000"
// 新增 price_currency_code: ← currency 字段

2. ExtraPluginCfgs/Android/googleplay/ChannelHelpers.java — 新增 normalizeSkuList

// GooglePlay 格式已是标准,直接原样返回
public static String normalizeSkuList(String msg) { return msg; }

3. ExtraPluginCfgs/Android/flexion/ChannelHelpers.java — 新增 normalizeSkuList

// Flexion 有自己的 SDKHelper.queryProducts(),不走 defaultThirdExtend编译需要方法存在
public static String normalizeSkuList(String msg) { return msg; }

4. SDKManager.java — defaultThirdExtend 调用 normalizeSkuList

// 回调成功时: result.put("respObj", ChannelHelpers.normalizeSkuList(msg));

5. TYSdkModel.cs — SKUDetail 简化

// 去掉 Normalize() 方法和 normalized 字段
// 属性直接用统一字段:
// ProdPrice     => float.Parse(price_amount_micros) / 1000000
// ProdPriceStr  => price

6. TYSdkFacade_Pay.cs — SKUListResult 去掉 Normalize 调用

// 反序列化后直接赋值,不再调 sku.Normalize()

扩展新渠道

添加新渠道时只需:

  1. 创建 ExtraPluginCfgs/Android/{channel}/ChannelHelpers.java
  2. 实现 normalizeSkuList() 将该渠道 SKU JSON 转为统一格式
  3. C# 端无需改动