RevenueCat 接入 Google Play 订阅全流程详解(2025 最新)

在移动应用的订阅变现方案中,RevenueCat 已经成为开发者最常用的后台服务之一。它帮我们解决了:

  • Google/Apple 订阅验证
  • 用户权益统一管理
  • Webhook & 分析
  • 价格、Offer、订阅组管理
  • 跨平台(iOS + Android)统一 SDK

本文将从零开始,带你完成 Google Play + RevenueCat 的完整接入流程,避免你踩坑。

一、准备工作

在开始前,你需要准备以下内容:

项目

描述

Google Play Console 开发者账号

已完成注册、缴费

已上传至少一个 build(内部测试也行)

才能启用应用产品区

RevenueCat 账号

免费版即可

Google Cloud Platform (GCP) 账号

用于生成 Service Account JSON

App 内已准备订阅 UI

可后续接 RevenueCat SDK

二、在 Google Play Console 创建订阅产品

注意:Google Play 必须先上传一个 APK/AAB 后,才会解锁订阅页面。

1. 进入订阅页面

路径:

csharp 复制代码
Monetize with play → Products → Subscriptions

如果你第一次使用,会看到:

"Your app doesn't have any subscriptions yet"

点击 Create subscription

2. 创建订阅产品

推荐格式:

项目

示例

Product ID

linguadiary_monthly_1

Base Plan ID

monthly

Duration

P1M(一个月)

Price

$4.99(示例)

再创建一个年订阅:

项目

示例

Product ID

linguadiary_yearly_12

Base Plan ID

yearly

Duration

P1Y(1年)

3. 添加税务 & 国家分发

必要,不然订阅无法售卖。

三、在 Google Cloud Platform 生成 Service Account JSON(最关键)

这是 RevenueCat 用来验证 Google Play 订阅的关键文件。

1. 进入 GCP 控制台

console.cloud.google.com

2. 确保与 Google Play 绑定同一个项目

Play Console 的 API access 会告诉你当前使用的 "GCP 项目"。

进入同名项目即可。

3. 创建 Service Account

路径:

sql 复制代码
IAM & Admin → Service Accounts → Create Service Account

填写:

  • 名称:revenuecat-play-service
  • Role(权限):必须勾选 Service Account Admin + Pub/Sub Admin

👉 缺权限会导致错误:
Your Google service account credentials do not have permissions to access the Google Cloud Pub/Sub API

4. 创建 JSON 密钥并下载

在 Service Account → Keys → Add Key → JSON

会下载一个:

复制代码
xxxx-revenuecat.json

这是要上传到 RevenueCat 的。

四、在 Google Play Console 授权这个 Service Account

五、在 RevenueCat 绑定 Google Play

进入:

复制代码
RevenueCat → Projects → Apps → (你的 Android App)

选择:

1. Add Store → Google Play

上传你刚才下载的 JSON。

2. 在 RevenueCat 创建产品

路径:

sql 复制代码
Products → New Product

填写:

  • Product ID(必须与 Google Play 完全一致)
  • Offering(可添加 default)

RevenueCat 会自动同步 Google Play 价格、时长、Offer。

六、在 App 内实现 RevenueCat SDK(Flutter 示例)

ini 复制代码
import 'package:purchases_flutter/purchases_flutter.dart';

void main() async {
  await Purchases.configure(PurchasesConfiguration(
    "public_sdk_key_google",
  ));
}

// 获取订阅产品
final offerings = await Purchases.getOfferings();
final package = offerings.current?.availablePackages.first;

// 购买
await Purchases.purchasePackage(package);

// 查询是否是 Pro
final info = await Purchases.getCustomerInfo();
final isPro = info.entitlements.all["pro"]?.isActive ?? false;

七、常见问题(踩坑大全)

1. RevenueCat 报错:CONFIGURATION_ERROR

原因:

  • Google Play 本地化语言没填
  • Base Plan 没启用
  • 未发布
  • Service Account 权限不够
  • Google Play 未启用 API access 授权
  • Google Cloud Pub/Sub 未开

2. 看到 These products are not found

原因:

  • Product ID 不一致(大小写不一致都不行)
  • Google Play 未发布(Draft 状态)
  • 未勾选国家/地区
  • Base Plan 没启用(must be Active)

所有东西都准备好了,结果还是查不出来产品,一定进去这个菜单开启bill

3. SDK 一直加载不到 Offerings

原因:

  • RevenueCat 未成功读取 Google Play
  • 服务账号 JSON 权限不足
  • App 没有开网络

八、测试订阅(免费)

  1. 在 Google Play → License Testing 添加 Gmail 测试账户
  2. 删掉 app
  3. 登录测试 Gmail
  4. 从 Closed Testing 下载你 app
  5. 购买会显示价格 0 或 $0.01

九、发布正式版本

当订阅正常工作 →

发布 app →

RevenueCat 负责自动验证所有付款 →

你只专注展示订阅 UI 和权益即可。

结语

接入 Google Play 的订阅最容易踩坑在:

  • API access 权限不完整
  • Service Account JSON 权限缺失
  • Google Play 本地化没填
  • Base plan 未激活
  • RevenueCat 未正确绑定应用
相关推荐
hunterandroid3 小时前
[Android 从零到一] ViewPager2 与 Fragment 生命周期协同:从预加载到状态一致性
android·前端
mmsx3 小时前
一个黑边 Bug 修了两版:自己算矩阵直接黑屏,借库重建只用了一行 setZoom
android·前端
枢影Kernel3 小时前
Android CLI 与 Android Skills 最佳实践:把 AI Agent 接入可验证的 Android 开发流程
android
Kapaseker4 小时前
没想到吧!Skill 也可以测试 — 小白都看得懂的 Skill 教程
android·人工智能·kotlin
我命由我123454 小时前
Android 开发问题:使用 AndroidTreeView 时,自定义视图无法撑满父容器
android·java·java-ee·kotlin·android studio·android-studio·android runtime
没文化的阿浩4 小时前
【MySQL】数据类型
android·mysql·adb
恋猫de小郭5 小时前
社区版 Dart macros?一个可以解决 JSON 序列化的Fluter “宏编程”第三方包
android·前端·flutter
mmsx5 小时前
Android Design 项目集合
android
启雀AI19 小时前
培训平台移动端离线学习方案设计与实现:视频缓存、断点续传与进度同步的工程实践
android·学习·缓存·音视频·企业lms
我命由我1234520 小时前
RxJava - 冷数据流与热数据流
android·java·java-ee·android studio·rxjava·android-studio·android runtime