View on Asset Store (opens in new tab)
Package details
- Latest version
- 2.0.0
- Last updated
- First released
- Unity version
- 6000.3.12 or later
- Package size
- 76 KB
- Files
- 13
- Views in the past week
- 10
Price tracking
- Last checked
- Tracked since
- Lowest recorded
- $24.49 on
Keywords
OSL IAP Receipt Verification - Client & Backend
Released 2.0.0 (2026-08-30): Unity IAP client and .NET 10 backend starter that verifies Apple and Google purchases before rewards, recovers pending receipts, and blocks duplicate grants.
Affiliate link · Purchases support this site
Price history
Last 6 months
USDAsset preview
1 / 6
OSL IAP Receipt Verification - Client & Backend screenshot 1
About this asset
OSL IAP Client is for Unity IAP projects that need to verify a purchase before granting currency, items, or subscription access. It connects Unity IAP v5 pending orders to an included .NET 10 Apple/Google verification starter, persists receipts that still need processing, and uses server-side transaction records to reduce duplicate rewards.
Why / Key Benefits
- Verify before granting: Send Apple or Google purchase data to your backend and grant only when the response explicitly allows it.
- Recover after restart: Persist pending receipt payloads with a versioned schema, last-known-good backup, and corrupted-file quarantine so unconfirmed purchases can be retried after the app restarts.
- Avoid duplicate rewards: Treat the backend database transaction record as the idempotency authority; `AlreadyProcessed` confirms the store order without granting again.
- Handle temporary failures: Retry queued verification with typed transient failures and configurable exponential backoff. Retry-exhausted entries remain recoverable instead of being discarded.
- Bind purchases to users: Prevent a pending transaction from being verified or granted under a different logged-in user.
- Reconcile server records: Fetch authoritative transaction records and compare them with your application's durable grant ledger.
- Start from working server code: Use the included .NET 10 ASP.NET Core backend starter with Apple/Google verification, SQLite/Dapper persistence, history and subscription endpoints, reconciliation data, and webhook handlers.
- Keep Unity IAP semantics: Confirm a pending order only when the backend response permits confirmation.
Typical Workflow
1. Unity IAP returns a pending order.
2. The client stores its receipt payload and sends it to the configured backend.
3. The backend checks Apple or Google and atomically records a new transaction.
4. The client grants only `ShouldGrantReward` responses and confirms only `ShouldConfirmPurchase` responses.
5. Unresolved queue entries retry after temporary failures or a later app launch.
Requirements
- Package release: 2.0.0 (2026-08-30)
- Minimum Unity Version: Unity 2021.3 LTS
- Tested Unity Versions: Unity 2021.3.45f2 and Unity 6000.3.12f1 (package-isolation import and compile)
- Purchase flow: Unity IAP `com.unity.purchasing` 5.0.0 tested
- Backend runtime: .NET 10 SDK/runtime
- Backend providers: Apple App Store and Google Play
- Optional demo UI: Unity UI; the package imports in compatibility mode when optional Unity packages are absent
Limitations / Scope
- The included backend is a starter that must be configured, secured, hosted, monitored, and adapted to your own reward and account systems.
- The default client retry limit is 10 attempts. Exhausted entries remain in a recoverable state and are reported through `OnVerificationFailed`; the package does not guarantee zero purchase loss.
- The host application must protect the reconciliation endpoint and persist transaction IDs with its own reward state. The starter cannot make a game inventory update atomic with an external store verification.
- The included database implementation is SQLite/Dapper. Other databases require an application-specific provider and SQL migration.
- This 2.0.0 release no longer supports running the included backend on .NET 8. Existing .NET 8 deployments should remain on IapClient 1.1.2 until migrated.
Documentation & Support
From the publisher's Asset Store listing.
Technical details
- Package release: 2.0.0 (2026-08-30).
- Purchase contract: `IapManager` consumes Unity IAP v5 `PendingOrder` data and asks `BackendApiClient` to verify it before reward delivery or store confirmation.
- Persistent recovery: Unresolved payloads use a versioned `osl_iap_pending_queue.json` schema, same-directory replacement, last-known-good backup, legacy migration, and corrupted-file quarantine.
- Recoverable states: Retry exhaustion and user mismatch remain durable. `GetPendingReceiptStatuses` exposes the state and `RetryPendingReceipt` restarts only an exhausted receipt.
- Response semantics: Typed transient, validation, permanent, user-binding, and reconciliation failures are combined with `ShouldGrantReward` and `ShouldConfirmPurchase`. `AlreadyProcessed` confirms without a second reward.
- User binding: Queue items retain their original user ID. The reference backend rejects an existing transaction when user, product, or store differs.
- Idempotency: The reference .NET 10 backend uses an atomic SQLite insert with a unique transaction identifier. Applications should persist `VerifiedPurchaseGrant.TransactionId` in their own reward ledger.
- Reconciliation: The backend returns authoritative purchase records, including revoked and subscription-active state. Consumable balances remain application-owned and must be reconciled against the application's transaction ledger.
- Store support: The reference backend contains Apple App Store and Google Play verification paths, including Apple sandbox/production handling, current Google Play Subscriptions V2 token lookup, and original transaction tracking for subscriptions.
- Persistence: SQLite and Dapper are included for the starter implementation. Migrating to another database requires replacing the provider and reviewing SQL behavior.
- Optional integrations: Unity IAP and Unity UI are soft dependencies so the package can import without them; the complete purchase flow requires Unity IAP v5.
- Configuration: `IapSetupConfig` stores backend URL, environment, timeouts, retry limits, and product catalog entries.
Compatibility
| Unity version | Built-in | URP | HDRP |
|---|---|---|---|
| 6000.3.12f1 | Compatible | Compatible | Compatible |
This asset is a script and native plugin package. It is completely independent of graphical render pipelines (Built-in, URP, and HDRP are all supported). Note: This package strictly utilizes Apple's native AuthenticationServices framework for iOS. It is completely self-contained and does not require any external dependency managers (such as EDM4U).
As listed on the Asset Store.