Google Play应用内付费知识点
Google Play应用内付费的一些术语
- 应用与Google play进行IPC通信,负责购买请求和结果响应
- 要完成应用内购买请求,Google Play 应用必须能够通过网络访问 Google Play 服务器
- 使用 Google Play Developer Console 定义商品,包括商品类型、SKU、价格、说明,等等
- 托管和未托管,托管是指谷歌负责记录商品的购买情况,并可查询,即使卸载/更换设备;在版本 3 中,所有应用内商品均是托管的
- 消耗托管商品,托管商品被购买,消耗商品是需要给谷歌服务器发送消耗请求,才能进行下次购买
- 订阅,按年或按月定期向用户收费,与应用内商品不同,订阅无法消耗。
- 非消耗型和消耗型应用内商品
购买商品
图 1. 购买请求的基本顺序。
Version 3 API 中的典型购买流程如下所示:
- 您的应用向 Google Play 发送 isBillingSupported 请求,以确定您当前使用的 In-app Billing API 目标版本是否受支持。
- 当您的应用启动或用户登录时,最好向 Google Play 进行查询,确定该用户拥有哪些商品。 要查询用户的应用内购买,请发送 getPurchases 请求。 如果请求成功,Google Play 会返回一个 Bundle,其中包含所购商品的商品 ID 列表、各项购买详情的列表以及购买签名的列表。
- 通常情况下,您需要将可供购买的商品通知用户。 要查询您在 Google Play 中定义的应用内商品的详细信息,应用可以发送 getSkuDetails 请求。 您必须在查询请求中指定商品 ID 列表。如果该请求成功,Google Play 会返回一个包含产品详情(包括商品的价格、标题、说明和购买类型)的 Bundle。
-
如果用户还未拥有某种应用内商品,您可以提示购买。 为了发起购买请求,您的应用会发送 getBuyIntent 请求,指定要购买商品的商品 ID 以及其他参数。 当您在 Developer Console 中创建新的应用内商品时,应记录其商品 ID。
- Google Play 返回的 Bundle 中包含 PendingIntent,您的应用可用它来启动购买结账 UI。
- 您的应用通过调用 startIntentSenderForResult 方法启动待定 Intent。
- 结账流程结束后(即用户成功购买商品或取消购买),Google Play 会向您的 onActivityResult 方法发送响应 Intent。 onActivityResult 的结果代码中有一个代码将用于表明购买是成功还是已取消。 响应 Intent 中包含所购商品的相关信息,包括 Google Play 为了对此次购买交易进行唯一标识而生成的 purchaseToken 字符串。 Intent 中还包含使用您的开发者私钥签署的购买签名。
消耗应用内商品
您可以使用消耗机制跟踪用户对应用内商品的所有权。
在版本 3 中,所有应用内商品均是托管的。这意味着用户对所购全部应用内商品的所有权均由 Google Play 进行维护,您的应用可以在需要时查询用户的购买信息。 当用户成功购买应用内商品后,此次购买就会记录在 Google Play 中。 应用内商品一经购买,就会被视为“被拥有”。 状态为“被拥有”的应用内商品无法再通过 Google Play 购买。 您必须对“被拥有”的应用内商品发送消耗请求,然后 Google Play 才能允许再次购买。 消耗应用内商品会将商品切换回“未被拥有”状态,并舍弃之前的购买数据。
图 2. 消耗请求的基本顺序。
为了检索用户所拥有的商品列表,您的应用会向 Google Play 发送 getPurchases 调用。 您的应用可以通过发送 consumePurchase 调用发起消耗请求。 在请求参数中,您必须指定应用内商品的唯一 purchaseToken 字符串,此字符串在商品售出时由 Google Play 指定。 Google Play 会返回一个状态代码,指明此次消耗是否已成功记录。
非消耗型和消耗型应用内商品
您需要决定是要将您的应用内商品作为非消耗型商品还是消耗型商品进行处理。
- 非消耗型商品
- 通常情况下,对于在应用内购买一次就能永久使用的应用内商品,您无需实现消耗。 这些商品在购买后将永久与用户的 Google 帐户相关联。 高级版升级和关卡包就属于非消耗型应用内商品。
- 消耗型商品
- 相反,对于可多次购买的商品,您可以实现消耗。 通常情况下,这类商品提供某些临时效果。 例如,用户在游戏中的角色可以从自己的库存中获得生命值或额外的金币。 在您的应用中分配所购商品的收益或效果称为配置应用内商品。 您负责控制和跟踪如何向用户配置应用内商品。
- 重要说明:您必须先向 Google Play 发送消耗请求,在收到表明此次消耗已成功记录的响应之后,才能在应用中配置消耗型应用内商品。
下面是购买消耗型应用内商品的基本流程:
- 调用 getBuyIntent 启动购买流程。
- 从 Google Play 接收表明购买是否成功完成的响应 Bundle。
- 如果购买成功,则通过调用 consumePurchase 消耗购买。
- 从 Google Play 接收表明消耗是否成功完成的响应代码。
- 如果消耗成功,则在您的应用中配置商品。
之后,当用户启动或登录到您的应用时,您应检查该用户是否拥有任何尚未消耗的消耗型应用内商品;如果有,请务必消耗并配置这些商品。 如果您在应用中实现消耗型应用内商品,则可以采用下面推荐的应用启动流程:
- 发送 getPurchases 请求,查询此用户拥有的应用内商品。
- 如果有任何消耗型应用内商品,请通过调用 consumePurchase 消耗这些商品。 必须执行这步操作,因为应用虽然可能已完成此消耗型商品的购买订单,但在其发送消耗请求之前仍有可能已停止运行或断开连接。
- 从 Google Play 接收表明消耗是否成功完成的响应代码。
- 如果消耗成功,则在您的应用中配置商品。
个人结论:购买后需要立即消费?