123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using Godot.Collections;
- using Godot;
- namespace AndroidInAppPurchasesWithCSharp.GodotGooglePlayBilling
- {
- public enum PurchaseType
- {
- InApp,
- Subs,
- }
- public partial class GooglePlayBilling : Node
- {
- [Signal] public delegate void Connected();
- [Signal] public delegate void Disconnected();
- [Signal] public delegate void ConnectError(int code, string message);
- [Signal] public delegate void SkuDetailsQueryCompleted(Array skuDetails);
- [Signal] public delegate void SkuDetailsQueryError(int code, string message, string[] querySkuDetails);
- [Signal] public delegate void PurchasesUpdated(Array purchases);
- [Signal] public delegate void PurchaseError(int code, string message);
- [Signal] public delegate void PurchaseAcknowledged(string purchaseToken);
- [Signal] public delegate void PurchaseAcknowledgementError(int code, string message);
- [Signal] public delegate void PurchaseConsumed(string purchaseToken);
- [Signal] public delegate void PurchaseConsumptionError(int code, string message, string purchaseToken);
- [Export] public bool AutoReconnect { get; set; }
- [Export] public bool AutoConnect { get; set; }
- public bool IsAvailable { get; private set; }
- private Object _payment;
- public override void _Ready()
- {
- if (Engine.HasSingleton("GodotGooglePlayBilling"))
- {
- IsAvailable = true;
- _payment = Engine.GetSingleton("GodotGooglePlayBilling");
- // These are all signals supported by the API
- // You can drop some of these based on your needs
- _payment.Connect("connected", this, nameof(OnGodotGooglePlayBilling_connected)); // No params
- _payment.Connect("disconnected", this, nameof(OnGodotGooglePlayBilling_disconnected)); // No params
- _payment.Connect("connect_error", this, nameof(OnGodotGooglePlayBilling_connect_error)); // Response ID (int), Debug message (string)
- _payment.Connect("sku_details_query_completed", this, nameof(OnGodotGooglePlayBilling_sku_details_query_completed)); // SKUs (Array of Dictionary)
- _payment.Connect("sku_details_query_error", this, nameof(OnGodotGooglePlayBilling_sku_details_query_error)); // Response ID (int), Debug message (string), Queried SKUs (string[])
- _payment.Connect("purchases_updated", this, nameof(OnGodotGooglePlayBilling_purchases_updated)); // Purchases (Array of Dictionary)
- _payment.Connect("purchase_error", this, nameof(OnGodotGooglePlayBilling_purchase_error)); // Response ID (int), Debug message (string)
- _payment.Connect("purchase_acknowledged", this, nameof(OnGodotGooglePlayBilling_purchase_acknowledged)); // Purchase token (string)
- _payment.Connect("purchase_acknowledgement_error", this, nameof(OnGodotGooglePlayBilling_purchase_acknowledgement_error)); // Response ID (int), Debug message (string), Purchase token (string)
- _payment.Connect("purchase_consumed", this, nameof(OnGodotGooglePlayBilling_purchase_consumed)); // Purchase token (string)
- _payment.Connect("purchase_consumption_error", this, nameof(OnGodotGooglePlayBilling_purchase_consumption_error)); // Response ID (int), Debug message (string), Purchase token (string)
- }
- else
- {
- IsAvailable = false;
- }
- }
- #region GooglePlayBilling Methods
- public void StartConnection() => _payment?.Call("startConnection");
- public void EndConnection() => _payment?.Call("endConnection");
- public void QuerySkuDetails(string[] querySkuDetails, PurchaseType type) => _payment?.Call("querySkuDetails", querySkuDetails, $"{type}".ToLower());
- public bool IsReady() => (_payment?.Call("isReady") as bool?) ?? false;
- public void AcknowledgePurchase(string purchaseToken) => _payment?.Call("acknowledgePurchase", purchaseToken);
- public void ConsumePurchase(string purchaseToken) => _payment?.Call("consumePurchase", purchaseToken);
- public BillingResult Purchase(string sku)
- {
- if (_payment == null) return null;
- var result = (Dictionary)_payment.Call("purchase", sku);
- return new BillingResult(result);
- }
- public PurchasesResult QueryPurchases(PurchaseType purchaseType)
- {
- if (_payment == null) return null;
- var result = (Dictionary)_payment.Call("queryPurchases", $"{purchaseType}".ToLower());
- return new PurchasesResult(result);
- }
- #endregion
- #region GodotGooglePlayBilling Signals
- private void OnGodotGooglePlayBilling_connected() => EmitSignal(nameof(Connected));
- private void OnGodotGooglePlayBilling_disconnected() => EmitSignal(nameof(Disconnected));
- private void OnGodotGooglePlayBilling_connect_error(int code, string message) => EmitSignal(nameof(ConnectError), code, message);
- private void OnGodotGooglePlayBilling_sku_details_query_completed(Array skuDetails) => EmitSignal(nameof(SkuDetailsQueryCompleted), skuDetails);
- private void OnGodotGooglePlayBilling_sku_details_query_error(int code, string message, string[] querySkuDetails) => EmitSignal(nameof(SkuDetailsQueryError), code, message, querySkuDetails);
- private void OnGodotGooglePlayBilling_purchases_updated(Array purchases) => EmitSignal(nameof(PurchasesUpdated), purchases);
- private void OnGodotGooglePlayBilling_purchase_error(int code, string message) => EmitSignal(nameof(PurchaseError), code, message);
- private void OnGodotGooglePlayBilling_purchase_acknowledged(string purchaseToken) => EmitSignal(nameof(PurchaseAcknowledged), purchaseToken);
- private void OnGodotGooglePlayBilling_purchase_acknowledgement_error(int code, string message) => EmitSignal(nameof(PurchaseAcknowledgementError), code, message);
- private void OnGodotGooglePlayBilling_purchase_consumed(string purchaseToken) => EmitSignal(nameof(PurchaseConsumed), purchaseToken);
- private void OnGodotGooglePlayBilling_purchase_consumption_error(int code, string message, string purchaseToken) => EmitSignal(nameof(PurchaseConsumptionError), code, message, purchaseToken);
- #endregion
- }
- }
|