From 87aa46990697b332c8dbe175aecaadc4d3c1ba77 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Tue, 30 Jul 2024 10:18:01 +0200 Subject: [PATCH 1/5] Prepare added for automatically setuping wrapper --- RevenueCat/Scripts/Purchases.cs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/RevenueCat/Scripts/Purchases.cs b/RevenueCat/Scripts/Purchases.cs index de14f56d..2b3552dd 100644 --- a/RevenueCat/Scripts/Purchases.cs +++ b/RevenueCat/Scripts/Purchases.cs @@ -58,7 +58,7 @@ public partial class Purchases : MonoBehaviour [Tooltip("A subclass of Purchases.UpdatedCustomerInfoListener component.\n" + "Use your custom subclass to define how to handle updated customer information.")] - public UpdatedCustomerInfoListener listener; + public IUpdatedCustomerInfoListener listener; [Tooltip("An optional boolean. Set this to true if you have your own IAP implementation " + "and want to use only RevenueCat's backend.\nDefault is false.\n" + @@ -111,22 +111,32 @@ public partial class Purchases : MonoBehaviour private void Start() { -#if UNITY_ANDROID && !UNITY_EDITOR + Prepare(); + + if (useRuntimeSetup) return; + + Configure(string.IsNullOrEmpty(appUserID) ? null : appUserID); + GetProducts(productIdentifiers, null); + } + + private void Prepare() + { + if (_wrapper != null) + { + return; + } + #if UNITY_ANDROID && !UNITY_EDITOR _wrapper = new PurchasesWrapperAndroid(); -#elif UNITY_IPHONE && !UNITY_EDITOR + #elif UNITY_IPHONE && !UNITY_EDITOR _wrapper = new PurchasesWrapperiOS(); -#else + #else _wrapper = new PurchasesWrapperNoop(); -#endif + #endif + if (!string.IsNullOrEmpty(proxyURL)) { _wrapper.SetProxyURL(proxyURL); } - - if (useRuntimeSetup) return; - - Configure(string.IsNullOrEmpty(appUserID) ? null : appUserID); - GetProducts(productIdentifiers, null); } private void Configure(string newUserId) @@ -191,6 +201,9 @@ public void Setup(PurchasesConfiguration purchasesConfiguration) /// public void Configure(PurchasesConfiguration purchasesConfiguration) { + // Ensure wrapper is inited. + Prepare(); + var dangerousSettings = purchasesConfiguration.DangerousSettings.Serialize().ToString(); _wrapper.Setup(gameObject.name, purchasesConfiguration.ApiKey, purchasesConfiguration.AppUserId, purchasesConfiguration.ObserverMode, purchasesConfiguration.UsesStoreKit2IfAvailable, purchasesConfiguration.UserDefaultsSuiteName, From c28a0d729a1c1cf64d159e2cc45a147031711f98 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Tue, 30 Jul 2024 10:18:36 +0200 Subject: [PATCH 2/5] Change to interface --- RevenueCat/Scripts/UpdatedCustomerInfoListener.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs b/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs index 98c4fe13..af464649 100644 --- a/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs +++ b/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs @@ -2,8 +2,8 @@ public partial class Purchases { - public abstract class UpdatedCustomerInfoListener : MonoBehaviour + public interface IUpdatedCustomerInfoListener { - public abstract void CustomerInfoReceived(CustomerInfo customerInfo); + public void CustomerInfoReceived(CustomerInfo customerInfo); } -} \ No newline at end of file +} From 953c310ba110bc7a78e45c50b1a7036bc43cf444 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Tue, 30 Jul 2024 10:23:49 +0200 Subject: [PATCH 3/5] Update UpdatedCustomerInfoListener.cs --- RevenueCat/Scripts/UpdatedCustomerInfoListener.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs b/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs index af464649..fc05dabf 100644 --- a/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs +++ b/RevenueCat/Scripts/UpdatedCustomerInfoListener.cs @@ -6,4 +6,9 @@ public interface IUpdatedCustomerInfoListener { public void CustomerInfoReceived(CustomerInfo customerInfo); } + + public abstract class UpdatedCustomerInfoListener : MonoBehaviour, IUpdatedCustomerInfoListener + { + public abstract void CustomerInfoReceived(CustomerInfo customerInfo); + } } From d1fe006b464ab0c2b27260dcf4a554ee4e2f72d6 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Tue, 30 Jul 2024 10:36:21 +0200 Subject: [PATCH 4/5] Update Purchases.cs --- RevenueCat/Scripts/Purchases.cs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/RevenueCat/Scripts/Purchases.cs b/RevenueCat/Scripts/Purchases.cs index 2b3552dd..ba1304f6 100644 --- a/RevenueCat/Scripts/Purchases.cs +++ b/RevenueCat/Scripts/Purchases.cs @@ -56,9 +56,29 @@ public partial class Purchases : MonoBehaviour [Tooltip("List of product identifiers.")] public string[] productIdentifiers; + [FormerlySerializedAs("laistener")] [Tooltip("A subclass of Purchases.UpdatedCustomerInfoListener component.\n" + "Use your custom subclass to define how to handle updated customer information.")] - public IUpdatedCustomerInfoListener listener; + [SerializeField] + private UpdatedCustomerInfoListener listener; + + // Cache custom listener, if not from class. + private IUpdatedCustomerInfoListener customListener; + public IUpdatedCustomerInfoListener Listener + { + get => listener != null ? listener : customListener; + set + { + if (value is UpdatedCustomerInfoListener listenerValue) + { + this.listener = listenerValue; + } + else + { + customListener = value; + } + } + } [Tooltip("An optional boolean. Set this to true if you have your own IAP implementation " + "and want to use only RevenueCat's backend.\nDefault is false.\n" + @@ -1253,18 +1273,18 @@ private void _receiveCustomerInfo(string customerInfoJson) { Debug.Log("_receiveCustomerInfo " + customerInfoJson); - if (listener == null) return; + if (Listener == null) return; var response = JSON.Parse(customerInfoJson); if (response["customerInfo"] == null) return; var info = new CustomerInfo(response["customerInfo"]); - listener.CustomerInfoReceived(info); + Listener.CustomerInfoReceived(info); } // ReSharper disable once UnusedMember.Local private void _handleLog(string logDetailsJson) { - if (listener == null) return; + if (Listener == null) return; var response = JSON.Parse(logDetailsJson); var logLevelInResponse = response["logLevel"]; From dfea856a3c5445ef5fded3c4d6746d2650ec7b80 Mon Sep 17 00:00:00 2001 From: Dal Rupnik Date: Tue, 30 Jul 2024 10:40:55 +0200 Subject: [PATCH 5/5] Update Purchases.cs --- RevenueCat/Scripts/Purchases.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/RevenueCat/Scripts/Purchases.cs b/RevenueCat/Scripts/Purchases.cs index ba1304f6..39104bba 100644 --- a/RevenueCat/Scripts/Purchases.cs +++ b/RevenueCat/Scripts/Purchases.cs @@ -56,7 +56,6 @@ public partial class Purchases : MonoBehaviour [Tooltip("List of product identifiers.")] public string[] productIdentifiers; - [FormerlySerializedAs("laistener")] [Tooltip("A subclass of Purchases.UpdatedCustomerInfoListener component.\n" + "Use your custom subclass to define how to handle updated customer information.")] [SerializeField]