Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion ahbg/android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Comment on lines +18 to +20

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Configure RevenueCat for the Galaxy store

When the APK is installed from Galaxy, adding purchases-store-galaxy does not select that backend: PurchasesConfiguration.Builder(...).build() in Entitlements.kt retains the SDK's default Play store. The primary Galaxy build will therefore initialize Google Play billing instead of Samsung IAP and cannot complete Galaxy purchases; configure .store(Store.GALAXY) or use explicit per-store build variants.

Useful? React with 👍 / 👎.

*
* When the RevenueCat key is not provisioned (free/dev builds), the store
* degrades to the free tier rather than crashing or faking premium.
*/
Expand Down
80 changes: 80 additions & 0 deletions ahbg/submission/GALAXY_STORE_RUNBOOK.md
Original file line number Diff line number Diff line change
@@ -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=<date>`.

## 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=<rc_public_key> \
-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.
Comment on lines +61 to +63

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add an in-app purchase and restore entry point

This closed-beta gate cannot be performed by a fresh user because the Android client has no purchase or restore entry point: PremiumStore only exposes isBenchmarkLabUnlocked(), MainActivity only bridges that query, and there are no offering, purchase, or restorePurchases calls anywhere under the Android app. Even after the Galaxy backend is selected, users can only observe an entitlement acquired elsewhere and cannot buy ahbg_benchmark_lab in this app, so wire the purchase and restore flows before treating this verification step as runnable.

Useful? React with 👍 / 👎.


## 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.
9 changes: 8 additions & 1 deletion ahbg/submission/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,25 @@ 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` |
| Devpost material | `DEVPOST.md` |
| 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`)
11 changes: 9 additions & 2 deletions ahbg/submission/REVENUECAT_PROVISIONING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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_<TO_FILL>`.
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.
Comment on lines +11 to +12

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the Play-only sandbox prerequisite

When an operator follows this Galaxy-first path without creating a Play app, the unchanged note at the end of this document still says that store sandbox purchases require a Play Console upload. Galaxy closed-beta verification instead depends on the Seller Portal upload described by the new runbook, so the provisioning instructions are contradictory and can send the release through an unnecessary Play blocker; scope that note to Play or replace it with the Galaxy requirement.

Useful? React with 👍 / 👎.

- 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
Expand All @@ -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)

Expand Down
31 changes: 18 additions & 13 deletions ahbg/submission/SUBMISSION_BLOCKERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Loading