EasyApp

RevenueCat 内购

了解如何集成 RevenueCat 内购服务

EasyApp 提供了 RevenueCat 作为订阅管理服务。RevenueCat 对比 StoreKit2 有以下优势:

对比维度RevenueCatStoreKit 2
跨平台支持✅ iOS、Android、Web 等多平台统一管理❌ 仅限苹果生态(iOS/macOS)
高级功能📊 数据分析、A/B 测试、Webhooks 等🛠️ 仅基础 API,高级功能需自主开发
兼容性📱 兼容 StoreKit 1 & 2,支持旧系统🍏 仅支持 iOS 15+/macOS 12+
丰富的付费墙🚀 可在 RevenueCat 中配置丰富的付费墙,无需重新审核发版🐢 付费墙 UI 需要修改重新发版审核
实时数据📊 内购实时数据同步📊 需要第二天才能在 App Store Connect 中查看

RevenueCat的收费也非常友好,只有您的 App 月收入达到 2500 美元,才会收取 1% 的手续费。在这之下,您可以免费使用。

以下内容直到 接入RevenueCat服务 都是跟StoreKit2 文档 一致的。如果您已经在StoreKit2 文档 中配置了内购,那么您可以直接跳到接入RevenueCat服务。

在集成内购之前,您必须拥有有效的 Apple 开发者计划会员资格,并已签署付费应用程序协议

business

友情提醒,App Store Connect 是有做国际化的,网页会根据您的浏览器语言来自动显示国际化内容。

我们的文档会以英文为主,但是您仍然可以根据文档中的截图找到对应的中文语言下的操作。

App Store Connect中文地址

在 App Store Connect 中添加内购

首先新建 App

在添加内购之前,您需要先创建您的 App,这是必须的。 我们登录到App Store Connect,点击顶部的"Apps",然后点击"+"按钮,创建您的 App。

addApps

在 New App 的弹窗中,您需要填写以下信息:

  1. Platform: 选择您的 App 的平台

您期望上架的 平台。选择 iOS, iPhone、iPad 都能下载(前提是您需要适配 iPad)

  1. App Name: 您的 App 名称

  2. Bundle ID: 您的 App 的 Bundle ID

您可以下拉选择, 请选择跟 XCode 工程中 对应的 Bundle ID。 addNewApp1

  1. 填写 SKU 信息,(改信息仅对您自己可见) 可以填写 App 名称

  2. 权限选择: Full Access

  3. 点击 Create 按钮

续费订阅依赖订阅组,所以您需要先创建订阅组。

创建订阅组

  1. 选择左侧Subscriptions,点击Create按钮以新建订阅组

addSubscriptionsGroup

  1. 填写您的订阅组名称,大多都是ProPlusVIPPremiumUnlimited 等名称。然后点击Create按钮

addSubscriptionsGroupName

  1. 填写订阅组国际化信息, 我们就以英文/中文为例, 填写英文的订阅组名称, 以及订阅组描述。

SubInt

订阅组国际化信息,AppStore 中会自定根据用户所在地区,显示对应的语言。

以下这张图片展示的就是 订阅组 相关信息 AppStoreIntl

  • 第一步:本地化:选择对应的语言
  • 第二步:填写订阅组名称
  • 第三步:App Name Display Options 选择: Use Custom Name, 因为你后续可能会修改 App 名称,所以这里选择 Use Custom Name
  • 第四步:Create 保存 addAppStoreLocal

以 中文 为例

addAppStoreLocal_CN

创建完成之后,您可以在这里查看和管理国际化信息

viewAppStoreLocal

在订阅组下创建订阅

大多数情况下,我们创建的订阅都是续费订阅,也就是常见的年度订阅(年付/会员),月度订阅(月付/会员)、或者周订阅(周付/会员)。

那么我们就以年度订阅、月度订阅举例,同样的,您可以创建周订阅。步骤都是一样的

创建年度订阅

1. 创建订阅类型

createSu

接下来,系统会要求您提供一个参考名称和产品 ID

我们有必要对Reference Name和Product ID 进行解释,方便您更好的理解 App Store Connect 相关知识

  • Reference Name: Reference Name将用于 App Store Connect 及苹果的销售与趋势报告,但不会在 App Store 中向用户显示。建议使用易于理解的产品描述作为名称,且长度不得超过 64 个字符。

  • Product ID: 产品 ID 是一个唯一的字母数字标识符,用于在开发中访问您的产品并与 RevenueCat 同步。当您在 App Store Connect 中将某个产品 ID 用于一个产品后,即使该产品被删除,该 ID 也不能再用于您的任何其他应用。建议从一开始就保持条理性——我们推荐在所有产品标识符中使用统一的命名方案,例如:

<app>_<price>_<duration>_<intro duration><intro price>

针对上面的规范我们进一步解释:

  • app(应用前缀):这是专属于您应用的唯一前缀,因为同一产品 ID 不能用于您未来创建的任何其他应用。
  • price(价格):您计划以默认货币对该产品收取的费用。
  • duration(订阅时长): 常规订阅周期的持续时间。
  • intro duration(试用期时长): 如有试用期,则表示试用期的持续时间。
  • intro price(试用价格):如有试用期,则表示默认货币下的试用价格。

在本例中,我想设置一个年费订阅,价格为 69 美元。按照这种格式,我将产品标识符设置为: easyappswiftui_69_1y

CreateSubscription2

在 App Store Connect 中对产品标识符使用一致的命名方案,可以为您将来节省时间,并仅通过标识符就能更轻松地组织和理解您的产品。

2. 设置订阅时长

在上一步点击 Save 后,我们要来设置订阅时长。年度会员,我们就选择 1 年 有效期

然后在设置Availability

Availability 就是 选择您的订阅服务在哪些国家/地区生效。

SubscriptionDuration

我们当然希望所有的国家/地区都能使用我们的订阅服务,所以这里就默认勾选全部。

点击Save按钮保存

CountryorRegionAvailability

3. 设置订阅价格

滚动网页找到Subscription Prices, 点击Add Subscription Prices按钮,来设置订阅价格

SubscriptionPrices

在 弹窗中,我们要设置 2 处 信息

  • 第一处: 选择 国家/地区
  • 第二处: 选择 价格

SetSubscriptionPrices

国家 我们首选选择 美国,以美元来结算

价格 我们选择 69 美元

如果您想找到更多的价格选择,就点击See Additional Prices按钮,选择您期望的价格

SetSubscriptionPrices2

然后点击Next按钮

PricebyCountryorRegion

接下来,您会看到另外一个弹窗

在这个弹窗中,您可以根据国家/地区,来设置不同的价格。比如我对中国大陆地区设置为 ¥128 人民币

PricebyCountryorRegion2

同样的,您也可以点击See Additional Prices按钮,选择您期望的价格

这里,App Store Connect非常贴心, 会根据您设置的美元价格,结合当前汇率,自动计算出其他国家/地区的对应价格。

设置完成之后,点击Next按钮、点击Confirm按钮

4. 设置订阅国际化信息

接下来需要设置的是 App Store 的本地化信息。这些是用户将看到的应用内购买名称和描述。

接着向下滚动网页,找到Localization, 点击Add Localization按钮

Localization

我们需要提供订阅显示名称和描述, 订阅显示名称和描述将在 App Store 及用户的订阅管理设置中显示。

拿我们刚才创建的 年度订阅 为例: 我们的订阅名称就是 Annual Subscription , 订阅描述就是 Unlimited access unlocks all features

在文档中,我们以 英文 和 中文 为例

首先 设置 英文 的 订阅显示名称和描述

填好之后,点击Add按钮

AddAppStoreLocalization

再来设置 中文 的 订阅显示名称和描述

  • 选择中文
  • 订阅显示名称: 年度订阅
  • 订阅描述: 解锁所有高级功能

AddAppStoreLocalizationCN

填好之后,点击Add按钮

创建完成之后,您可以在这里查看和管理国际化信息

AddAppStoreLocalizationList

5. 添加审核信息

继续向下滚动网页,找到Review Information

在 iOS 中设置应用内购买的最后一步是为审核人员添加信息。这包括一张截图和可选的审核备注。开发者常常会忽略截图,但没有截图就无法提交产品进行审核。

  • Screenshot:供审核人员查看的应用内购买付费墙。测试期间,可在此处上传任意内容的 640×920 空白图片。提交审核前,请务必替换为实际付费墙界面图片。
  • Review Notes:这是一个可选项,用于向审核人员说明与应用内购买相关的任何事项。(大多数情况下不需要填写)

ReviewInformation

在测试期间, 您可以下载这张图片,上传上去作为占位图。提交审核前,请务必替换为实际付费墙图片。

Review1

设置完成之后,点击右上角Save按钮保存,到此年度订阅创建完成。

接下来,我们按照创建年底订阅的步骤,来创建月度订阅。

创建月度订阅

我们回到订阅组预览页面,点击Subscriptions + 按钮,来创建月度订阅 addMoreSubs

此时的步骤,就完全跟创建年度订阅一样了。

您可以参考创建年度订阅的步骤来创建月度订阅

当然您也可以完全创建周订阅、季度订阅、半年订阅。 它们的步骤都是一样的。

记得要在这里选择正确的订阅时长哦😄 SubTime

如果整个过程您都顺利完成,那么您应该会看到如下页面。您创建的所有订阅,都会在这里显示。

SubscriptionsList

如果您想修改订阅信息,可以点击订阅名称,进入订阅详情页面。然后修改您期望的信息即可。

editSubs

我们不能修改订阅的Product ID,即使该产品被删除,该 ID 也不能再用于您的任何其他应用, 这个是获取订阅信息的唯一标识符。如果您拿不准,请参考这里中的Product ID说明。

创建一次性购买(终身会员)

创建一次性购买的操作不依赖于订阅组。我们回到预览 App 的首页,点击In-App Purchases,点击Create按钮,来创建一次性购买 InAppPurchases

在弹窗中我们需要填入以下信息: CreateanIn-AppPurchase

  • Type: 选择Non-Consumable, 代表 非消耗型商品

举个例子来帮您理解: 非消耗型商品 可以这么理解:比如我们开发识别图片的 App,用户的购买终身会员之后,可以永久使用该功能。 没有次数限制, 没有时间限制。

消耗型商品:比如我们设定用户可以购买 100 次识别机会,那么用户购买后,可以永久使用该功能。 但是次数用完之后,用户需要再次购买。

  • Reference NameProduct ID 的填写,跟创建年度订阅中的Reference NameProduct ID的填写规则是一样的。

  • 点击Create按钮, 创建一次性购买,进入到 一次性购买 的详情页面

同样的我们需要根据创建年度订阅的规则来设置一次性购买的AvailabilityPrice ScheduleApp Store LocalizationReview Information

lifetimePrice

最后不要忘记点击右上角Save按钮保存

成功之后,您可以在这里查看和管理一次性购买 lifetimeSuccess

恭喜您🎉🎉🎉,到这里,您已经完成了 App Store Connect 中订阅内购和一次性购买的创建。

接下来,我们再来注册RevenueCat账号(如果您还没有的话)。

接入RevenueCat服务

注册RevenueCat账号

RevenueCat的注册账户非常简单,您只需要按照注册流程正确填写您的信息即可。这里不在详细介绍。

我们将会重点介绍如何接入RevenueCat服务。

经过常规注册之后,您会看到下面这个页面:

LetsGetStarted

RevenueCat的注册引导流程做的非常友好,从这里开始,需要您跟着下面的步骤一步步来。您会非常快速的完成RevenueCat的接入。

  • 选择 Apple platform
  • 点击 Get Started

点击 Go To Team Keys 按钮, 我们会直接进入到App Store Connect 的 Team Keys 页面 GotoTeamKeys

设置 Team Keys

点击加号按钮, 来创建新的 Team Key addTeamKeys

在弹窗中,填写以下信息:

  • Name: 填写您的 Team Key 名称, 为了您更好区分 Name,推荐使用 您的 App 名称 + RevenueCat 的组合
  • Access: 选择 App Manager

addTeamKeys2

下载 p8 私钥文件

  • 完成之后,您需要点击Download按钮,来下载刚刚创建的私钥文件。 downloadTeamKey

注意:该文件仅允许下载一次,请妥善保管。如果您不小心丢失,请按照上述流程重新创建一个新的 Team Key。

上传 p8 私钥文件

  • 回到RevenueCat的页面,我们上传刚刚下载的私钥文件

uploadTeamKey

设置 Issuer ID

上传成功之后,您需要填写Issuer ID

uploadedKeys

Issuer ID 的获取方式:

回到刚才的App Store Connect 的 Team Keys 页面,您可以看到Issuer ID

getIssuerId

点击Copy按钮之后,粘贴到 RevenueCat 的页面中,然后点击Validate Keys按钮等待校验结果。

paseIssuserId

选择要集成的 App

校验完成之后,我们需要选择要集成的 App, 点击Next Step按钮

nameofproject

应用内购买配置

紧接上一步,来到这个页面,点击Go to In-App Purchase Keys按钮, 会自动跳转到 App Store Connect 的 In-App Purchase Keys 页面

InAppConfReven

点击+按钮, 来创建新的 In-App Purchase Key

p8In-AppPurchase

在弹窗中,我们输入 Key的名称,为了您更好区分 Key,推荐使用 您的 App 名称 + RevenueCat + Key 的组合

注意:Name不能太长,不然 Apple 的接口会报错 😂 GenerateIn-AppPurchaseKeyError

点击Generate按钮 GenerateIn-AppPurchaseKey

成功之后,您会在这里看到您刚刚创建的 Key,并且点击下载 downloadInAppPur

注意:该文件仅允许下载一次,请妥善保管。如果您不小心丢失,请按照上述流程重新创建一个新的 Key。

下载成功之后,回到 RevenueCat 的页面,在上传区域上传刚刚下载的p8私钥文件。其中Key IDIssuer ID 会自动填充

点击Next按钮

uploadInAppPur

RevenueCat会从App Store Connect中获取您的应用内购买信息,你会看到如下页面: Defineyourproducts

我们就用默认选中的Premium就行,它包含了我们创建的月度订阅、年度订阅、一次性购买等所有订阅。

点击Next按钮

到这里,您已经完成了RevenueCat的接入🎉🎉。

进下来,我们可以感受下RevenueCat设置内购页面的方便之处。(当然,您也可以跳过这一步,直接去 RevenueCat Dashboard 页面, 点击 Explore the Dashboard 区域,进入 Dashboard 页面)

WelcometoRevenueCat

设置付费墙

点击New paywall按钮

newPaywall

在弹窗中,Offering选择default即可。RevenueCat 会为我们创建一个名为defaultOffering

您可以在这里看到超多付费墙的样式,(当然您也可以完全从 0 开始创建一款自己喜欢的付费墙样式)

paywalls

滚动到页面最下方,我们选中带有隐私协议和服务条款的付费墙样式进行编辑

selectPaywall

非常重要: 根据 App Store 审核指南要求,为了不被拒审,建议您在内购页面添加您的隐私协议和服务条款。

  • 进入付费墙编辑页面,设置我们的付费墙名字

setPaywallname

  • 用同样的方式分别设置您的隐私协议和服务条款

yourprivacypolicyur

  • 我们发现这个付费墙样式,没有 终身会员 的选项,我们可以复制一个付费墙样式,然后进行编辑

duplicatePackage

选中Package 区域,拉下选中Lifetime选项

lifetimePackage

然后再修改 文案即可

lifetimeLabel

除此之外,您还可以编辑更多内购样式/信息, 也可以修改更多价格参数,详情参考变量

  • 最后,发布我们的付费墙,成功之后,退出编辑页面

publishPaywall

如果您一切顺利,您会看到如下页面

paywallSuccess

关于更多RevenueCat相关知识,请参考RevenueCat 文档

配置RevenueCat的apiKey 和 entitlementID

  • 获取 apiKey

点击左侧栏的API Keys, 然后点击Show Key getRevenApiKey

点击Copy按钮,复制 apiKey,粘贴到您的项目中

  • 获取 entitlementID

点击左侧栏的Products catalog, 然后点击Entitlements, 然后复制Identifier , 粘贴到您的项目中

getentitlementID

回顾下,我们需要在哪里配置RevenueCat的apiKey和entitlementID?

EasyAppSwiftUI/Constants/Constants.swift
enum Constants {

	//  ... 其他配置

	enum RevenueCat {
		///  The API key for your app from the RevenueCat dashboard: https://app.revenuecat.com
		static let apiKey = "your revenuecat api key"

		/// The entitlement ID from the RevenueCat dashboard that is activated upon successful in-app purchase for the duration of the purchase.
		static let entitlementID = "your revenuecat entitlement id"

		// Proxies & configuration for users in Mainland China
		// https://www.revenuecat.com/docs/getting-started/configuring-sdk
		static let ChinaProxyURL = "https://api.rc-backup.com/"
	}

	// ... 其他配置
}

恭喜您🎉🎉🎉,到这里,您已经完成了RevenueCat的接入。

接下来,我们需要检验下我们的成果。

友情提醒:如果您跳过了注册指引,请参考以下步骤接入RevenueCat服务

测试内购

在开发阶段,内购都是在沙盒中进行测试的。进行购买时,不会真正扣费。

请使用真机进行测试,不要使用模拟器。

  • 首先我们需要在 App Store Connect 的 Users and Access 创建一个沙盒测试账号

如果您已经有测试账号按照如下图所示:

addSandboxTestAcc

点击+按钮, 来创建一个沙盒测试账号,

如果您没有测试账号, 第一次创建,请按照如下图所示:

addSandboxTestAcc2

在后续弹窗中输入您的测试账号相关信息,然后点击Create按钮保存即可。

addSandboxTestAcc3

  • 真机运行App,内购测试

如何实时查看订阅数据呢?

回到RevenueCat的Dashboard页面, 您可以看到您的所有订阅信息。

沙盒环境下,您需要打开Sandbox data 开关。

paySuccess

Next Steps

最后强烈建议您查看App Store Connect Help 文档(App Store Connect Help中文地址)、RevenueCat 文档 来学习更多关于 内购 的知识。

Last updated on