Xamarin.iOS 中的应用内购买基础知识和配置
实现应用内购买需要应用程序利用设备上的 StoreKit API。 StoreKit 管理与 Apple iTunes 服务器的所有通信,以获取产品信息并执行交易。 必须配置预配配置文件才能进行应用内购买,并且必须在 iTunes Connect 中输入产品信息。
使用 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 提供银行和税务信息。 在此处显示的主菜单中单击“协议、税务和银行信息”:
开发人员帐户应具有有效的“iOS 付费应用程序”合同,如以下屏幕截图所示:
在拥有“iOS 付费应用程序合同”之前,无法测试任何 StoreKit 功能 - 在 Apple 处理完你的“合同、税务和银行信息”之前,代码中的 StoreKit 调用将会失败。
iOS 预配门户
在“iOS 预配门户”的“应用 ID”部分设置新应用程序。 若要创建新的应用 ID,请转到 iOS 预配门户的成员中心,导航到门户的“证书、标识符和配置文件”部分,然后单击“iOS 应用”下的“标识符”。 然后,单击右上角的“+”生成新的 App ID。
用于创建新应用 ID 的表单
如下所示:
为“说明”输入适合的内容,以便可以在列表中轻松识别此应用 ID。 对于“应用 ID 前缀”,请选择“团队 ID”。
捆绑标识符/应用 ID 后缀格式
你可以使用所需的任何字符串作为捆绑标识符(只要它在帐户中唯一即可),但 Apple 建议遵循反向 DNS 格式,而不要使用任意性的字符串。 本文附带的示例应用程序使用 com.xamarin.storekit.testing 作为捆绑标识符,但是使用 my_store_example 之类的标识符也同样有效(尽管 Apple 不建议使用)。
重要
Apple 还允许将星号通配符添加到捆绑标识符的末尾,以便单个应用 ID 可用于多个应用程序,但是通配符应用 ID 不可用于应用内购买。 com.xamarin.* 是通配符捆绑标识符的一个示例
启用应用服务
请注意,“应用内购买”将在服务列表中自动启用:
预配配置文件
像平常一样创建开发和生产预配配置文件,选择你为应用内购买设置的应用 ID。 有关详细信息,请参阅 iOS 设备预配和发布到 App Store 指南。
iTunes Connect
在 iTunes Connect 中单击“我的应用”以创建或编辑 iOS 应用程序条目。 应用程序概述页如下所示:
单击“应用内购买”以创建或编辑要销售的产品。 此屏幕截图显示了已添加多个产品的示例应用:
添加新产品的过程包括两个步骤:
每个应用内购买产品的必填字段如下所述:
引用名称
“参考名称”不会向用户显示;它仅供内部使用,并且仅出现在 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 不会向用户显示,而是用于在应用程序代码中引用产品。
产品类型
可以提供五种类型的应用内购买产品:
- 消耗品 – 可以“用完”的物品,例如可供玩家花费的游戏内货币。 如果用户进行备份/还原或以其他方式刷新其设备,则消耗品交易也不会还原(这实际上会再次为玩家带来相同的好处)。 应用程序代码必须确保在交易完成后立即提供“消耗品”。
- 非消耗品 – 用户购买后“拥有”的产品,例如数字杂志或游戏关卡。
- 可自动续订的订阅 – 如同现实世界中的杂志订阅一样,在订阅期结束时,Apple 会自动再次向客户收取费用并延长订阅期限,直至客户明确取消订阅。 这是 Newsstand 应用的首选付款方式(事实上,应用必须支持此付款方式才能获准进行 Newsstand 分发)。
- 免费订阅 – 只能在支持 Newsstand 的应用中提供,允许客户在其所有设备上访问订阅内容。 免费订阅永不过期。
- 不可续订的订阅 – 应该用于销售对静态内容的限时访问权限,例如一个月的照片存档访问权限。
本文档目前仅涵盖前两种产品类型(消耗品和非消耗品)。
价格层
App Store 不允许你为产品选择任意价格 - Apple 提供固定价格层供你选择。 每种货币的价格都是固定的,Apple 保留调整相对价格的权利(例如,在特定货币与美元之间的相对汇率持续变化后)。
Apple 提供了价格矩阵来帮助你为所需的货币/价格选择正确的层。 价格矩阵(2012 年 8 月)的摘录如下所示:
截至撰写本文时(2013 年 6 月),共有 87 个层,价格从 0.99 美元到 999.99 美元不等。 价格矩阵显示客户将要支付的价格以及从 Apple 收到的金额 - 此金额减去了 30% 费用以及他们需要收取的任何当地税费(请注意,在本示例中,美国和加拿大卖家对于 99 分钱的产品收到了 70 分钱,而澳大利亚卖家由于对销售价格征收“产品及服务税”,因而仅收到了 63 分钱)。
产品定价可以随时更新,包括在将来日期生效的计划价格变更。 此屏幕截图显示了如何添加将来日期的价格变更 - 仅 9 月份的价格暂时从第 1 层更改为第 3 层:
不支持免费产品
尽管 Apple 为 Newsstand 应用提供特殊的免费订阅选项,但无法为任何其他应用内购买类型设置零(免费)价格。 虽然你可以编辑(例如降低)促销价格,但无法通过 iTunes Connect 提供“免费”应用内购买。
本地化
在 iTunes Connect 中,可为任意数量的受支持语言输入不同的名称和说明文本。 可以通过弹出窗口添加/编辑每种语言:
在应用中显示产品信息时,可以通过 StoreKit 显示本地化的文本。 货币显示内容也必须本地化,以显示正确的符号和小数格式 - 本文档稍后将介绍该格式。
App Store 审查
与应用相同 - 每个产品在获准销售之前都要经过 Apple 审查。 产品可能会因名称或说明中的不当内容而被拒绝,或者 Apple 可能会判定你选择了错误的产品类型(例如,创建的是书籍或杂志期刊,但使用的是“消耗品”产品类型)。 产品审查时间可能与应用审查时间一样长。
首次提交支持应用内购买的应用(无论是新应用,还是将功能添加到现有应用)时,还必须选择一起提交某些产品。 iTunes Connect 门户将提示你执行此操作,如以下屏幕截图所示:
应用程序和应用内购买将一起审查,以便一次性对它们进行统一审批(这样应用就不会在没有任何批准产品的情况下进入 App Store!)。
在第一个支持应用内购买功能的版本获得批准后,你随时可以添加更多产品并提交以供审查。 还可以按照提示使用“版本详细信息”页,选择将新版本与特定的应用内购买产品一起提交。
有关详细信息,请参阅 App Store 审查准则。