feat: Flexion 先验签后消费支付流程 + playerId 绑定

实现 Flexion 渠道支付验签重构:支付成功后不立即消费,将 purchaseJson/signature/purchaseToken
回调至 Unity,由服务端 SHA1withRSA 验签并校验 developerPayload.playerId 后再调用 consume。
同步更新 SDKManager 接口、UnityBridgeFunc 桥接、TYSdkModel 字段及 ExtraPluginCfgs。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 16:04:29 +08:00
parent 7fddc4e0f3
commit f60a1dd0c2
16 changed files with 343 additions and 96 deletions

View File

@@ -57,19 +57,26 @@ public class SDKManager {
private static SnsInfo tmpSnsInfo;
private static String channel = "GooglePlay";
// Channel helper registry
// Channel helper
public interface ISDKHelper {
void init(Activity activity);
void pay(Activity activity, String productId, String productName,
String productCount, String prodorderId, String appInfo);
void queryProducts();
void consume(String token);
}
private static final java.util.Map<String, ISDKHelper> helperMap = new java.util.HashMap<>();
private static ISDKHelper sdkHelper;
public static void registerHelper(String ch, ISDKHelper helper) {
helperMap.put(ch, helper);
public static void registerHelper(ISDKHelper helper) {
sdkHelper = helper;
}
public static void ConsumeFlexionPurchase(String token) {
Log.i(TAG, "ConsumeFlexionPurchase: token=" + token);
if (sdkHelper != null) {
sdkHelper.consume(token);
}
}
// -------------------------------------------------------------------------
@@ -79,7 +86,16 @@ public class SDKManager {
public static void InitSDK(Activity activity, String ch) {
channel = ChannelHelpers.CHANNEL;
ChannelHelpers.register();
sdkHelper = helperMap.get(channel);
// var builder = SDKManager.ExtendBuilder()
// .WithChannel(SDKManagerExt.CHANNEL)
// .WithInit(SDKManagerExt.GetInit())
// .WithPay(SDKManagerExt.GetPay())
// .WithQuery(SDKManagerExt.GetQuery())
// .Builder()
Log.i(TAG, "[CHANNEL-VERIFY] Java InitSDK channel=" + channel
+ " fromCSharp=" + ch
+ " helper=" + (sdkHelper != null ? sdkHelper.getClass().getSimpleName() : "default"));
@@ -87,7 +103,8 @@ public class SDKManager {
// Sync channel to C# ChannelConfig
UnityPlayer.UnitySendMessage(ConfigManager.UNITY_FACADE_NAME,
"SetChannelFromNative", channel);
// build.init(activity)
if (sdkHelper != null) {
sdkHelper.init(activity);
} else {
@@ -402,6 +419,7 @@ public class SDKManager {
// -------------------------------------------------------------------------
public static void thirdExtend() {
Log.e(TAG, "thirdExtend called, sdkHelper=" + (sdkHelper != null ? sdkHelper.getClass().getSimpleName() : "null"));
if (sdkHelper != null) {
sdkHelper.queryProducts();
return;