一个产品目录
来自 App Store Connect 和 Play Console 的产品映射到同一个权益(entitlement),因此您的后端永远不需要按平台分支。
Apple 准则 3.1.1 和 Google 的支付政策用不同的措辞说了同一件事:如果用户购买的东西是在应用内使用的(功能、订阅、积分、高级内容),购买就必须通过商店的结算系统。如果用户购买的东西是在应用外使用的(实体商品、理发、保洁、外卖),就不得使用商店结算系统,这时 Stripe 才是合适的工具。
Apple 在 3.1.3 中列出了几个具名的例外:多平台服务可以让用户访问他们在您网站上购买的内容,前提是同样的项目也在应用内通过 IAP 出售;实时的人对人服务(辅导、咨询)可以使用其他支付方式;阅读器类应用有自己的规则。Google 豁免实体商品和服务,以及捐赠、点对点支付等少数特殊情况。凡是在应用内消费的数字内容,都属于 Play 结算的范围。
| 您销售的是… | iOS 应用中 | Android 应用中 | 您的网站上 |
|---|---|---|---|
| 应用功能订阅(SaaS 方案、高级版) | 必须使用 IAP(3.1.1、3.1.2) | 必须使用 Play 结算 | Stripe,照旧 |
| AI 积分、token、生成次数 | IAP(消耗型) | Play 结算(消耗型) | Stripe |
| 在应用内使用的课程、模板、下载内容 | IAP | Play 结算 | Stripe |
| 实体商品(网店) | 必须使用 Stripe;不允许使用 IAP | Stripe;不允许使用 Play 结算 | Stripe |
| 线下消费的服务(预约、保洁、维修) | Stripe | Stripe | Stripe |
| 实时一对一服务(辅导通话、咨询) | 根据 3.1.3(d) 允许使用 Stripe;IAP 可选 | 通常不在 Play 结算范围内;请查看适用于您细分领域的政策 | Stripe |
| 向注册非营利组织的捐赠 | 经批准的非营利组织可使用其他方式 | 很多情况下可以豁免;请查看政策 | Stripe |
同一个 Web 应用服务两个渠道;只有结账按钮会变。
在 Config.swift 中设置 useragent_iphone 和 useragent_ipad,在 Config.java 中设置 USER_AGENT,让它包含一个唯一的标记,例如在默认 user agent 后面加上 WebViewGoldApp/1.0。保留 Google 登录辅助工具;它会在 OAuth 步骤中使用自己那个被认可的 user agent。
const inApp = navigator.userAgent.includes("WebViewGoldApp")。在应用中显示 IAP 按钮,在 Web 上显示 Stripe 按钮。不要隐藏价格;显示商店价格。
在应用中,按钮跳转到 revenuecat://purchase?external_id=USER_ID&product=PRODUCT_ID(如果使用 RevenueCat 付费墙,则跳转到 revenuecat://launchPaywall?external_id=USER_ID&offering=OFFERING)。WebViewGold 会打开原生购买面板。
Stripe webhook 和 RevenueCat webhook 写入同一张 subscriptions 表。Web 应用只问“这个用户是否有效?”,从不关心是哪个商店收的钱。
除地区性例外外,应用不得引导用户去网站购买、显示 Web 价格或链接到 Stripe 结账。现有的 Web 订阅用户只需登录就能直接使用,只要应用同时提供 IAP,3.1.3(b) 就允许这样做。

只要有一个优化良好的Web应用版本,几分钟内您就能拥有一个出色的移动应用。除此之外,客户服务非常友好且乐于助人!我只能说:推荐WebViewGold :-)
一个最小化版本。在生产环境中,请从后端读取产品 ID,让它们与两个商店保持同步。
const inApp = /WebViewGoldApp/.test(navigator.userAgent);
function subscribe(userId) {
if (inApp) {
// 通过 WebViewGold + RevenueCat 打开原生购买面板(iOS 和 Android)
window.location.href = "revenuecat://purchase?external_id=" + encodeURIComponent(userId) + "&product=premium_monthly";
} else {
// Web:您现有的 Stripe Checkout 会话
window.location.href = "/api/stripe/checkout?plan=premium_monthly";
}
}
// 原生面板关闭后,轮询您的后端,直到 webhook 到达
async function waitForEntitlement(userId, tries = 10) {
for (let i = 0; i < tries; i++) {
const r = await fetch("/api/me/subscription").then(x => x.json());
if (r.active) return true;
await new Promise(res => setTimeout(res, 1000));
}
return false;
}cancelinapppurchase://(它会打开系统的订阅页面)。来自 App Store Connect 和 Play Console 的产品映射到同一个权益(entitlement),因此您的后端永远不需要按平台分支。
在 Config.swift 和 Config.java 中填好两个密钥,然后在 Web 应用中使用 revenuecat:// 链接。无需原生代码。应用内购买需要 WebViewGold Extended License。
首次购买、续订、取消、扣款问题和过期等事件会送达您的 Supabase edge function 或 Cloud Function。RevenueCat 设置指南会带您一步步完成。
问题恰恰出在“告诉”上:在地区性例外之外,这根据 3.1.1 算作引导外部购买。一个没有任何购买途径、只能登录的应用有时会被接受,但审核人员往往会问新用户要怎样才能成为付费用户。提供 IAP 才是可靠的答案。
有,实体商品和在应用外消费的服务。Apple 完全不允许这些使用 IAP。
不用。佣金只适用于通过 Apple 或 Google 结算完成的购买。
数字打赏和应用内的辅导内容属于 IAP。在 iOS 上,根据 3.1.3(d),两人之间的实时一对一服务可以使用其他支付方式。请在审核备注中说明您属于哪种情况。
需要,即 Extended License。本指南中的其他内容使用标准许可证即可。
结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。
$109 每个平台,一次性付费
WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。
在主页查看方案$349 每个许可证,一次性附加购买
无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。
Cloud Builder 如何运作 试用免费演示$698 每个平台 $798
把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。
Full Service 详情 服务提供方:冬季特惠价格有效期至 2026年12月31日。
App Store & Google Play 审核通过保证 – 否则 14 天内退款
想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。
退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。