Loading...
Loading...
Compare original and translation side by side
| Bucket | Examples | Go to |
|---|---|---|
| Client purchase plumbing | BillingClient, listeners, acknowledgement, consumption | Client side table |
| Server purchase truth | Token validation, RTDN, entitlement state machine | Server side table |
| Out of scope for either | Auth, your user DB, paywall UI, push | Your responsibility table |
| 类别 | 示例 | 跳转至 |
|---|---|---|
| 客户端购买流程 | BillingClient、监听器、确认、消耗 | 客户端表格 |
| 服务器端购买真实性 | 令牌验证、RTDN、权益状态机 | 服务器端表格 |
| 两者均不涉及的范围 | 认证、用户数据库、付费墙UI、推送 | 您需负责的表格 |
| Concern | Raw PBL | RevenueCat |
|---|---|---|
| BillingClient setup and configuration | You write | Handled internally |
| Connection lifecycle and reconnection | You write | Handled internally |
| PurchasesUpdatedListener | You write | Replaced by purchase callbacks |
| queryProductDetailsAsync() | You write | Replaced by awaitOfferings() / awaitGetProducts() |
| launchBillingFlow() | You write | Called internally by awaitPurchase() |
| Acknowledgement after purchase | You write | Handled automatically |
| Consumption of consumables | You write | Handled automatically (mark product as consumable in dashboard) |
| queryPurchasesAsync() on launch | You write | Handled internally on connection |
| Retry logic for transient errors | You write | Handled internally by SDK |
| BillingResponseCode handling | You write | Abstracted to PurchasesErrorCode |
| In-app payment recovery messages | You write | Automatic (showInAppMessagesAutomatically = true) |
| Subscription option selection for offers | You write | defaultOption selected automatically |
| 关注点 | 原生PBL | RevenueCat |
|---|---|---|
| BillingClient的设置与配置 | 需自行编写 | 内部处理 |
| 连接生命周期与重连 | 需自行编写 | 内部处理 |
| PurchasesUpdatedListener | 需自行编写 | 由购买回调替代 |
| queryProductDetailsAsync() | 需自行编写 | 由awaitOfferings() / awaitGetProducts()替代 |
| launchBillingFlow() | 需自行编写 | 由awaitPurchase()内部调用 |
| 购买后的确认操作 | 需自行编写 | 自动处理 |
| 消耗型商品的消耗 | 需自行编写 | 自动处理(在控制台中将商品标记为消耗型) |
| 启动时调用queryPurchasesAsync() | 需自行编写 | 连接时内部处理 |
| 临时错误的重试逻辑 | 需自行编写 | 由SDK内部处理 |
| BillingResponseCode处理 | 需自行编写 | 抽象为PurchasesErrorCode |
| 应用内支付恢复消息 | 需自行编写 | 自动显示(设置showInAppMessagesAutomatically = true) |
| 优惠订阅选项选择 | 需自行编写 | 自动选择defaultOption |
| Concern | Raw PBL | RevenueCat |
|---|---|---|
| Google Play Developer API integration | You build | RevenueCat backend |
| Service account credential management | You manage | Configured once in RC dashboard |
| Receipt verification on every purchase | You build | Automatic |
| Purchase token validation and deduplication | You build | RevenueCat backend |
| linkedPurchaseToken chain traversal | You build | RevenueCat backend |
| RTDN processing and dispatch | You build | RevenueCat processes, sends webhooks |
| Cloud Pub/Sub setup | You set up | Not needed |
| Subscription state machine on backend | You build | CustomerInfo computed by RC |
| Entitlement computation across 7 states | You build | isActive computed by RC |
| Grace period / account hold tracking | You build | billingIssueDetectedAt |
| Cancellation with access-until-expiry logic | You build | isActive + unsubscribeDetectedAt |
| Price cohort tracking | You build | RC backend handles |
| Product-to-entitlement mapping | You build | Configured in RC dashboard |
| 关注点 | 原生PBL | RevenueCat |
|---|---|---|
| Google Play Developer API集成 | 需自行构建 | 由RevenueCat后端处理 |
| 服务账号凭证管理 | 需自行管理 | 在RC控制台中配置一次即可 |
| 每次购买的收据验证 | 需自行构建 | 自动处理 |
| 购买令牌验证与去重 | 需自行构建 | 由RevenueCat后端处理 |
| linkedPurchaseToken链遍历 | 需自行构建 | 由RevenueCat后端处理 |
| RTDN处理与分发 | 需自行构建 | RevenueCat处理并发送webhooks |
| Cloud Pub/Sub设置 | 需自行搭建 | 无需设置 |
| 后端订阅状态机 | 需自行构建 | 由RC计算生成CustomerInfo |
| 7种状态下的权益计算 | 需自行构建 | 由RC计算生成isActive |
| 宽限期/账户暂停跟踪 | 需自行构建 | 由billingIssueDetectedAt跟踪 |
| 保留访问权限至到期日的取消逻辑 | 需自行构建 | 由isActive + unsubscribeDetectedAt实现 |
| 价格群组跟踪 | 需自行构建 | 由RC后端处理 |
| 商品到权益的映射 | 需自行构建 | 在RC控制台中配置 |
| Concern | Notes |
|---|---|
| User authentication system | You bring your own; pass user ID to RC |
| Your own database of users | RC is not your primary user database |
| Premium content server side | Verify via RC REST API or webhooks |
| Webhook receiver endpoint | You build; RC sends, you receive |
| Play Console product creation | Still done in Play Console |
| Subscription deferral | Direct Google Play API call |
| Subscription revocation | Direct Google Play API call |
| Alternative billing programs | Limited RC support; may need raw PBL |
| App UI (paywalls, onboarding) | You build (RC Paywalls UI optional) |
| Push notifications for payment issues | You build on top of webhook events |
| 关注点 | 说明 |
|---|---|
| 用户认证系统 | 需自行提供;将用户ID传递给RC |
| 自有用户数据库 | RC并非您的主要用户数据库 |
| 服务器端付费内容 | 通过RC REST API或webhooks进行验证 |
| Webhook接收端点 | 需自行构建;RC发送请求,您负责接收 |
| Play Console商品创建 | 仍需在Play Console中完成 |
| 订阅延期 | 直接调用Google Play API |
| 订阅撤销 | 直接调用Google Play API |
| 替代计费方案 | RC支持有限;可能需要使用原生PBL |
| 应用UI(付费墙、引导流程) | 需自行构建(可选使用RC Paywalls UI) |
| 支付问题推送通知 | 基于webhook事件自行构建 |
appUserIDneed custom RTDN pipeline? -> raw PBL only if you must own it end to end
need deferral or revocation? -> keep a raw PBL path for those API calls
need fast time to production? -> RevenueCat, then add raw PBL escape hatches laterappUserID需要自定义RTDN管道? -> 只有当您必须完全自主掌控时才选择原生PBL
需要延期或撤销订阅? -> 为这些API调用保留原生PBL路径
需要快速上线? -> 选择RevenueCat,之后再添加原生PBL的备选方案