Xamarin.iOS 中的应用内购买基础知识和配置

实现应用内购买需要应用程序利用设备上的 StoreKit API。 StoreKit 管理与 Apple iTunes 服务器的所有通信,以获取产品信息并执行交易。 必须配置预配配置文件才能进行应用内购买,并且必须在 iTunes Connect 中输入产品信息。

StoreKit manages all communication with Apple’s as shown in this chart

使用 App Store 提供应用内购买需要进行以下设置和配置:

  • iTunes Connect – 配置要销售的产品,并设置沙盒用户帐户以测试购买。 还必须向 Apple 提供你的银行和税务信息,以便 Apple 能够代表你托收汇款。
  • iOS 预配门户 – 创建捆绑包标识符并为应用启用 App Store 访问
  • Store Kit – 向应用添加代码,用于显示产品、购买产品和还原交易。
  • 自定义代码 – 跟踪客户进行的购买,并提供他们购买的产品或服务。 如果产品包含从服务器下载的内容(例如书籍和杂志),则还可能需要实现服务器端流程来验证收据。

有两个 Store Kit“服务器环境”:

  • 生产 – 使用真实货币进行交易。 只能通过已提交的并由 Apple 批准的应用程序访问。 应用内购买产品还必须经过审查和批准才能在生产环境中使用。
  • 沙盒 – 进行测试的位置。 产品在创建后会立即在此处提供(审批流程仅适用于生产环境)。 沙盒中的交易需要测试用户(不是真正的 Apple ID)执行交易。

应用内购买规则

不能在应用内部接受其他形式的数字产品或服务付款方式,也不能在应用内提及或向用户推荐这些付款方式。 这意味着,当应用内购买是最合适的支付机制时,不能接受信用卡或 PayPal。 有一种特殊情况是在应用外部购买数字产品但在应用内部使用,例如在与特定“登录名”关联的网站上购买书籍,并在应用中使用该“登录名”让用户访问购买的书籍。 以这种方式运行的应用程序不得提及或链接到外部购买功能 - 开发人员必须以其他方式(可能是通过电子邮件营销或其他直接渠道)将此功能传达给用户。

但是,由于不能使用应用内购买来购买实物产品,在这种情况下,可以在应用内使用其他付款机制(例如信用卡、PayPal)。

每件产品在销售之前都必须经过 Apple 公司的批准 – 需要提供“产品”的名称、说明和屏幕截图以供审查。 产品审查时间与应用程序审查时间相同。

无法为产品选择任何价格 - 只能选择在 Apple 支持的每个国家/货币中具有特定值的“价格层”。 不能在不同的市场中有不同的价格层。

配置

在编写任何应用内购买代码之前,必须在 iTunes Connect (itunesconnect.apple.com) 和 iOS 预配门户 (developer.apple.com/iOS) 中完成一些设置工作。

在编写任何代码之前应完成这三个步骤:

  • Apple 开发人员帐户 – 向 Apple 提交银行和税务信息
  • iOS 预配门户 – 确保应用具有有效的应用 ID(不是带星号 * 的通配符)并且启用了应用内购买
  • iTunes Connect 应用程序管理 – 将产品添加到应用程序

Apple 开发人员帐户

生成和分发免费应用只需在 iTunes Connect 中完成极少量的配置,但要销售付费应用或进行应用内购买,需要向 Apple 提供银行和税务信息。 在此处显示的主菜单中单击“协议、税务和银行信息”

Click on Agreements, Tax and Banking from the main menu

开发人员帐户应具有有效的“iOS 付费应用程序”合同,如以下屏幕截图所示

Your Developer Account should have an iOS Paid Applications contract in effect

在拥有“iOS 付费应用程序合同”之前,无法测试任何 StoreKit 功能 - 在 Apple 处理完你的“合同、税务和银行信息”之前,代码中的 StoreKit 调用将会失败

iOS 预配门户

在“iOS 预配门户”的“应用 ID”部分设置新应用程序。 若要创建新的应用 ID,请转到 iOS 预配门户的成员中心,导航到门户的“证书、标识符和配置文件”部分,然后单击“iOS 应用”下的“标识符”。 然后,单击右上角的“+”生成新的 App ID。

用于创建新应用 ID 的表单

如下所示:

The form for creating new App IDs

为“说明”输入适合的内容,以便可以在列表中轻松识别此应用 ID。 对于“应用 ID 前缀”,请选择“团队 ID”

捆绑标识符/应用 ID 后缀格式

你可以使用所需的任何字符串作为捆绑标识符(只要它在帐户中唯一即可),但 Apple 建议遵循反向 DNS 格式,而不要使用任意性的字符串。 本文附带的示例应用程序使用 com.xamarin.storekit.testing 作为捆绑标识符,但是使用 my_store_example 之类的标识符也同样有效(尽管 Apple 不建议使用)。

重要

Apple 还允许将星号通配符添加到捆绑标识符的末尾,以便单个应用 ID 可用于多个应用程序,但是通配符应用 ID 不可用于应用内购买。 com.xamarin.* 是通配符捆绑标识符的一个示例

启用应用服务

请注意,“应用内购买”将在服务列表中自动启用

In-App Purchase will be automatically enabled in the Services list

预配配置文件

像平常一样创建开发和生产预配配置文件,选择你为应用内购买设置的应用 ID。 有关详细信息,请参阅 iOS 设备预配发布到 App Store 指南。

iTunes Connect

在 iTunes Connect 中单击“我的应用”以创建或编辑 iOS 应用程序条目。 应用程序概述页如下所示:

The application overview page

单击“应用内购买”以创建或编辑要销售的产品。 此屏幕截图显示了已添加多个产品的示例应用:

The sample app with several products already added

添加新产品的过程包括两个步骤:

  1. 选择产品类型:Choose the product type
  2. 输入产品属性,包括产品 ID、定价层和本地化的说明:Entering the products attributes

每个应用内购买产品的必填字段如下所述:

引用名称

“参考名称”不会向用户显示;它仅供内部使用,并且仅出现在 iTunes Connect 中。

产品 ID 格式

产品标识符只能包含字母数字 (AZ,az,0-9)、下划线 (_) 和句点 (.) 字符。 尽管可以使用任何字符串作为标识符,但 Apple 建议使用反向 DNS 格式。 例如,示例应用程序使用以下捆绑标识符:

com.xamarin.storekit.testing

因此,用于识别应用内购买产品的约定如下:

com.xamarin.storekit.testing.consume5credits
com.xamarin.storekit.testing.consume10credits
com.xamarin.storekit.testing.sepia
com.xamarin.storekit.testing.greyscale

此命名约定不是强制实施的,只是一条帮助你管理产品的建议。 此外,尽管遵循相同的反向 DNS 约定,但产品标识符与捆绑标识符不相关,并且不需要以相同的字符串开头。 使用 photo_product_greyscale 之类的标识符仍然是有效的(尽管 Apple 不建议使用)。

产品 ID 不会向用户显示,而是用于在应用程序代码中引用产品。

产品类型

可以提供五种类型的应用内购买产品:

  1. 消耗品 – 可以“用完”的物品,例如可供玩家花费的游戏内货币。 如果用户进行备份/还原或以其他方式刷新其设备,则消耗品交易也不会还原(这实际上会再次为玩家带来相同的好处)。 应用程序代码必须确保在交易完成后立即提供“消耗品”。
  2. 非消耗品 – 用户购买后“拥有”的产品,例如数字杂志或游戏关卡
  3. 可自动续订的订阅 – 如同现实世界中的杂志订阅一样,在订阅期结束时,Apple 会自动再次向客户收取费用并延长订阅期限,直至客户明确取消订阅。 这是 Newsstand 应用的首选付款方式(事实上,应用必须支持此付款方式才能获准进行 Newsstand 分发)。
  4. 免费订阅 – 只能在支持 Newsstand 的应用中提供,允许客户在其所有设备上访问订阅内容。 免费订阅永不过期。
  5. 不可续订的订阅 – 应该用于销售对静态内容的限时访问权限,例如一个月的照片存档访问权限

本文档目前仅涵盖前两种产品类型(消耗品和非消耗品)

价格层

App Store 不允许你为产品选择任意价格 - Apple 提供固定价格层供你选择。 每种货币的价格都是固定的,Apple 保留调整相对价格的权利(例如,在特定货币与美元之间的相对汇率持续变化后)。

Apple 提供了价格矩阵来帮助你为所需的货币/价格选择正确的层。 价格矩阵(2012 年 8 月)的摘录如下所示:

An excerpt of the price matrix August 2012

截至撰写本文时(2013 年 6 月),共有 87 个层,价格从 0.99 美元到 999.99 美元不等。 价格矩阵显示客户将要支付的价格以及从 Apple 收到的金额 - 此金额减去了 30% 费用以及他们需要收取的任何当地税费(请注意,在本示例中,美国和加拿大卖家对于 99 分钱的产品收到了 70 分钱,而澳大利亚卖家由于对销售价格征收“产品及服务税”,因而仅收到了 63 分钱)。

产品定价可以随时更新,包括在将来日期生效的计划价格变更。 此屏幕截图显示了如何添加将来日期的价格变更 - 仅 9 月份的价格暂时从第 1 层更改为第 3 层:

A future-dated price change where the price is being temporarily changed from tier 1 to tier 3 for the month of September only

不支持免费产品

尽管 Apple 为 Newsstand 应用提供特殊的免费订阅选项,但无法为任何其他应用内购买类型设置零(免费)价格。 虽然你可以编辑(例如降低)促销价格,但无法通过 iTunes Connect 提供“免费”应用内购买。

本地化

在 iTunes Connect 中,可为任意数量的受支持语言输入不同的名称和说明文本。 可以通过弹出窗口添加/编辑每种语言:

Each language can be added/edited in via a popup

在应用中显示产品信息时,可以通过 StoreKit 显示本地化的文本。 货币显示内容也必须本地化,以显示正确的符号和小数格式 - 本文档稍后将介绍该格式。

App Store 审查

与应用相同 - 每个产品在获准销售之前都要经过 Apple 审查。 产品可能会因名称或说明中的不当内容而被拒绝,或者 Apple 可能会判定你选择了错误的产品类型(例如,创建的是书籍或杂志期刊,但使用的是“消耗品”产品类型)。 产品审查时间可能与应用审查时间一样长。

首次提交支持应用内购买的应用(无论是新应用,还是将功能添加到现有应用)时,还必须选择一起提交某些产品。 iTunes Connect 门户将提示你执行此操作,如以下屏幕截图所示:

The iTunes Connect portal will prompt you to submit some products as well

应用程序和应用内购买将一起审查,以便一次性对它们进行统一审批(这样应用就不会在没有任何批准产品的情况下进入 App Store!)。

在第一个支持应用内购买功能的版本获得批准后,你随时可以添加更多产品并提交以供审查。 还可以按照提示使用“版本详细信息”页,选择将新版本与特定的应用内购买产品一起提交

有关详细信息,请参阅 App Store 审查准则

第 2 部分 - Store Kit 概述和检索产品信息