StoreKit 2 for iOS


Native StoreKit 2 integration for Unity. Supports purchases, subscriptions, transaction updates, refund sheet, intro offers, and more – with async/await and full Swift bridge.


by Sych


Price History +

StoreKit 2 for iOS

Bring native in-app purchase power to your Unity iOS app using Apple’s StoreKit 2 framework. This plugin bridges Unity and Swift, giving you access to modern StoreKit 2 APIs with native performance, rich metadata, and full transaction lifecycle control.


Features

📦 Product Fetching – Retrieve full App Store metadata for your in-app purchases and subscriptions.

💰 Native Purchasing – Perform purchases using StoreKit 2 with async/await or callbacks.

🔄 Transaction Updates – Listen for real-time transaction changes via Transaction.updates stream.

🧾 Transaction History – Access current entitlements, full purchase history, and unfinished transactions.

📆 Subscription Management – Track subscription state, renewal info, grace period, and win-back offers.

🎁 Intro & WinBack Offers – Detect introductory eligibility and read active win-back offers. Signed promotional offers are not supported.

🆔 App Account Token – Automatically generated and stored in Keychain; sent with every purchase.

💸 Refund Sheet – Present native refund request UI with minimal setup.

⚙️ Native Settings Access – Open native iOS subscription management screen.

🚀 Async + Callbacks – Every method is available via Task<T> and classic callback style.

🧩 Clean JSON Models – All core models (Transaction, Product, etc.) are fully serializable.

🛡️ Detailed Errors – Native SKError codes are mapped to string identifiers like SKErrorPaymentCancelled.

📜 Legacy Support – Access StoreKit 1 receipt for backend validation if needed.

🔗 API Fidelity – designed to mirror Apple’s native StoreKit 2 behavior as closely as possible. Expect familiar concepts, naming, and flow — just with a Unity-friendly API.


Not Implemented (Yet)

🚫 Promotional Offers with signature (e.g., discountId + signature)

🚫 subscription.status directly from Product – not supported. You can only retrieve subscription status using a Transaction (transaction.subscriptionStatus).


Platform Support

✅ iOS 15.0+

✅ iPadOS 15.0+