diff --git a/Editor/IapSettingsEditor.cs b/Editor/IapSettingsEditor.cs
index f152bbb..7d6f09a 100644
--- a/Editor/IapSettingsEditor.cs
+++ b/Editor/IapSettingsEditor.cs
@@ -64,6 +64,7 @@ void GenerateProductImpl()
{
Directory.CreateDirectory(pathDefaultScript);
}
+
var productImplPath = $"{pathDefaultScript}/IapProduct.cs";
var str = "namespace VirtueSky.Iap\n{";
str += "\n\tpublic struct IapProduct\n\t{";
@@ -79,7 +80,7 @@ void GenerateProductImpl()
$"\n\t\tpublic static IapDataProduct Purchase{CultureInfo.CurrentCulture.TextInfo.ToTitleCase(itemName)}()";
str += "\n\t\t{";
str +=
- $"\n\t\t\treturn IapManager.Instance.PurchaseProduct(IapSettings.Instance.IapDataProducts[{i}]);";
+ $"\n\t\t\treturn IapManager.PurchaseProduct(IapSettings.Instance.IapDataProducts[{i}]);";
str += "\n\t\t}";
str += "\n";
@@ -87,7 +88,7 @@ void GenerateProductImpl()
$"\n\t\tpublic static bool IsPurchased{CultureInfo.CurrentCulture.TextInfo.ToTitleCase(itemName)}()";
str += "\n\t\t{";
str +=
- $"\n\t\t\treturn IapManager.Instance.IsPurchasedProduct(IapSettings.Instance.IapDataProducts[{i}]);";
+ $"\n\t\t\treturn IapManager.IsPurchasedProduct(IapSettings.Instance.IapDataProducts[{i}]);";
str += "\n\t\t}";
str += "\n";
@@ -96,7 +97,7 @@ void GenerateProductImpl()
$"\n\t\tpublic static string LocalizedPrice{CultureInfo.CurrentCulture.TextInfo.ToTitleCase(itemName)}()";
str += "\n\t\t{";
str +=
- $"\n\t\t\treturn IapManager.Instance.LocalizedPriceProduct(IapSettings.Instance.IapDataProducts[{i}]);";
+ $"\n\t\t\treturn IapManager.LocalizedPriceProduct(IapSettings.Instance.IapDataProducts[{i}]);";
str += "\n\t\t}";
str += "\n";
}
@@ -153,7 +154,8 @@ void GuiLine(int i_height = 1)
EditorGUI.DrawRect(rect, new Color32(0, 0, 0, 255));
}
- string GetPathInCurrentEnvironent(string fullRelativePath)
+
+ string GetPathInCurrentEnvironent(string fullRelativePath)
{
var upmPath = $"Packages/com.wolf-package.in-app-purchasing/{fullRelativePath}";
var normalPath = $"Assets/in-app-purchasing/{fullRelativePath}";
diff --git a/README.md b/README.md
index 33cbe1a..e0a677e 100644
--- a/README.md
+++ b/README.md
@@ -3,16 +3,16 @@
-
+
-
+
-
+
-
+
@@ -23,9 +23,13 @@
### Add the line below to `Packages/manifest.json`
-for version `1.0.0`
+for version `1.0.1`
```csharp
-"com.wolf-package.in-app-purchasing":"https://github.com/wolf-package/in-app-purchasing.git#1.0.0",
+"com.wolf-package.in-app-purchasing":"https://github.com/wolf-package/in-app-purchasing-unity.git#1.0.1",
+```
+dependency `extensions-unity-1.0.1`
+```csharp
+"com.wolf-package.extensions":"https://github.com/wolf-package/extensions-unity.git#1.0.1",
```
## Use
@@ -50,33 +54,33 @@ for version `1.0.0`
public const string ID_COIN = "com.test.coin";
public static IapDataProduct PurchaseCoin()
{
- return IapManager.Instance.PurchaseProduct(IapSettings.Instance.IapDataProducts[0]);
+ return IapManager.PurchaseProduct(IapSettings.Instance.IapDataProducts[0]);
}
public static bool IsPurchasedCoin()
{
- return IapManager.Instance.IsPurchasedProduct(IapSettings.Instance.IapDataProducts[0]);
+ return IapManager.IsPurchasedProduct(IapSettings.Instance.IapDataProducts[0]);
}
public static string LocalizedPriceCoin()
{
- return IapManager.Instance.LocalizedPriceProduct(IapSettings.Instance.IapDataProducts[0]);
+ return IapManager.LocalizedPriceProduct(IapSettings.Instance.IapDataProducts[0]);
}
public const string ID_REMOVEADS = "com.test.removeads";
public static IapDataProduct PurchaseRemoveads()
{
- return IapManager.Instance.PurchaseProduct(IapSettings.Instance.IapDataProducts[1]);
+ return IapManager.PurchaseProduct(IapSettings.Instance.IapDataProducts[1]);
}
public static bool IsPurchasedRemoveads()
{
- return IapManager.Instance.IsPurchasedProduct(IapSettings.Instance.IapDataProducts[1]);
+ return IapManager.IsPurchasedProduct(IapSettings.Instance.IapDataProducts[1]);
}
public static string LocalizedPriceRemoveads()
{
- return IapManager.Instance.LocalizedPriceProduct(IapSettings.Instance.IapDataProducts[1]);
+ return IapManager.LocalizedPriceProduct(IapSettings.Instance.IapDataProducts[1]);
}
}
@@ -123,7 +127,6 @@ for version `1.0.0`
```
- Example 2: You create a new script similar to the demo below. then attach it to LoadingScene
-(From version 1.1.1, `OnPurchaseSuccessEvent` and `OnPurchaseFailedEvent` will be called via `IapManager`)
```csharp
diff --git a/Runtime/IapManager.cs b/Runtime/IapManager.cs
index 23f160c..e165410 100644
--- a/Runtime/IapManager.cs
+++ b/Runtime/IapManager.cs
@@ -5,13 +5,14 @@
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Purchasing.Extension;
+using VirtueSky.Misc;
namespace VirtueSky.Iap
{
public class IapManager : MonoBehaviour, IDetailedStoreListener
{
- public bool dontDestroyOnLoad = true;
- public static IapManager Instance;
+ [SerializeField] private bool dontDestroyOnLoad = true;
+ private static IapManager _instance;
public static event Action OnPurchaseSucceedEvent;
public static event Action OnPurchaseFailedEvent;
public static event Action OnIapTrackingRevenueEvent;
@@ -29,9 +30,9 @@ private void Awake()
DontDestroyOnLoad(this.gameObject);
}
- if (Instance == null)
+ if (_instance == null)
{
- Instance = this;
+ _instance = this;
}
else
{
@@ -41,7 +42,7 @@ private void Awake()
private void OnDestroy()
{
- if (Instance == this) Instance = null;
+ if (_instance == this) _instance = null;
}
private void Start()
@@ -93,7 +94,7 @@ private void InternalPurchaseFailed(string id)
{
if (product.Id != id) continue;
OnPurchaseFailedEvent?.Invoke(product.Id);
- CallActionAndClean(ref product.purchaseFailedCallback);
+ Common.CallActionAndClean(ref product.purchaseFailedCallback);
}
}
@@ -166,7 +167,7 @@ void InternalPurchaseSuccess(string id)
{
if (product.Id != id) continue;
OnPurchaseSucceedEvent?.Invoke(product.Id);
- CallActionAndClean(ref product.purchaseSuccessCallback);
+ Common.CallActionAndClean(ref product.purchaseSuccessCallback);
}
}
@@ -195,7 +196,7 @@ public void OnPurchaseFailed(Product product, PurchaseFailureDescription failure
}
#if UNITY_IOS
- public void RestorePurchase()
+ private void InternalRestorePurchase()
{
if (!IsInitialized)
{
@@ -203,7 +204,8 @@ public void RestorePurchase()
return;
}
- if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.OSXPlayer)
+ if (Application.platform == RuntimePlatform.IPhonePlayer ||
+ Application.platform == RuntimePlatform.OSXPlayer)
{
Debug.Log("Restore purchase started ...");
@@ -211,7 +213,8 @@ public void RestorePurchase()
storeProvider.RestoreTransactions(_ =>
{
// no purchase are avaiable to restore
- Debug.Log("Restore purchase continuting: " + _ + ". If no further messages, no purchase available to restore.");
+ Debug.Log("Restore purchase continuting: " + _ +
+ ". If no further messages, no purchase available to restore.");
});
}
else
@@ -248,17 +251,9 @@ private static void AutoInitialize()
}
}
- private void CallActionAndClean(ref Action action)
- {
- if (action == null) return;
- var a = action;
- a();
- action = null;
- }
+ #region Internal API
- #region API
-
- public IapDataProduct PurchaseProduct(string id)
+ private IapDataProduct InternalPurchaseProduct(string id)
{
OnShowIapNativePopupEvent?.Invoke(true);
var product = iapSettings.GetIapProduct(id);
@@ -266,40 +261,60 @@ public IapDataProduct PurchaseProduct(string id)
return product;
}
- public IapDataProduct PurchaseProduct(IapDataProduct product)
+ private IapDataProduct InternalPurchaseProduct(IapDataProduct product)
{
OnShowIapNativePopupEvent?.Invoke(true);
PurchaseProductInternal(product);
return product;
}
- public bool IsPurchasedProduct(IapDataProduct product)
+ private bool InternalIsPurchasedProduct(IapDataProduct product)
{
if (_controller == null) return false;
return ConvertProductType(product.iapProductType) == ProductType.NonConsumable &&
_controller.products.WithID(product.Id).hasReceipt;
}
- public bool IsPurchasedProduct(string id)
+ private bool InternalIsPurchasedProduct(string id)
{
if (_controller == null) return false;
return ConvertProductType(iapSettings.GetIapProduct(id).iapProductType) == ProductType.NonConsumable &&
_controller.products.WithID(id).hasReceipt;
}
- public string LocalizedPriceProduct(IapDataProduct product)
+ private string InternalLocalizedPriceProduct(IapDataProduct product)
{
if (_controller == null) return "";
return _controller.products.WithID(product.Id).metadata.localizedPriceString;
}
- public string LocalizedPriceProduct(string id)
+ private string InternalLocalizedPriceProduct(string id)
{
if (_controller == null) return "";
return _controller.products.WithID(id).metadata.localizedPriceString;
}
#endregion
+
+ #region Public API
+
+ public static IapDataProduct PurchaseProduct(string id) => _instance.InternalPurchaseProduct(id);
+
+ public static IapDataProduct PurchaseProduct(IapDataProduct product) =>
+ _instance.InternalPurchaseProduct(product);
+
+ public static bool IsPurchasedProduct(IapDataProduct product) => _instance.InternalIsPurchasedProduct(product);
+ public static bool IsPurchasedProduct(string id) => _instance.InternalIsPurchasedProduct(id);
+
+ public static string LocalizedPriceProduct(IapDataProduct product) =>
+ _instance.InternalLocalizedPriceProduct(product);
+
+ public static string LocalizedPriceProduct(string id) => _instance.InternalLocalizedPriceProduct(id);
+#if UNITY_IOS
+ public static void RestorePurchase() => _instance.InternalRestorePurchase();
+#endif
+
+ #endregion
}
}
diff --git a/Runtime/UnityCommon.IAP.asmdef b/Runtime/UnityCommon.IAP.asmdef
index 80f3c39..ee107c4 100644
--- a/Runtime/UnityCommon.IAP.asmdef
+++ b/Runtime/UnityCommon.IAP.asmdef
@@ -7,7 +7,8 @@
"GUID:e63a64384cc3ef04cac761c1ce76e9c2",
"GUID:08d1c582746949b40ba6a45cdb776bdf",
"GUID:fe25561d224ed4743af4c60938a59d0b",
- "GUID:70ea675efa2644cef98c7ece24158333"
+ "GUID:70ea675efa2644cef98c7ece24158333",
+ "GUID:5a4d3c3ff86da0f459ebef74b42549cd"
],
"includePlatforms": [],
"excludePlatforms": [],
diff --git a/package.json b/package.json
index c491dac..55c19a3 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "com.wolf-package.in-app-purchasing",
"displayName": "UnityCommon-IAP",
"description": "Support for unity in-app-purchasing",
- "version": "1.0.0",
+ "version": "1.0.1",
"unity": "2021.3",
"category": "virtuesky",
"license": "MIT",
@@ -18,6 +18,7 @@
"UnityIAP"
],
"dependencies": {
- "com.unity.purchasing": "4.12.0"
+ "com.unity.purchasing": "4.12.0",
+ "com.wolf-package.extensions": "https://github.com/wolf-package/extensions-unity.git#1.0.1"
}
}
\ No newline at end of file