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