Playvoi/Assets/ShiroginSDK/Runtime/Modules/Events/Domains/IAP.cs

200 lines
No EOL
7.3 KiB
C#

using System;
using UnityEngine;
#if SHIROGIN_IAP
using UnityEngine.Purchasing;
#endif
namespace ShiroginSDK.Runtime.Modules.Events
{
#if SHIROGIN_IAP
public static partial class ShiroginEvents
{
public static class IAP
{
/// <summary>
/// Fired when an in-app purchase is successfully completed.
/// Contains both logical and analytical data for tracking and rewards.
/// </summary>
[Serializable]
public class PurchaseCompletedEvent
{
public int Quantity;
public string TransactionId;
public string PaymentType;
public Product Product;
public DateTime Timestamp;
public PurchaseCompletedEvent(Product product, int quantity = 1)
{
Product = product;
Quantity = quantity;
TransactionId = product?.transactionID ?? Guid.NewGuid().ToString();
PaymentType = Application.platform == RuntimePlatform.Android
? "Google Play"
: "App Store";
Timestamp = DateTime.UtcNow;
}
// Computed properties
public string ItemId => Product?.definition?.id ?? "undefined";
public string ItemName => Product?.metadata?.localizedTitle ?? "undefined";
public string ItemCategory => Product?.definition?.type.ToString() ?? "unknown";
public double Price => (double)(Product?.metadata?.localizedPrice ?? 0);
public double Revenue => Price * Quantity;
public string Currency => Product?.metadata?.isoCurrencyCode ?? "USD";
public override string ToString()
{
return
$"[PurchaseCompletedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} x{Quantity} | {PaymentType} | {TransactionId}";
}
}
/// <summary>
/// Fired when an in-app purchase fails.
/// Used for error handling, analytics, and failure reporting.
/// </summary>
[Serializable]
public class PurchaseFailedEvent
{
public string Error;
public string FailureReason;
public string PaymentType;
public Product Product;
public DateTime Timestamp;
public PurchaseFailedEvent(Product product, string error, string reason = "")
{
Product = product;
Error = error;
FailureReason = reason;
PaymentType = Application.platform == RuntimePlatform.Android
? "Google Play"
: "App Store";
Timestamp = DateTime.UtcNow;
}
// Computed properties
public string ItemId => Product?.definition?.id ?? "undefined";
public string ItemName => Product?.metadata?.localizedTitle ?? "undefined";
public string ItemCategory => Product?.definition?.type.ToString() ?? "unknown";
public double Price => (double)(Product?.metadata?.localizedPrice ?? 0);
public string Currency => Product?.metadata?.isoCurrencyCode ?? "USD";
public override string ToString()
{
return
$"[PurchaseFailedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} | Error={Error} | Reason={FailureReason}";
}
}
}
}
#else
public static partial class ShiroginEvents
{
public static class IAP
{
/// <summary>
/// Fired when an in-app purchase is successfully completed.
/// Contains both logical and analytical data for tracking and rewards.
/// </summary>
[Serializable]
public class PurchaseCompletedEvent
{
public int Quantity;
public string TransactionId;
public string PaymentType;
public Product Product;
public DateTime Timestamp;
public PurchaseCompletedEvent(Product product, int quantity = 1)
{
Product = product;
Quantity = quantity;
// TransactionId = product?.transactionID ?? Guid.NewGuid().ToString();
PaymentType = Application.platform == RuntimePlatform.Android
? "Google Play"
: "App Store";
Timestamp = DateTime.UtcNow;
}
// Computed properties
public string ItemId => "Dummy ItemId";
public string ItemName => "Dummy ItemName";
public string ItemCategory => "Dummy ItemCategory";
public double Price => 1d;
public double Revenue => 1d;
public string Currency => "Dummy Currency";
public override string ToString()
{
return
$"[PurchaseCompletedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} x{Quantity} | {PaymentType} | {TransactionId}";
}
}
[Serializable]
public class Product
{
}
[Serializable]
public class ProductMetadata
{
}
[Serializable]
public class ProductDefinition
{
}
/// <summary>
/// Fired when an in-app purchase fails.
/// Used for error handling, analytics, and failure reporting.
/// </summary>
[Serializable]
public class PurchaseFailedEvent
{
public string Error;
public string FailureReason;
public string PaymentType;
public Product Product;
public DateTime Timestamp;
public PurchaseFailedEvent(Product product, string error, string reason = "")
{
Product = product;
Error = error;
FailureReason = reason;
PaymentType = Application.platform == RuntimePlatform.Android
? "Google Play"
: "App Store";
Timestamp = DateTime.UtcNow;
}
// Computed properties
public string ItemId => "Dummy ItemID";
public string ItemName => "Dummy ItemName";
public string ItemCategory => "Dummy ItemCategory";
public double Price => 1;
public string Currency =>"Dummy Currency";
public override string ToString()
{
return
$"[PurchaseFailedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} | Error={Error} | Reason={FailureReason}";
}
}
}
}
#endif
}