跳至内容
WebViewGold 从 Vibe Coding 到 App Store
中文
获取 WebViewGold

支付

Web 封装应用的 RevenueCat 设置:从头到尾

RevenueCat 把两个商店结算系统变成一个产品目录、一个 webhook 和一个“这个用户订阅了吗?”的答案。WebViewGold 内置了 RevenueCat 集成:粘贴两个密钥,从 Web 应用中的一个链接触发购买,再让 webhook 更新您的后端。本指南从商店产品一路讲到可用的付费墙。

每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。

  • 审核通过保证 – 否则 14 天内退款
  • 无需编程
  • 一次性付费,免费更新
  • 7×24 小时人工支持
  • 2014 年起德国出品 · ISO 27001

1. 在两个商店中创建产品

在两个平台上使用相同的产品 ID;这能让 RevenueCat 和您的后端都保持简单。

  1. App Store Connect

    您的应用 → Monetization → Subscriptions → 创建一个订阅组,然后创建产品(参考名称、产品 ID 如 premium_monthly、时长、价格、本地化显示名称、审核截图)。一次性项目放在 In-App Purchases 下,选择消耗型或非消耗型。

  2. Google Play Console

    Monetize → Products → Subscriptions → 产品 ID premium_monthly → 一个基础方案(按月、自动续订),以及可选的优惠,例如免费试用。一次性项目放在 In-app products 下。然后激活它们。

  3. 状态检查

    Apple 产品必须达到“Ready to Submit”状态;第一个应用内购买项目会和构建一起审核,所以请在 App Store Connect 中把它附加到对应版本上。Play 产品必须处于有效状态,而且应用必须至少已发布到某个测试轨道。

2. 设置 RevenueCat 项目

在 RevenueCat 控制台中花十五分钟。

  1. 添加 App Store 应用

    Project → Apps → App Store:输入 bundle ID(必须与 Xcode 项目和 App Store Connect 完全一致)、App 专用共享密钥或来自 App Store Connect 的 In-App Purchase Key,以及可选的 App Store Connect API 密钥,以便导入产品。

  2. 添加 Play Store 应用

    包名,以及一个可访问 Play Developer API 的 Google Cloud 服务账号 JSON,具体按 RevenueCat 文档的说明操作。

  3. 产品、权益、offering

    为两个应用导入或添加产品 ID。创建一个名为 premium 的权益(entitlement),把每个产品都关联到它。创建一个 offering(default),包含按月和按年等套餐;如果您想使用 RevenueCat 托管的付费墙,请在 Paywalls 下为该 offering 设计它。

  4. 复制密钥

    Project settings → API keys:每个平台的公开 SDK 密钥(iOS 为 appl_…,Android 为 goog_…),以及项目设置中的项目 ID。这就是 WebViewGold 需要的两个值。

我很高兴购买了这个应用!非常简单,文档也很棒。联系客服后,他们回复很快且非常友好,一天之内就解决了我的问题。10/10,值得推荐。

Nelis Geiger · CodeCanyon

3. WebViewGold 中的 Config 密钥

每个平台两行,然后重新构建。iOS 应用内购买文档和Android 文档展示了相关的其他选项。

text
// Config.swift (iOS)
static let revenueCatAPIKey = "appl_xxxxxxxxxxxxxxxxxxxx"
static let revenueCatProjectID = "projxxxxxxxx"

// Config.java (Android)
public static final String REVENUECAT_API_KEY = "goog_xxxxxxxxxxxxxxxxxxxx";
public static final String REVENUECAT_PROJECT_ID = "projxxxxxxxx";

4. 从 Web 应用触发购买

external_id 会成为 RevenueCat 的 app user ID,所以请传入您自己的稳定用户 ID(而不是可能变化的邮箱)。只在应用内调用这些链接;在 Web 上显示 Stripe。

javascript
const userId = currentUser.id;   // 您的 Supabase / Firebase 用户 ID
const inApp = /WebViewGoldApp/.test(navigator.userAgent);

// 购买某个特定产品(ID 与 RevenueCat 控制台中显示的一致);适用于 iOS 和 Android
function buy(productId) {
  if (!inApp) return showStripeCheckout(productId);
  window.location.href = "revenuecat://purchase?external_id=" + encodeURIComponent(userId) + "&product=" + productId;
}

// 或者打开基于某个 offering 构建的 RevenueCat 付费墙
function openPaywall() {
  window.location.href = "revenuecat://launchPaywall?external_id=" + encodeURIComponent(userId) + "&offering=default";
}

// 重装后或在新设备上恢复购买(Apple 对订阅和非消耗型项目有此要求)
function restore() { window.location.href = "restoreinapppurchases://"; }

// 管理或取消:打开商店的订阅页面
function manage() { window.location.href = "cancelinapppurchase://"; }

5. 通往后端的 webhook

购买面板是原生的;您的数据库通过 RevenueCat 的 webhook 得知购买情况。在 RevenueCat 中进入 Integrations → Webhooks,输入 Supabase edge function、Cloud Function 或 API 路由的 URL,并设置一个由您的端点负责校验的 Authorization 请求头值。至少要处理 INITIAL_PURCHASE、RENEWAL、PRODUCT_CHANGE、CANCELLATION、BILLING_ISSUE、EXPIRATION 和 TRANSFER。每个事件都带有 app_user_id(即来自 external_id 的您的用户 ID)、产品、商店和到期日期;把它们写入 subscriptions 表,让 Web 应用从那里读取“有效期至”。绝不要信任存储在设备上的标记。

原生面板关闭后,webhook 通常会在几秒内到达。让 Web 应用轮询您的后端最多十秒,然后解锁,并提供“仍在处理中,请下拉刷新”的后备提示。处理客服问题时,RevenueCat 的 REST API 可以按需返回订阅者状态,控制台中的客户视图会显示每一笔交易。如果您也通过 Stripe 在 Web 上销售,它的 webhook 会写入同一张表,因此一次权益检查就能服务两个渠道。

6. 恢复购买、沙盒测试和审核

  • 一个显眼的“恢复购买”按钮(在设置或付费墙中),调用 restoreinapppurchases://。Apple 会检查它。
  • 在付费墙上显示价格、时长、续订条款,以及使用条款和隐私政策的链接;准则 3.1.2 拒审大多是因为付费墙缺少这些文字。参见3.1.2 指南。
  • iOS 沙盒:App Store Connect → Users and Access → Sandbox testers;在测试用的 iPhone 上,于“设置 → App Store → 沙盒账户”中登录。TestFlight 构建会自动使用沙盒;订阅在沙盒中每隔几分钟就续订一次,便于您测试到期情况。
  • Android:Play Console → Setup → License testing,添加测试人员的 Gmail 账号,从内部测试轨道安装;测试购买不会扣款。
  • RevenueCat 控制台中有一个沙盒开关,可以显示沙盒交易;您的 webhook 接收这些交易时会带有环境标记,因此您的表可以忽略或标记它们。
  • 审核时,给 Apple 提供一个没有有效订阅的演示账号,并在备注中描述付费墙(模板见审核备注指南)。审核人员会在沙盒中购买。
  • 本地化价格:调用 getstorelocation://(或启用自动注入)读取 storeLocation,在您的 Web 付费墙上显示用户所在店面的价格。

常见问题

RevenueCat 会取代 Stripe 吗?

不会。Stripe 继续留在网站上处理 Web 购买。RevenueCat 处理商店购买,两者都写入您后端中的同一张权益表。

external_id 应该是什么?

来自您认证系统的稳定用户标识符。如果用户可以在登录前购买,就使用 WebViewGold UUID API(get-uuid://)提供的设备标识符,之后再把它关联(alias)到账号上。

webhook 是必需的吗?

强烈推荐。没有它,您的后端每次检查都得去查询 RevenueCat。有了它,您的数据库就是唯一可信的数据来源。

同一个产品在两个商店中可以定不同的价格吗?

可以。价格按商店分别设置;RevenueCat 会把两者映射到同一个权益。

如果有人在网站上打开购买链接会怎样?

什么都不会发生;只有应用才能识别 revenuecat://。用 user agent 检查保护这个按钮,并在 Web 上显示 Stripe。

让您的应用上架商店的三种方式

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。

自己动手

$109 每个平台,一次性付费

WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。

在主页查看方案

Cloud Builder

$349 每个许可证,一次性附加购买

无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。

Cloud Builder 如何运作 试用免费演示

Full Service

$698 每个平台 $798

把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。

Full Service 详情 服务提供方: WeSetupYourWebViewApp

冬季特惠价格有效期至 2026年12月31日。

准备好发布您的应用了吗?

App Store & Google Play 审核通过保证 – 否则 14 天内退款

想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。

退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。