EasyApp

StoreKit2 内购

了解如何集成 StoreKit2 内购

在 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 中订阅内购和一次性购买的创建。

在 EasyApp 中配置 StoreKit2

App Store Connect 中配置内购完成之后,需要您在 EasyApp 中配置 StoreKit2 的 productIDs。

打开 EasyAppSwiftUI/Constants/Constants.swift 文件, 找到 Constants -> StoreKit2 枚举, 配置您的 productIDs。

其中 productIDs 就是您在 App Store Connect 中配置的内购 productID。

storekit2Ids storekit2Ids2

EasyAppSwiftUI/Constants/Constants.swift
enum Constants {

	//  ... 其他配置

	/// StoreKit2 product IDs
	/// Enter the product ID from App Store Connect here
	enum StoreKit2 {
		static let productIDs = ["your product ids"]
	}

	// ... 其他配置
}

提醒

还有一个地方,非常容易出现错误,就是 App Store Connect 中配置的协议一定要是正确的。

xieyi 请务必保证截图中的【付费 App 协议】、【银行账号】、【报税表】等信息都是正确的,否则会导致审核失败。App 内购买对接失败。

测试内购

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

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

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

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

addSandboxTestAcc

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

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

addSandboxTestAcc2

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

addSandboxTestAcc3

  • 真机运行App,内购测试

    storekit2Preview1 storekit2Preview2 storekit2Preview3

提醒

我们只是配置完成了应用内购买的步骤,此时用户发生购买后并没有跟后端进行交互,比如更新用户会员状态、更新用户订阅信息等。您需要在 supabase 后端进行相应的处理。

关于这一部分,模板中用积分功能来实现了这一功能。推荐您后续如果有这方面业务需求,您可以参考模板中积分功能的实现。

Last updated on