using System; using System.Collections.Generic; using BallKingdomCrush; using Newtonsoft.Json; using SGModule.Common; using SGModule.Common.Helper; using SGModule.GooglePay; using SGModule.NetKit; using UnityEngine; // public enum PayType // { // buy_one, // buy_one_off, // buy_gold_1, // buy_gold_2, // buy_gold_3, // buy_gold_4, // buy_gold_5, // remove_ad, // battle_pass, // pack_reward, // fail_pack, // three_days_gift, // weekly_subscription, // monthly_subscription, // yearly_subscription // } public class PurchasingManager { private static readonly List PayConfig = ConfigSystem.GetConfig(); // public static string GetPaySku(PayType key) // { // var keys = ""; // // if (PayConfig != null) // foreach (var data in PayConfig) // { // if (data.payKey != key.ToString()) continue; // keys = data.sku; // break; // } // // return keys; // } // // public static int GetVipLvFormConfig(string sku) // { // var lv = 1; // // if (GetPaySku(PayType.weekly_subscription) == sku) // lv = 1; // else if (GetPaySku(PayType.monthly_subscription) == sku) // lv = 2; // else if (GetPaySku(PayType.yearly_subscription) == sku) lv = 3; // // return lv; // } #if UNITY_IOS public static void InitProduct() { var appleData = new ApplePayData { sku = "", amount = 0, currency = "USD", shopName = "", type = "" }; //初始化商品 ApplePayManager.Instance.InitProduct(ConfigSystem.GetConfig(), ConfigManager.GameConfig.packageName, PurchasingManager.ApplePaySuccessCallback(appleData)); } public static void Purchase(ApplePayData payData) { //本地测试 // TestIOSPay(payData); // return; Debug.Log($"[Apple Pay] unity Purchase--0-----: {payData.sku}"); ApplePayManager.Instance.Purchase(payData.sku, ApplePaySuccessCallback(payData), message => { Debug.Log("purchase fail------- reason: " + message); }); } public static Action ApplePaySuccessCallback(ApplePayData payData) { return (backType, AppleResponseData) => { Debug.Log($"[Apple Pay] unity Purchase--1-----: {backType.ToString()}"); switch (backType) { case ApplePayBackType.Create: Debug.Log("[Apple Pay] Create"); var sku0 = SetSku(payData); Debug.Log($"[Apple Pay] Create---11: {sku0}"); SendEventClickByName(sku0, "click"); break; case ApplePayBackType.Check: UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PayloadingUI_Close); if (AppleResponseData != null && AppleResponseData.sku.Contains(".sub")) { DataMgr.VipExpirationTime.Value = Math.Max(DataMgr.VipExpirationTime.Value, AppleResponseData.expires_time); var level = GetVipLvFormConfig(AppleResponseData.sku); DataMgr.VipLevel.Value = level; payData.sku = AppleResponseData.sku; payData.shopName = "vip_club" + (level - 1); } var sku = SetSku(payData); Debug.Log($"[Apple Pay] Check sku===2===== {sku}"); GameDispatcher.Instance.Dispatch(GameMsg.IAP_PAY_SUCCESS, sku); Debug.Log($"[Apple Pay] Check sku===3===== {sku}"); SendEventClickByName(sku, "open"); SendEventClickByName(sku, "success"); break; case ApplePayBackType.Cancel: Debug.Log("[Apple Pay] Cancel"); var sku1 = SetSku(payData); SendEventClickByName(sku1, "open"); break; } }; } private static void TestIOSPay(ApplePayData payData) { var tranId = ""; var types = ProductType.Consumable; if (GetPaySku(PayType.battle_pass) == payData.sku) { tranId = "2000000983625783"; } else if (GetPaySku(PayType.weekly_subscription) == payData.sku) { tranId = "2000000984643029"; types = ProductType.Subscription; } if (tranId == "") return ; ApplePayManager.Instance.ApplePayTest(types, payData.sku, tranId, ApplePaySuccessCallback(payData)); } private static string SetSku(ApplePayData data) { string sku = ""; if (data.type != null && data.type == GetPaySku(PayType.remove_ad)) { sku = data.type; } else if (data.sku.Contains("shop")) { sku = data.shopName; } else if (data.sku.Contains(".sub")) { sku = data.shopName; } else { sku = data.sku; } return sku; } #elif UNITY_ANDROID public static void InitProduct() { var googleData = new GooglePayData { sku = "", amount = 0, currency = "USD", shopName = "", type = "" }; //初始化商品 // GooglePayManager.Instance.InitProduct(ConfigSystem.GetConfig(), // ConfigManager.GameConfig.packageName, ApplePaySuccessCallback(googleData)); // IAPManagerV5.Instance.InitIAPSystem(ConfigSystem.GetConfig(),ApplePaySuccessCallback(googleData), ConfigManager.GameConfig.packageName); } private static bool _isChecking = false; private static bool isFlag = false; public static void CheckSubExpiration(bool isLogin = false) { Debug.Log($"[PurchasingManager] 检查订阅开始 CheckSubExpiration isLogin: {isLogin}"); if (_isChecking || DataMgr.VipRequestNum.Value > 5) { Debug.Log($"[PurchasingManager] 检查订阅中,忽略本次调用 _isChecking== {_isChecking} VipRequestNum: {DataMgr.VipRequestNum.Value}"); return; } if (!isFlag && isLogin) { isFlag = true; DataMgr.VipRequestNum.Value++; //登录后的调用的次数 } _isChecking = true; GooglePayManager.Instance.CheckSubscription(OnCheckFinished); } private static void OnCheckFinished(bool success) { Debug.Log($"[PurchasingManager] 订阅检查完成 success={success}"); _isChecking = false; // ✅ 解锁 //只要订阅成功后,解除5次限制 if (success) { DataMgr.VipRequestNum.Value = 0; } else { DataMgr.VipLevel.Value = -1; } } public static void Purchase(GooglePayData payData) { //本地测试 // TestIOSPay(payData); // return; // Debug.Log($"[Google Pay] unity Purchase--0-----: {payData.sku}"); // GooglePayManager.Instance.Purchase(payData.sku, ApplePaySuccessCallback(payData), // message => { Debug.Log("purchase fail------- reason: " + message); }); if (payData.sku.Contains("sub")) { IAPPayManager.Instance.SubscribeProduct(payData.sku, "",() => { }); } else { IAPPayManager.Instance.BuyProduct(payData.sku, "",() => { }); } } // public static Action ApplePaySuccessCallback(GooglePayData payData) // { // return (backType, GoogleResponseData) => // { // Debug.Log($"[Google Pay] unity Purchase--1-----: {backType.ToString()}"); // if (GoogleResponseData != null) // Debug.Log($"[Google Pay] GoogleResponseData sku===: {GoogleResponseData.sku}"); // // MaxPayManager.isOfficialPay = true; // // switch (backType) // { // case GooglePayBackType.Create: // Debug.Log("[Google Pay] Create"); // var sku0 = SetSku(payData); // Debug.Log($"[Google Pay] Create---11: {sku0}"); // SendEventClickByName(sku0, "click"); // break; // case GooglePayBackType.Check: // UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PayloadingUI_Close); // // if (GoogleResponseData != null && GoogleResponseData.sku.Contains(".sub")) // { // if (GoogleResponseData.expires_time > 0) // { // DataMgr.VipExpirationTime.Value = Math.Max(DataMgr.VipExpirationTime.Value, // GoogleResponseData.expires_time); // // Debug.Log( // $"[Google Pay] Pay GoogleResponseData.expires_time == {GoogleResponseData.expires_time} {DataMgr.VipExpirationTime.Value}"); // } // // var level = GetVipLvFormConfig(GoogleResponseData.sku); // DataMgr.VipLevel.Value = level; // payData.sku = GoogleResponseData.sku; // payData.shopName = "vip_club" + (level - 1); // Debug.Log($"[Google Pay] Pay Success check sku==sub=== {GoogleResponseData.sku}"); // // GameHelper.CheckVipExpiration(); // } // // // else if (GoogleResponseData != null && GoogleResponseData.sku.Contains("shop")) // { // payData.sku = GoogleResponseData.sku; // var index = GetGoldIndex(GoogleResponseData.sku); // Debug.Log($"[Google Pay] check sku===== {GoogleResponseData.sku}"); // Debug.Log($"[Google Pay] check index===== {index}"); // // payData.shopName = $"buy_gold{index}"; // } // else if (GoogleResponseData != null) // { // payData.sku = GoogleResponseData.sku; // } // // var sku = SetSku(payData); // Debug.Log($"[Google Pay] Check sku===-1===== {JsonConvert.SerializeObject(payData)}"); // Debug.Log($"[Google Pay] Check sku===2===== {sku}"); // GameDispatcher.Instance.Dispatch(GameMsg.IAP_PAY_SUCCESS, sku); // Debug.Log($"[Google Pay] Check sku===3===== {sku}"); // // SendEventClickByName(sku, "open"); // // SendEventClickByName(sku, "success"); // break; // case GooglePayBackType.Cancel: // Debug.Log("[Google Pay] Cancel"); // var sku1 = SetSku(payData); // SendEventClickByName(sku1, "open"); // // BIManager.Instance.TrackPurchase(payData.amount, payData.currency, "0", payData.sku, "paid_err"); // break; // // case GooglePayBackType.TimeOut: // Debug.Log("[Google Pay] timeout"); // GameHelper.ShowTips("no_connect", true); // break; // } // }; // } // // private static string SetSku(GooglePayData data) // { // var sku = ""; // if (data.type != null && data.type == GetPaySku(PayType.remove_ad)) // sku = data.type; // else if (data.sku.Contains("shop")) // sku = data.shopName; // else if (data.sku.Contains(".sub")) // sku = data.shopName; // else // sku = data.sku; // // return sku; // } private static int GetGoldIndex(string sku) { var idx = 0; var list = ConfigSystem.GetConfig(); for (var i = 0; i < list.Count; i++) if (list[i].SKU == sku) { idx = i; break; } return idx; } #endif // 商店商品映射表 public static readonly Dictionary _shopProductMap = new Dictionary { { IAPPayManager.PRODUCT_SHOP_1, "0" }, { IAPPayManager.PRODUCT_SHOP_2, "1" }, { IAPPayManager.PRODUCT_SHOP_3, "2" }, { IAPPayManager.PRODUCT_SHOP_4, "3" }, { IAPPayManager.PRODUCT_SHOP_5, "4" } }; // 订阅商品映射表 public static readonly Dictionary _vipProductMap = new Dictionary { { IAPPayManager.PRODUCT_VIP_WEEK, "0" }, { IAPPayManager.PRODUCT_VIP_MONTH, "1" }, { IAPPayManager.PRODUCT_VIP_YEAR, "2" }, }; public static void SendEventClickByName(string name, string type) { if (name == null) return; string clickTrackKey = null; string successTrackKey = null; string openTrackKey = null; if (name == IAPPayManager.PRODUCT_FIRST_GIFT) { clickTrackKey = ADEventTrack.Property.lucky_gift_click; successTrackKey = ADEventTrack.Property.lucky_gift_receive; openTrackKey = ADEventTrack.Property.lucky_gift_show; } else if (name == IAPPayManager.PRODUCT_REMOVE_ADS) { clickTrackKey = ADEventTrack.Property.remove_ad_click; successTrackKey = ADEventTrack.Property.remove_ad_receive; openTrackKey = ADEventTrack.Property.remove_ad_show; } else if (name == IAPPayManager.PRODUCT_PASS_BONUS) { clickTrackKey = ADEventTrack.Property.master_pass_click; successTrackKey = ADEventTrack.Property.master_pass_receive; openTrackKey = ADEventTrack.Property.master_pass_show; } else if (name == IAPPayManager.PRODUCT_SPACE_BONUS) { clickTrackKey = ADEventTrack.Property.buy_one_click; successTrackKey = ADEventTrack.Property.buy_one_success; openTrackKey = ADEventTrack.Property.buy_one_show; } // else if (name == GetPaySku(PayType.buy_one_off)) // { // // clickTrackKey = ADEventTrack.Property.BuyOneOffClick; // // successTrackKey = ADEventTrack.Property.BuyOneOffSuccess; // // openTrackKey = ADEventTrack.Property.BuyOneOffShow; // } // else if (name == GetPaySku(PayType.fail_pack)) // { // clickTrackKey = ADEventTrack.Property.fail_click; // successTrackKey = ADEventTrack.Property.fail_buy_success; // openTrackKey = ADEventTrack.Property.fail_show; // } else if (name == IAPPayManager.PRODUCT_THREE_DAY) { clickTrackKey = ADEventTrack.Property.three_days_gift_click; successTrackKey = ADEventTrack.Property.three_days_gift_buy_success; openTrackKey = ADEventTrack.Property.three_days_gift_show; } else if (_shopProductMap.TryGetValue(name, out var idx)) { clickTrackKey = ADEventTrack.Property.shop_click_ + idx; successTrackKey = ADEventTrack.Property.shop_receive_ + idx; openTrackKey = ADEventTrack.Property.shop_show; } else if (_vipProductMap.TryGetValue(name, out var vipIdx)) { clickTrackKey = ADEventTrack.Property.vip_click_ + vipIdx; successTrackKey = ADEventTrack.Property.vip_success_ + vipIdx; openTrackKey = ADEventTrack.Property.vip_show_page; } if (type == "success" && successTrackKey != null) TrackKit.SendEvent(ADEventTrack.Google_Pay_Event, successTrackKey); else if (type == "click" && clickTrackKey != null) TrackKit.SendEvent(ADEventTrack.Google_Pay_Event, clickTrackKey); else if (type == "open" && openTrackKey != null) TrackKit.SendEvent(ADEventTrack.Google_Pay_Event, openTrackKey); } }