导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 的应用内购买

2013/12/5

适用于:仅限于 Windows Phone 8。

本主题包含以下各节。

Windows Phone 8 将介绍应用内购买,一种让您利用您的应用获得收益的新方法。通过应用内购买您可以出售应用中的数字内容。Windows Phone 8 提供一致的手机购物体验,并且会安全地处理个人信息,所有这些将有助于为消费者达到有信心的购物体验。作为应用开发人员,您将使用熟悉的 API,并且拥有可靠的付款、应用内产品管理工具和地理位置分散的服务,所有这些让您能够在应用中实现有意义的商务方案。其中的关系可以总结如下:

您提供:

  • 可以在您的应用中出售的产品

  • 清楚准确的产品信息

  • 从您的应用内发起购买的能力,即“购买按钮”

  • 产品交付和/或支持,又称为实现

Microsoft 提供:

  • 产品管理工具(通过 Windows Phone 开发人员中心)

  • 地理位置分散的服务

  • 在手机上跨所有应用的一致的用户购买体验

  • 在 190 个国家或地区向您支付的能力

  • 购买真实性凭证(通过安全收据)

以下关系图说明了与应用内购买相关联的操作以及所涉及到的各方。

Overview of In-App Purchase

上图中的每个流程都在以下列表中进行描述。

  • A) 提交应用:作为应用开发人员,您使用 开发人员中心 中的帐户将您的应用提交至 Windows Phone 商店。有关应用提交的更多信息,请参见了解应用和应用内产品提交

  • B) 提交产品列表:您也可以使用您在 开发人员中心 中的帐户,将您想在您的应用中出售的产品列表上载至 商店。在此过程中,您给每一件产品命名、给予说明、定价并定义可以出售它们的地方。然后您可以将每件产品与应用中的一个关联。请注意,您是在 开发人员中心 中定义产品,以便应用用户通过 商店 使用 Microsoft 商务平台买到它们。产品本身由您在您自己的服务器或基础结构上进行维护。它们并没有托管在 开发人员中心、商店 或任何其他 Microsoft 服务中。有关应用内产品提交的更多信息,请参见了解应用和应用内产品提交

  • C) 列出产品:使用在 Windows Phone 8 中可用的 应用内购买 API,您的应用可查询与应用相关联的产品列表。这为应用用户提供了从应用内购买这些产品的选项。

  • D) 购买产品:一旦发起购买,用户就会获得 Windows Phone 8 平台上的购买体验。购买完成后,您的应用可以通过启用某个定义的应用功能或从您的托管服务中下载一些数字内容来实现购买。我们相信,一个面向所有应用的一致而又安全的购买和支付机制有助于用户对该商业平台产生信赖。要了解关于我们所提供的用以在您的应用中启用应用内购买的 API 的更多信息,请参见 Windows Phone 8 的应用内购买 API 概述

  • E) 枚举许可证:当您的应用启动、恢复时,或在购买之后,您可以使用应用内购买 API 来枚举该用户所拥有的应用中产品的所有许可证。您可以利用该信息来确定该用户是否已获得许可的产品,或是否仍需要实现部分产品。

  • F) 获取收据:您可以检索用户所购买的所有产品的收据。收据是交易已发生的证明。收据也会包含数字签名,该签名可用于验证收据的完整性,确保它没有被篡改。

  • G) 发送许可证收据:如果实现购买需要新的数字内容,一般您可以通过您所拥有的或管理的服务下载该内容,然后将包含数字签名的购买收据传送给服务器。

  • H) 实现:从您的服务器上下载数字内容。

重要说明重要说明:

应用必须满足与使用应用内购买相关的多项要求,才能通过认证并有资格列在 Windows Phone 商店 中。有关更多信息,请参见 App policies for Windows Phone

术语

说明

产品

您想在应用中出售的任何内容。

耐用型

用户购买一次,然后由用户所有的产品。

可消耗型

是指一种可以购买、使用(消耗)和再度购买的产品。这种类型的产品在用户每次需要它并选择再次购买的时候都要被购买。

开发人员中心

您用于注册产品并将产品与您的应用关联的 Microsoft 网站。注册产品时,您要给它们命名、定价并定义可以购买它们的国家或地区。

目录或产品列表

与应用关联的产品的列表。通过 开发人员中心 中的面板定义此关联。

购买

指用户购买您的应用中的产品时发生的购买行为。

许可证

每件产品都有一个许可证。许可证定义产品类型、是否是活动产品以及产品的过期日期。

实现

将用户所购产品交给他们的过程。在应用中,它可以指任何内容,从充值金币,到下载新的游戏级别或解锁某个应用功能。

收据

购买的凭证。每次您的应用发起一项产品购买时,都可以从 Windows Phone 商店 服务中获取一张收据,证明发生了交易。

以下是您在生成应用内购买方案时需要考虑的指导列表。

许可证枚举和存储

许可是应用内购买的一个关键部分。通过检索许可信息,您的应用能够提供用户有使用哪些应用内产品的许可证的信息。这些产品可能是可消耗型或者是耐用型。在一些具体情况下,应对许可证信息进行验证,以确保用户获得相应体验和有权获取的应用内产品。在此过程中的任何错误都可能让用户失望,从而造成销量下降、差评以及您或您的应用的不良声誉。

  • 使用我们的许可证存储和枚举 API。我们优化了 CurrentApp.LicenseInformation 的内存、性能和安全性特性,使之可以在启动、激活和恢复时调用。因为许可证状态可以在应用不收到通知的情况下发生更改,所以您应该将此 API 作为了解用户当前所拥有的内容的主要事实来源,而不是将返回的许可证存储在您自己的本地存储中。

  • 保护您的可消耗型产品。我们提供关于购买的信息,而不提供可消耗型产品的状态信息。例如,如果某用户在您的应用中购买了一个价值 100 金币的包,那么您应该负责以安全的方式跟踪产品的使用情况,使用户始终能看到该产品的正确状态(例如,剩余的金币量)。恶意用户可能试图利用您的存储,人为地增加您所拥有的可消耗型产品的数量。应采取适当的安全机制来保护该数据。

测试您的应用内购买方案

应用内购买是基于服务器的商务方案。它依靠与 Microsoft 的后端服务的通信来列出产品、枚举许可证和处理购买。如果需要,它可能也要依靠您的服务器来交付已购买的应用内产品。移动部件有很多,而您对该进程每个方面的可用性、可靠性和稳定性的控制级别各不相同。为了确保您可以为客户提供一个可靠而又稳定的体验,您需要对您的应用内购买方案进行测试,这非常重要。我们建议您考虑以下方法在此领域内进行测试。

  • 对您的功能进行单元测试,并通过包装或填充来隔离 应用内购买 API。开发依赖于服务的应用时,重要的一点是要能够在无需访问活动运行服务的情况下测试应用(测试中的系统)。这么做很重要,原因有很多。测试中的系统是您的应用,而不是系统所依赖的服务。您也希望能够测试在现实世界中会出现的全部方案,而不是等待它们发生。因此,想办法隔离服务依赖性并用可预测的测试数据代替它是非常有价值和有效的方法。该方法的其他优点包括:执行功能检查的速度以及当现实世界中的服务不可用时进行测试的能力。例如,因为您没有连接到 Internet 服务,所以不会因为 Internet 连接的质量产生延迟。对于任何与商务方案相关的应用,您都应考虑将单元测试作为您的第一级测试。其目的不是为了替代端到端方案测试,而是通过早期的频繁测试降低成本、提高代码质量。有关单元测试的更多信息,请参见:

  • 使用 Beta 应用分发执行端到端的测试。当您准备好使用活动服务测试您的应用时,您应考虑先将您的应用作为 Beta 应用进行分发。在此 Beta 环境中,您可以完全控制哪些人能够下载和运行应用。这样,您可以使用 Microsoft Live Commerce 服务和您自己的后端服务器,在实际手机上根据您的应用内产品目录测试应用。当应用内产品与 Beta 应用关联时,它被称为 Beta 项,它在活动 Windows Phone 商店 中既不可见,也不能出售。您可以在此私有环境中全方位地测试您的应用。虽然用户体验按 开发人员中心 中所输入的价格显示,但在 Beta 应用中进行的所有应用内购买都是免费的。Beta 用户可以通过卸载和重装应用来清除他们的许可证数据。

  • Windows Phone 模拟器 中本地测试您的应用时,所有应用内购买都是免费的。没有发生实际的商业交易。每次您在模拟器中重装应用时,许可证数据都会从模拟器中清除。

可以使用三种技术来测试应用内购买:

  • 创建 开发人员中心 Beta 应用并添加 Beta 应用内产品。

  • 将模拟应用内购买模拟库添加到您的解决方案。

  • 使用 Microsoft Internet 信息服务 (IIS) 来设置应用内购买模拟服务。

有关应用内购买测试的更多信息,请参见 Windows Phone 8 的应用内购买测试

实现购买

实现是确保您的客户及时获得所购商品的过程。就应用而言,这通常指一旦购买通过验证。因为许可证信息会在未向您的应用发出通知的情况下发生更改,因此当用户在多个手机上启动您的应用、从逻辑删除中恢复、使用快速应用程序切换或进行购买时,有必要验证当前的许可证状态。这是关乎于应用成败的关键部分。如果您不处理这些情况,用户在某些情况下会收不到他们所购买的商品。以下是一些与实现相关的指南,它们可帮助您避免糟糕的用户体验:

  • LicenseInformation.IsActive 通过验证许可证的有效性来为您提供保护,应该在实现购买前调用它。但是,此调用代价很大,不应该在应用启动或恢复时调用。尽可能在最后时刻调用它,避免阻塞 UI 线程。

  • 当您认为产品购买已完成时,首先要证实存在针对该产品 ID 的许可证,然后再检查该许可证上的 IsActive 是否为 true。 立即实现活动许可证。对于所有许可证而言,IsActive 应该总是为 true。如果您遇到 IsActive 为 false 的许可证,则说明用户安装了一个无效许可证。如果设备遭到黑客侵入,会发生此类情况。您应告诉用户,您无法验证此购买,他们需要与您联系才能验证购买。如果您的记录显示此购买有效,请联系 Microsoft 支持。

  • 出现问题时,最好尽力帮助用户。如果唯一可取的补救方法是联系您,那么请最好做到明白易懂,使用友好而又清楚的语言。下面是一个示例:

    “出现问题了,我们无法验证您的购买。请尝试重启您的应用,看看是否可以解决问题。如果不行,您可以联系我们:[email],让我们知道您购买的产品,我们将确定是哪里出现了问题。”

收据

收据记录商品购买情况。使用应用内购买进行的每一笔交易都有一个相关的收据,可以使用 GetProductReceiptAsync 方法进行检索。当您请求获取所购产品的收据时,会发送给您一份 XML 收据,内含以下信息。

字段

说明

Id

此购买的唯一交易 ID

AppId

为其购买了产品的应用的 ID

ProductId

您的应用内产品的唯一 ID

PurchasePrice

以用户的销售货币表示的价格

PurchaseDate

购买发生的日期

ProductType

产品是可消耗型还是耐用型

PublisherUserId

购买产品的用户的应用发布者的唯一 ID

PublisherDeviceId

执行购买的设备的应用发布者的唯一 ID

MicrosoftProductId

Microsoft 对此产品的内部跟踪 ID

收据也包含数字签名,该签名可用于验证收据的完整性,确保它没有被篡改。通过您的服务器实现耐用型产品时,始终随收据一起发送的还有用户 ID(您为购买该耐用型产品的用户而定义)。这应该通过安全的 HTTPS 连接进行发送。每次调用您的服务器时,您都应该向它传递一个密钥,以增加请求是从您的应用发出的可信度,这样做可以提高安全级别。采取这些预防措施可以降低您的产品的攻击面,让您能够随时随地实现您的用户的耐用型产品购买。

提示提示:

若要验证收据的真实性,您可以使用公共证书检查收据的签名。公共证书 (IapReceiptProduction.cer) 将作为应用内购买收据验证代码示例的一部分下载。

管理应用更新和版本控制

很有可能您在应用的生存期内要更新应用。从应用内购买的角度来看,在应用升级期间,维持用户所拥有的所有产品的状态是非常重要的。应用升级完成后,您需要检查所有的许可证并实现或重新配置所有已购产品。例如,如果用户购买了您的游戏的第 6 级,然后进行应用升级,则您需要在游戏启动时自动解锁游戏的第 6 级。Windows Phone 不支持还原可消耗型产品。管理可消耗型产品是您的责任,您需要确保在每次应用升级或重装后,每个可消耗型产品的状态都得到还原。

显示:
© 2014 Microsoft