diff --git a/ahbg/android/app/build.gradle.kts b/ahbg/android/app/build.gradle.kts index 5ba1b15..fed909c 100644 --- a/ahbg/android/app/build.gradle.kts +++ b/ahbg/android/app/build.gradle.kts @@ -61,5 +61,9 @@ android { dependencies { implementation("androidx.webkit:webkit:1.12.1") - implementation("com.revenuecat.purchases:purchases:8.10.1") + // RevenueCat 10.x core plus the Samsung Galaxy Store billing backend. + // Native Galaxy IAP support requires the purchases-store-galaxy module + // (RevenueCat >= 10.7.0). Store selection is auto-detected at runtime. + implementation("com.revenuecat.purchases:purchases:10.19.1") + implementation("com.revenuecat.purchases:purchases-store-galaxy:10.19.1") } diff --git a/ahbg/android/app/src/main/java/org/interdependency/ahbg/Entitlements.kt b/ahbg/android/app/src/main/java/org/interdependency/ahbg/Entitlements.kt index b5b7c5e..99906c9 100644 --- a/ahbg/android/app/src/main/java/org/interdependency/ahbg/Entitlements.kt +++ b/ahbg/android/app/src/main/java/org/interdependency/ahbg/Entitlements.kt @@ -15,6 +15,10 @@ import com.revenuecat.purchases.interfaces.ReceiveCustomerInfoCallback * unlocks only when RevenueCat reports the `benchmark_lab` entitlement as * active for the current app user. * + * RevenueCat 10.x with the `purchases-store-galaxy` billing backend: the + * store (Galaxy, or a later Play build with its module added) is auto-detected + * at runtime, so this file never hard-codes a store. + * * When the RevenueCat key is not provisioned (free/dev builds), the store * degrades to the free tier rather than crashing or faking premium. */ diff --git a/ahbg/submission/GALAXY_STORE_RUNBOOK.md b/ahbg/submission/GALAXY_STORE_RUNBOOK.md new file mode 100644 index 0000000..b3567c6 --- /dev/null +++ b/ahbg/submission/GALAXY_STORE_RUNBOOK.md @@ -0,0 +1,80 @@ +# Samsung Galaxy Store publication runbook + +Shipaton accepts a fully published Galaxy Store URL. This runbook follows the +Galaxy-first order: Seller Portal approval first, code/RevenueCat in parallel, +then register, IAP, closed-beta purchase verification, review, publish. + +## 0. Code (done in this PR) + +- RevenueCat upgraded `8.10.1 → 10.19.1` with the `purchases-store-galaxy` + billing backend (native Galaxy IAP requires RevenueCat >= 10.7.0 + that + module). Store is auto-detected at runtime. +- Package stays `org.interdependency.ahbg`; target API 35 (Galaxy does not + currently impose Play's API-36 rule). + +## 1. Samsung Seller Portal (start immediately — longest lead time) + +1. Register a Samsung account at the Seller Portal. +2. Request **Commercial Seller Status** (required even for free distribution). + - Provide identity/business documentation and financial information. + - PayPal is the supported/easiest payout path. + - D-U-N-S or international-bank verification can take up to 10 business + days; Samsung also documents applying without D-U-N-S using business + documentation. +3. Record approval here when granted: `SELLER_PORTAL_APPROVED=`. + +## 2. Register AHBG + +1. Seller Portal → Add Application. +2. Package name: `org.interdependency.ahbg`. +3. Upload the signed release binary (APK or AAB) built with: + ```bash + gradle assembleRelease \ + -PruntimeUrl=https://ahbg.interdependentway.org \ + -PrevenueCatApiKey= \ + -PahbgStoreFile=/secure/ahbg-release.jks -PahbgStorePassword=... \ + -PahbgKeyAlias=... -PahbgKeyPassword=... + ``` +4. Fill listing with `STORE_LISTING.md`, privacy policy `PRIVACY_POLICY.md`, + icon, and screenshots (see `DEMO_STORYBOARD.md`). + +## 3. Samsung IAP + +1. Seller Portal → In-App Purchase → create item `ahbg_benchmark_lab` + (one-time, non-consumable), matching the RevenueCat product id. +2. Keep the free core playable without IAP; `benchmark_lab` gates only + Benchmark Lab. + +## 4. Connect Galaxy to RevenueCat + +1. RevenueCat dashboard → add a **Galaxy Store** app with package + `org.interdependency.ahbg`. +2. Create a Galaxy Seller Portal **service account**; give those credentials + to RevenueCat so it can validate Samsung purchases. +3. Create the `benchmark_lab` entitlement and the `ahbg_benchmark_lab` + product/offering (see `REVENUECAT_PROVISIONING.md`). + +## 5. Closed beta + purchase verification + +1. Samsung **Closed Beta** supports in-app purchases and has no fixed + 14-day/12-person production gate. +2. Verify the full path on-device: + install → observe/plan/act/build → persist/reload → + purchase `benchmark_lab` → entitlement unlocks → restore → repeat. + +## 6. Review → publish → Devpost + +1. Submit for Galaxy review. +2. Once live, use the public Galaxy Store listing URL as the Devpost entry + URL (a beta link does not count; the app must be publicly downloadable in + the US). +3. Galaxy optimization notes (Best App for Galaxy category, 20% of score): + foldable/multi-window support and Samsung-specific features are the + highest-value follow-ups; exclusivity is a bonus, not required. + +## hmmm + +- Commercial Seller Status approval time is the schedule risk; it is external + and started first for that reason. +- The live Galaxy listing URL, Seller Portal service-account credentials, and + RevenueCat Galaxy app id cannot be produced from this repository. diff --git a/ahbg/submission/README.md b/ahbg/submission/README.md index 066f86d..86abb5f 100644 --- a/ahbg/submission/README.md +++ b/ahbg/submission/README.md @@ -6,6 +6,7 @@ everything that requires a live external account is listed in | Asset | File | |---|---| +| **Galaxy Store publication runbook** | `GALAXY_STORE_RUNBOOK.md` | | Store listing copy | `STORE_LISTING.md` | | Privacy declaration | `PRIVACY_POLICY.md` | | ≤2-minute device demo | `DEMO_STORYBOARD.md` | @@ -13,11 +14,17 @@ everything that requires a live external account is listed in | RevenueCat production provisioning | `REVENUECAT_PROVISIONING.md` | | Remaining external blockers | `SUBMISSION_BLOCKERS.md` | +## Shipping path + +**Galaxy first** (Shipaton accepts a published Galaxy Store URL; no Samsung +publishing fee and no Play 12-tester/14-day gate). RevenueCat is upgraded to +`10.19.1` with the `purchases-store-galaxy` backend in this line. + ## Current release identity - App id: `org.interdependency.ahbg` - versionCode `2`, versionName `0.2.0` - Production runtime endpoint: `https://ahbg.interdependentway.org` -- Entitlement: `benchmark_lab` (RevenueCat) +- Entitlement: `benchmark_lab` (RevenueCat `10.19.1` + Galaxy backend) - Construction authority: `ucns.mobius-seed-construction@0.1.0` (The-Interdependency/ucns, merged `828c0b8`) diff --git a/ahbg/submission/REVENUECAT_PROVISIONING.md b/ahbg/submission/REVENUECAT_PROVISIONING.md index 0aeeb21..6135eaa 100644 --- a/ahbg/submission/REVENUECAT_PROVISIONING.md +++ b/ahbg/submission/REVENUECAT_PROVISIONING.md @@ -8,10 +8,15 @@ store consoles; the following steps are the exact remaining external work. 1. Create the production project in RevenueCat. - Record the **project id** here once created: `rc_`. -2. Add the Android app (`org.interdependency.ahbg`) with the Play public key. +2. Add the Android app (`org.interdependency.ahbg`). For the Galaxy-first + path add a **Galaxy Store** app; add the Play app later if shipping Play. + - Galaxy: create a Galaxy Seller Portal **service account** and give those + credentials to RevenueCat so it can validate Samsung purchases. + - Play (later): attach the Play public key. 3. Create the entitlement `benchmark_lab` (non-consumable). 4. Create the product `ahbg_benchmark_lab` (one-time purchase, "Benchmark - Lab"), attach it to the entitlement. + Lab"), attach it to the entitlement, and mirror it as a Samsung IAP item + with the same id in Seller Portal. 5. Create an offering (default) containing that product; optionally add a trial offering `ahbg_benchmark_lab_trial` if a trial is desired. 6. Copy the **public SDK API key** (`appl_...` or `goog_...` public key) into @@ -23,6 +28,8 @@ store consoles; the following steps are the exact remaining external work. -PahbgStoreFile=/secure/ahbg-release.jks \ -PahbgStorePassword=... -PahbgKeyAlias=... -PahbgKeyPassword=... ``` +7. SDK: RevenueCat `10.19.1` + `purchases-store-galaxy` (this PR); Galaxy + IAP requires RevenueCat >= 10.7.0 and the store module. ## Verify (gate items) diff --git a/ahbg/submission/SUBMISSION_BLOCKERS.md b/ahbg/submission/SUBMISSION_BLOCKERS.md index 1d4b906..c88c02a 100644 --- a/ahbg/submission/SUBMISSION_BLOCKERS.md +++ b/ahbg/submission/SUBMISSION_BLOCKERS.md @@ -11,28 +11,33 @@ external accounts or hardware and cannot be completed from this repository. regression coverage proves external harness + A0 both build. - No remaining core-mechanics blocker. -## 2. Android release signing and store upload — EXTERNAL +## 2. Galaxy Store publication — EXTERNAL (now the primary path) -- Signing config and versioning are in `ahbg/android/app/build.gradle.kts` - (keystore supplied via gradle properties; never committed). -- Production HTTPS endpoint and network security config are in place. -- **Blocker**: a Play Console account, a release keystore, the store listing - review, and the actual upload/publish step happen outside this repository. +- RevenueCat upgraded to `10.19.1` + `purchases-store-galaxy` (this line); + signing config, versioning, HTTPS endpoint, network security config, and + submission assets are all in-repo. +- **Blocker**: Samsung Seller Portal registration and **Commercial Seller + Status approval** (schedule risk — start first; PayPal is the documented + easiest payout path; D-U-N-S/international-bank verification can take up to + 10 business days). Then app registration, Samsung IAP item, Galaxy review, + and publish. See `GALAXY_STORE_RUNBOOK.md`. ## 3. RevenueCat production provisioning — EXTERNAL -- Client + runtime entitlement boundary complete. -- **Blocker**: the live RevenueCat project, product, `benchmark_lab` - entitlement, offering, and public SDK key must be created in the dashboard. +- Client + runtime entitlement boundary complete; Galaxy billing backend is + part of this line. +- **Blocker**: the live RevenueCat project, Galaxy Store app, Seller Portal + service-account credentials, product, `benchmark_lab` entitlement, offering, + and public SDK key must be created in the dashboard. See `REVENUECAT_PROVISIONING.md`. ## 4. Publish + submission assets — EXTERNAL -- Store listing, privacy policy, demo storyboard, and Devpost material are in - `ahbg/submission/`. +- Store listing, privacy policy, demo storyboard, Galaxy runbook, and Devpost + material are in `ahbg/submission/`. - **Blocker**: recording the ≤2-minute device demo, capturing screenshots, - creating promo/trial codes, uploading assets, and obtaining the public store - URL require the published store listing. + creating promo/trial codes, uploading assets, obtaining the public Galaxy + Store URL, and submitting that URL to Devpost require the published listing. ## Gate status