com.unity.purchasing 4.0.0
Notes: processedReleased July 28, 2021
Unity Compatibility
Minimum Unity: 2019.4
Package Dependencies
- com.unity.modules.androidjni (1.0.0)
- com.unity.modules.jsonserialize (1.0.0)
- com.unity.modules.unityanalytics (1.0.0)
- com.unity.modules.unitywebrequest (1.0.0)
- com.unity.services.core (1.0.1)
- com.unity.ugui (1.0.0)
✨ Features
- Codeless Listener method to access the store configuration after initialization.
- - `CodelessIAPStoreListener.Instance.GetStoreConfiguration`
- Several samples to the Package Manager Details view for com.unity.purchasing:
- - Fetching additional products
- - Integrating self-provided backend receipt validation
- - Local receipt validation
- - Google Play Store - Upgrade and downgrade subscriptions
- - Google Play Store - Restoring Transactions
- - Google Play Store - Confirming subscription price change
- - Google Play Store - Handling Deferred Purchases
- - Google Play Store - Fraud detection
- - Apple App Store - Refreshing app receipts
- Google Play - `GooglePlayProrationMode` enum that represent Google's proration modes and added `IGooglePlayStoreExtensions.UpgradeDowngradeSubscription` using the enum.
🔧 Bug Fixes
- GooglePlay - Fixed Application Not Responding (ANR) error at `Product` initialization. The Google Play `SkuDetailsResponseListener.onSkuDetailsResponse` callback is now quickly handled.
- Amazon - Fixed `Product.metadata.localizedPrice` incorrectly being `0.00` for certain price formats.
- Apple, Mac App Store - Fixes Apple Silicon "arm64" support, missing from unitypurchasing bundle.
📈 Improvements
- Reorganized and renamed APIs:
- - `CodelessIAPStoreListener.Instance.ExtensionProvider.GetExtension` to `CodelessIAPStoreListener.Instance.GetStoreExtensions` to match the new `GetStoreConfiguration` API, above
- - `IGooglePlayStoreExtensions.NotifyDeferredProrationUpgradeDowngradeSubscription` to `IGooglePlayConfiguration.NotifyDeferredProrationUpgradeDowngradeSubscription`
- - `IGooglePlayStoreExtensions.NotifyDeferredPurchase` to `IGooglePlayConfiguration.NotifyDeferredPurchase`
- - `IGooglePlayStoreExtensions.SetDeferredProrationUpgradeDowngradeSubscriptionListener` to `IGooglePlayConfiguration.SetDeferredProrationUpgradeDowngradeSubscriptionListener`
- - `IGooglePlayStoreExtensions.SetDeferredPurchaseListener` to `IGooglePlayConfiguration.SetDeferredPurchaseListener`
- - `IGooglePlayStoreExtensions.SetObfuscatedAccountId` to `IGooglePlayConfiguration.SetObfuscatedAccountId`
- - `IGooglePlayStoreExtensions.SetObfuscatedProfileId` to `IGooglePlayConfiguration.SetObfuscatedProfileId`
- Apple - Change the order of execution of the post-process build script, which adds the `StoreKitFramework` such that other post-process build scripts can run after it.
- Changed the **Target Android** Menu app store selection feature to display a window under `Window > Unity IAP > Switch Store...`. To set the app store for the next build, first use **Build Settings** to activate the Android build target.
- For the future Unity 2022
- - Moved Unity IAP menu items from `Window > Unity IAP > ...` to `Services > In-App Purchasing > ...`
- - Updated and added new functionnality to the `Services > In-App Purchasing` window in the `Project Settings`. The `Current Targeted Store` selector and `Receipt Obfuscator` settings are now accessible from this window.
⚡ API Changes
- Samsung Galaxy - Removed Samsung Galaxy Store in-app purchasing support. Use the Unity Distribution Portal for the continued support of the Samsung Galaxy Store.
- - All related classes and implementations have been removed including `AppStore.SamsungApps`.
- Removed the following obsolete API:
- - `CloudCatalogImpl`
- - `CloudCatalogUploader`
- - `CloudJSONProductCatalogExporter`
- - `EventDestType`
- - All `GooglePlayReceipt` constructors. Use `GooglePlayReceipt(string productID, string orderID, string packageName, string purchaseToken, DateTime purchaseTime, GooglePurchaseState purchaseState)` instead.
- - `IAndroidStoreSelection.androidStore`
- - `IDs.useCloudCatalog`
- - `IGooglePlayConfiguration.SetPublicKey`
- - `IGooglePlayConfiguration.UsePurchaseTokenForTransactionId`
- - `IGooglePlayConfiguration.aggressivelyRecoverLostPurchases`
- - `IGooglePlayStoreExtensionsMethod.FinishAdditionalTransaction`
- - `IGooglePlayStoreExtensionsMethod.GetProductJSONDictionary`
- - `IGooglePlayStoreExtensionsMethod.IsOwned`
- - `IGooglePlayStoreExtensionsMethod.SetLogLevel`
- - `IManagedStoreConfig`
- - `IManagedStoreExtensions`
- - `IStoreCallback.OnPurchasesRetrieved`. Use `IStoreCallback.OnAllPurchasesRetrieved` instead.
- - `Promo`
- - `StandardPurchasingModule.Instance(AndroidStore)`. Use `StandardPurchasingModule.Instance(AppStore)` instead.
- - `StandardPurchasingModule.androidStore`. Use `StandardPurchasingModule.appStore` instead.
- - `StandardPurchasingModule.useMockBillingSystem`. Use `IMicrosoftConfiguration` instead.
- - `StoreTestMode`
- - `UnityPurchasingEditor.TargetAndroidStore(AndroidStore)`. Use `TargetAndroidStore(AppStore)` instead.
- - `WinRT` class. Use `WindowsStore` instead.
- - `WindowsPhone8` class. Use `WindowsStore` instead.
