OSL IAP Receipt Verification - Client & Backend 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

by OngsooLabs (opens in new tab)

No ratings yet

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.

Price $34.99

Buy on Asset Store (opens in new tab)

Affiliate link · Purchases support this site

Price history

Last 6 months

USD
Price history for OSL IAP Receipt Verification - Client & Backend, 6 months Current $34.99; lowest $24.49; highest $34.99 in this period. $0 $25 $50 Jul Aug Sep Oct Nov Version 1.1.0 released 13 Jul 2026 v1.1.0 Version 1.1.2 released 24 Aug 2026 v1.1.2 Version 2.0.0 released 31 Aug 2026

Asset preview

1 / 6

OSL IAP Receipt Verification - Client & Backend screenshot 1

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

https://ongsoolabs.github.io/

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

Render pipelines supported in each Unity version
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.