Files

461 lines
17 KiB
C#

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<ApplePay> PayConfig = ConfigSystem.GetConfig<ApplePay>();
// 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<ApplePayModel2>(),
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<ApplePayBackType, AppleResponseData> 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<SGModule.GooglePay.PayProductConfig>(),
// ConfigManager.GameConfig.packageName, ApplePaySuccessCallback(googleData));
// IAPManagerV5.Instance.InitIAPSystem(ConfigSystem.GetConfig<PayProductConfig>(),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<GooglePayBackType, GoogleResponseData> 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<Paidcoins>();
for (var i = 0; i < list.Count; i++)
if (list[i].SKU == sku)
{
idx = i;
break;
}
return idx;
}
#endif
// 商店商品映射表
public static readonly Dictionary<string, string> _shopProductMap = new Dictionary<string, string>
{
{ 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<string, string> _vipProductMap = new Dictionary<string, string>
{
{ 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);
}
}