The Capacitor shell buys through StoreKit (iOS 15) and Play Billing instead of RevenueCat.
After the store sheet succeeds, the app POSTs the signed transaction or Play purchase token to /monetization/store/confirm/.
Restore reads current store entitlements and confirms each one. Web checkout stays on Stripe.
The store account token from GET /monetization/subscription/ is sent as appAccountToken / obfuscatedAccountId.
Depends on the chat_backend PR for issue #78 (feat/78-native-store-purchases).
Test plan
storeBilling, revenueCat, finance, and BillingSection unit tests
iOS sandbox purchase and restore against a backend with APPLE_IAP_BUNDLE_ID set
Play license-test purchase and restore against a backend with GOOGLE_PLAY_SERVICE_ACCOUNT_JSON set
Web billing still opens Stripe Checkout
## Summary
- The Capacitor shell buys through StoreKit (iOS 15) and Play Billing instead of RevenueCat.
- After the store sheet succeeds, the app POSTs the signed transaction or Play purchase token to `/monetization/store/confirm/`.
- Restore reads current store entitlements and confirms each one. Web checkout stays on Stripe.
- The store account token from `GET /monetization/subscription/` is sent as `appAccountToken` / `obfuscatedAccountId`.
Depends on the `chat_backend` PR for issue #78 (`feat/78-native-store-purchases`).
## Test plan
- [x] `storeBilling`, `revenueCat`, `finance`, and `BillingSection` unit tests
- [ ] iOS sandbox purchase and restore against a backend with `APPLE_IAP_BUNDLE_ID` set
- [ ] Play license-test purchase and restore against a backend with `GOOGLE_PLAY_SERVICE_ACCOUNT_JSON` set
- [ ] Web billing still opens Stripe Checkout
Native purchases replace RevenueCat. The app sends the signed transaction or Play token to /monetization/store/confirm/ so access is granted only after the store check.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
/monetization/store/confirm/.GET /monetization/subscription/is sent asappAccountToken/obfuscatedAccountId.Depends on the
chat_backendPR for issue #78 (feat/78-native-store-purchases).Test plan
storeBilling,revenueCat,finance, andBillingSectionunit testsAPPLE_IAP_BUNDLE_IDsetGOOGLE_PLAY_SERVICE_ACCOUNT_JSONset