From 49d80ee008d8554de61da6a471ac0136f11361a3 Mon Sep 17 00:00:00 2001 From: "Liubing\\LB" Date: Thu, 14 May 2026 11:49:07 +0800 Subject: [PATCH] =?UTF-8?q?update:=E6=9B=B4=E6=96=B0tysdk:=E6=B3=A8?= =?UTF-8?q?=E6=84=8F=E7=9B=B4=E6=8E=A5consume=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Android/flexion/ConfigManager.java | 1 + .../Android/flexion/FlexionSDKHelper.java | 53 ++++++++++++++++--- .../Android/googleplay/ConfigManager.java | 1 + .../Android/rustore/ConfigManager.java | 1 + .../Plugins/Android/mainTemplate.gradle | 1 + .../Plugins/Android/settingsTemplate.gradle | 3 ++ sdk-intergration/Assets/Scripts/SDKTest.cs | 6 +++ .../tysdk/Plugins/Android/SDKManager.java | 6 +-- .../Packages/tysdk/Runtime/PaymentVerifier.cs | 1 + 9 files changed, 61 insertions(+), 12 deletions(-) diff --git a/ExtraPluginCfgs/Android/flexion/ConfigManager.java b/ExtraPluginCfgs/Android/flexion/ConfigManager.java index 1727c92..7f0bd43 100644 --- a/ExtraPluginCfgs/Android/flexion/ConfigManager.java +++ b/ExtraPluginCfgs/Android/flexion/ConfigManager.java @@ -25,4 +25,5 @@ public class ConfigManager { public static final String PAY_TYPE_CALLBACK_FUNCTION_NAME = "SKUListResult"; public static final String FCM_NOTICE_FUNCTION_NAME = "FCMCallback"; public static final String FCM_REALNAME_CALLBACK_FUNCTION_NAME = "RealNameCallback"; + public static final String INIT_CALLBACK_FUNCTION_NAME = "InitResult"; } diff --git a/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java b/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java index dfdaca5..06efbf4 100644 --- a/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java +++ b/ExtraPluginCfgs/Android/flexion/FlexionSDKHelper.java @@ -67,6 +67,7 @@ public class FlexionSDKHelper implements SDKManager.ISDKHelper { } catch (Exception e) { Log.e(TAG, "TuYoo SDK init failed, skip FLX init: " + e); TYUnityActivity.setSdkInited(); + SDKManager.notifyInitResult(false, "tuyoo_init_failed: " + e.getMessage()); } if (sdkInitOk) { @@ -77,10 +78,12 @@ public class FlexionSDKHelper implements SDKManager.ISDKHelper { Log.i(TAG, "FLX.showFlexionScreens result=" + screenCode); initBillingService(activity); TYUnityActivity.setSdkInited(); + SDKManager.notifyInitResult(true, "ok"); }); } else { Log.e(TAG, "FLX.init failed: " + initCode); TYUnityActivity.setSdkInited(); + SDKManager.notifyInitResult(false, "flx_init_failed: " + initCode); } }); } @@ -114,8 +117,41 @@ public class FlexionSDKHelper implements SDKManager.ISDKHelper { String finalPayload = developerPayload; activity.runOnUiThread(() -> { Log.i(TAG, "[PAY-FLOW] launching billing flow for: " + productId + " payload=" + finalPayload); - billingService.launchBillingFlow(activity, - new BillingFlowParams(productId, "inapp", finalPayload)); + Log.i(TAG, "[PAY-FLOW] billingService=" + billingService + " billingConnected=" + billingConnected); + try { + BillingResult result = billingService.launchBillingFlow(activity, + new BillingFlowParams(productId, "inapp", finalPayload)); + Log.i(TAG, "[PAY-FLOW] launchBillingFlow result: code=" + result.getResponseCode() + + " debugMsg=" + result.getDebugMessage()); + if (result.getResponseCode() == 2001) { + Log.i(TAG, "[PAY-FLOW] service not ready, retry after 3s..."); + new android.os.Handler(android.os.Looper.getMainLooper()).postDelayed(() -> { + try { + BillingResult retryResult = billingService.launchBillingFlow(activity, + new BillingFlowParams(productId, "inapp", finalPayload)); + Log.i(TAG, "[PAY-FLOW] launchBillingFlow retry result: code=" + retryResult.getResponseCode() + + " debugMsg=" + retryResult.getDebugMessage()); + if (retryResult.getResponseCode() != 2000) { + sendPayCallback(1, "billing_flow_error_" + retryResult.getResponseCode() + + "_" + retryResult.getDebugMessage(), null, null, null); + } + } catch (Exception ex) { + sendPayCallback(1, "launch_billing_failed: " + ex.getMessage(), null, null, null); + } + }, 3000); + return; + } + if (result.getResponseCode() != 2000) { + Log.e(TAG, "[PAY-FLOW] launchBillingFlow error: code=" + result.getResponseCode() + + " debugMsg=" + result.getDebugMessage()); + sendPayCallback(1, "billing_flow_error_" + result.getResponseCode() + + "_" + result.getDebugMessage(), null, null, null); + } + } catch (Exception e) { + Log.e(TAG, "[PAY-FLOW] launchBillingFlow exception: " + e.getClass().getName() + + " msg=" + e.getMessage()); + sendPayCallback(1, "launch_billing_failed: " + e.getMessage(), null, null, null); + } }); } @@ -184,12 +220,15 @@ public class FlexionSDKHelper implements SDKManager.ISDKHelper { Log.i(TAG, "[PAY-FLOW] handlePurchase: state=" + purchase.getPurchaseState() + " token=" + purchase.getToken()); if (purchase.getPurchaseState() == 0) { - Log.i(TAG, "[PAY-FLOW] purchaseJson=" + purchase.getPurchaseJson()); - Log.i(TAG, "[PAY-FLOW] signature=" + purchase.getSignature()); - sendPayCallback(0, "success", purchase.getPurchaseJson(), purchase.getSignature(), purchase.getToken()); + // 支付成功 → 回传数据给 Unity 做服务端验签,验签通过后由 C# 调 ConsumePurchase + Log.i(TAG, "[PAY-FLOW] purchase success, sending to Unity for verification"); + sendPayCallback(0, "success", + purchase.getPurchaseJson(), purchase.getSignature(), purchase.getToken()); + // [旧逻辑] 直接消费,跳过验签 + // Log.i(TAG, "[PAY-FLOW] auto-consuming pending purchase: " + purchase.getToken()); + // consumePurchase(purchase.getToken()); } else if (purchase.getPurchaseState() == 2) { - Log.i(TAG, "[PAY-FLOW] purchase state=2 (pending)"); - sendPayCallback(2, "pending", null, null, null); + Log.i(TAG, "[PAY-FLOW] purchase state=2 (pending), skip"); } } diff --git a/ExtraPluginCfgs/Android/googleplay/ConfigManager.java b/ExtraPluginCfgs/Android/googleplay/ConfigManager.java index 4d30160..359a4d8 100644 --- a/ExtraPluginCfgs/Android/googleplay/ConfigManager.java +++ b/ExtraPluginCfgs/Android/googleplay/ConfigManager.java @@ -25,4 +25,5 @@ public class ConfigManager { public static final String PAY_TYPE_CALLBACK_FUNCTION_NAME = "SKUListResult"; public static final String FCM_NOTICE_FUNCTION_NAME = "FCMCallback"; public static final String FCM_REALNAME_CALLBACK_FUNCTION_NAME = "RealNameCallback"; + public static final String INIT_CALLBACK_FUNCTION_NAME = "InitResult"; } diff --git a/ExtraPluginCfgs/Android/rustore/ConfigManager.java b/ExtraPluginCfgs/Android/rustore/ConfigManager.java index d5eb8a9..21029eb 100644 --- a/ExtraPluginCfgs/Android/rustore/ConfigManager.java +++ b/ExtraPluginCfgs/Android/rustore/ConfigManager.java @@ -25,4 +25,5 @@ public class ConfigManager { public static final String PAY_TYPE_CALLBACK_FUNCTION_NAME = "SKUListResult"; public static final String FCM_NOTICE_FUNCTION_NAME = "FCMCallback"; public static final String FCM_REALNAME_CALLBACK_FUNCTION_NAME = "RealNameCallback"; + public static final String INIT_CALLBACK_FUNCTION_NAME = "InitResult"; } diff --git a/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle b/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle index 814c5c6..fa895c0 100644 --- a/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle +++ b/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle @@ -72,6 +72,7 @@ dependencies { implementation 'com.appsflyer:purchase-connector:2.2.0' // Assets/AppsFlyer/Editor/AppsFlyerDependencies.xml:8 implementation 'com.appsflyer:unity-wrapper:6.17.7' // Assets/AppsFlyer/Editor/AppsFlyerDependencies.xml:6 implementation 'com.google.android.ump:user-messaging-platform:2.1.0' // Assets/MaxSdk/AppLovin/Editor/Dependencies.xml:5 + implementation 'com.tapjoy:tapjoy-android-unitybridge:14.5.0' // Packages/com.unity.package-offerwall/Editor/TJPluginDependencies.xml:10 // Android Resolver Dependencies End **DEPS**} diff --git a/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle b/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle index 73133c1..d25174e 100644 --- a/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle +++ b/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle @@ -18,6 +18,9 @@ dependencyResolutionManagement { mavenCentral() // Android Resolver Repos Start def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/") + maven { + url "https://sdk.tapjoy.com/" // Packages/com.unity.package-offerwall/Editor/TJPluginDependencies.xml:9 + } maven { url "https://android-sdk.is.com/" // Assets/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml:8 } diff --git a/sdk-intergration/Assets/Scripts/SDKTest.cs b/sdk-intergration/Assets/Scripts/SDKTest.cs index 7f26039..eee3ee0 100644 --- a/sdk-intergration/Assets/Scripts/SDKTest.cs +++ b/sdk-intergration/Assets/Scripts/SDKTest.cs @@ -83,6 +83,10 @@ public class SDKTest : MonoBehaviour //=============================================================================== // _InitBtn.onClick.AddListener(Init); + TYSdkFacade.OnInitComplete += (success, msg) => + { + _messageTxt.text = success ? $"Init OK: {msg}" : $"Init Failed: {msg}"; + }; _loginGuestBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwGuest)); _loginGoogleBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwGoogle)); _loginFbBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwFacebook)); @@ -113,6 +117,7 @@ public class SDKTest : MonoBehaviour void Init() { + _messageTxt.text = "Initializing..."; TYSdkFacade.Instance.Init(); TDAnalytics.Init("0caf287574bd4a9bb08be8995705ef6f", "https://122-slg-online01.qijihdhk.com:8991"); @@ -132,6 +137,7 @@ public class SDKTest : MonoBehaviour Debug.Log($"customId = {customId}, customId_2 = {customId_2}"); UnityBridgeFunc.UnityResetServerUrl("https://128-hwsfsdk-sdk-test01.qijihdhk.com"); + GContext.container.Resolve().Set("PAY_VERIFY_URL", "https://192.168.9.91:7036/api/FlexionCallback"); } private void UpdateChannelTitle() diff --git a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java index 601cbab..2680bd7 100644 --- a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java +++ b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java @@ -380,11 +380,7 @@ public class SDKManager { // ------------------------------------------------------------------------- public static void UnityKnow(String productId, String productName, String productCount, - String prodorderId, String appInfo) { - if (sdkHelper != null) { - sdkHelper.pay(UnityPlayer.currentActivity, productId, productName, productCount, prodorderId, appInfo); - return; - } + String prodorderId, String appInfo) { SDKLog.i("UnityKnow : " + productId); HashMap extraInfo = new HashMap(); extraInfo.put("appInfo", appInfo); diff --git a/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs b/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs index 7f70a88..c496ef2 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/PaymentVerifier.cs @@ -1,4 +1,5 @@ using System; +using System.Text; using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json;