Skip to content

Ecency Pro on mobile via in-app purchase #3555

Description

@feruzm

Summary

The app only renders the Pro badge today. Users cannot buy or renew Ecency Pro from mobile and members have no Pro surface at all. Add Pro as a store in-app purchase through the existing IAP flow (InAppPurchaseContainer + src/providers/iap). A store purchase should grant the same 12-month membership as a web purchase, through the same server-side Pro fulfilment.

Product

  • SKU 1999pro, same as web: $19.99 for 12 months. Buying again while active extends from the current expiry (the server already does this).
  • Android: one-time product in Play Console, consumed after delivery like the other SKUs so it can be bought again to renew. No auto-renewing subscription.
  • iOS: same SKU in App Store Connect. Non-Renewing Subscription is the type that fits a fixed-term membership. Confirm fetchProducts({ type: 'in-app' }) returns that type before settling on it, otherwise use Consumable.
  • No link-out to web checkout anywhere in the app and no copy pointing to buying Pro elsewhere.

Mobile

  • Pro card on the Perks screen. Non-members see the benefits, the store's localized price and a buy button. Members see a "You are a Pro member" state. Status comes from the existing useIsProMember.
  • Pro screen or sheet with the benefits list matching web (verified badge, free blog at yourname.blogs.ecency.com, supports Ecency, early access), the buy button via InAppPurchaseContainer with 1999pro for both platforms and a success state.
  • After a successful purchase, invalidate the pro-members roster query. The roster is cached for a few minutes, so show an "activating" message (as web does) rather than assuming the badge appears instantly.
  • The purchase goes to the logged-in account. Gifting Pro is out of scope.
  • Interrupted purchase recovery works for 1999pro the same way it does for Points.
  • en-US strings only, reusing the web wording where it fits.

Backend (separate change, lands first)

  • Accept 1999pro on play_store and app_store purchase orders and deliver it through the existing Pro fulfilment. Store orders currently only know the Points, spins, boosts and accounts SKUs, so a 1999pro store order would fail verification today.

Store setup

  • Create 1999pro in Play Console at $19.99.
  • Create 1999pro in App Store Connect with review notes and screenshot.

Acceptance

  • A license-tester purchase on the Play test track puts the account on the Pro roster and the badge shows in the app.
  • Same for an App Store sandbox purchase.
  • A second purchase while active extends the membership by 12 months.
  • A cancelled purchase creates no order and changes nothing.
  • Perks that are free or discounted for Pro (AI allowances, streak freeze) show the Pro price in the app once the membership is active.

Follow-ups (not in this issue)

  • Claim the free Pro blog from the app (web only today).
  • Show the membership expiry date (the public roster carries no dates).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions