ball 项目提交
This commit is contained in:
@@ -0,0 +1,434 @@
|
||||
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.apple_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); });
|
||||
}
|
||||
|
||||
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.apple_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
|
||||
|
||||
|
||||
private static void SendEventClickByName(string name, string type)
|
||||
{
|
||||
if (name == null) return;
|
||||
|
||||
string clickTrackKey = null;
|
||||
string successTrackKey = null;
|
||||
string openTrackKey = null;
|
||||
|
||||
if (name == GetPaySku(PayType.pack_reward))
|
||||
{
|
||||
clickTrackKey = ADEventTrack.Property.lucky_gift_click;
|
||||
successTrackKey = ADEventTrack.Property.lucky_gift_receive;
|
||||
openTrackKey = ADEventTrack.Property.lucky_gift_show;
|
||||
}
|
||||
else if (name == GetPaySku(PayType.remove_ad))
|
||||
{
|
||||
clickTrackKey = ADEventTrack.Property.remove_ad_click;
|
||||
successTrackKey = ADEventTrack.Property.remove_ad_receive;
|
||||
openTrackKey = ADEventTrack.Property.remove_ad_show;
|
||||
}
|
||||
else if (name == GetPaySku(PayType.battle_pass))
|
||||
{
|
||||
clickTrackKey = ADEventTrack.Property.master_pass_click;
|
||||
successTrackKey = ADEventTrack.Property.master_pass_receive;
|
||||
openTrackKey = ADEventTrack.Property.master_pass_show;
|
||||
}
|
||||
else if (name == GetPaySku(PayType.buy_one))
|
||||
{
|
||||
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 == GetPaySku(PayType.three_days_gift))
|
||||
{
|
||||
clickTrackKey = ADEventTrack.Property.three_days_gift_click;
|
||||
successTrackKey = ADEventTrack.Property.three_days_gift_buy_success;
|
||||
openTrackKey = ADEventTrack.Property.three_days_gift_show;
|
||||
}
|
||||
|
||||
if (name.StartsWith("buy_gold"))
|
||||
{
|
||||
var startIndex = "buy_gold".Length;
|
||||
var suffix = name[startIndex..]; // 截取 "gold" 后的所有字符
|
||||
clickTrackKey = ADEventTrack.Property.shop_click_ + suffix;
|
||||
successTrackKey = ADEventTrack.Property.shop_receive_ + suffix;
|
||||
openTrackKey = ADEventTrack.Property.shop_show;
|
||||
}
|
||||
|
||||
if (name.StartsWith("vip_club"))
|
||||
{
|
||||
Debug.Log("SendEventClickByName:" + name + " type:" + type);
|
||||
var startIndex = "vip_club".Length;
|
||||
var suffix = name[startIndex..]; // 截取 "gold" 后的所有字符
|
||||
clickTrackKey = ADEventTrack.Property.vip_click_ + suffix;
|
||||
successTrackKey = ADEventTrack.Property.vip_success_ + suffix;
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user