通过 Google Play 购买的每台设备订阅
Posted
技术标签:
【中文标题】通过 Google Play 购买的每台设备订阅【英文标题】:Per Device subscriptions for purchases through Google Play 【发布时间】:2013-03-31 01:49:45 【问题描述】:我想为将通过 Google Play 销售的应用设置基于订阅的计费方式。是否可以在不同的设备上向同一用户出售相同的订阅?因此,用户尝试使用该应用的每台设备都需要有效订阅?
我在想我可以将设备 ID 和用户 ID 存储在我自己的服务器上并通过这种方式对其进行身份验证,但是用户不能多次购买同一个订阅是否正确?那么,如果用户希望购买多个“许可证”,我是否需要一个基本相同的订阅池? Google Play Billing 可以原生处理这些吗?
谢谢
【问题讨论】:
我不这么认为。如果你想设置它,你必须在市场之外处理账单。同一用户(gmail 地址)不能在 android 市场上多次购买相同的东西是正确的。此外,如果您使用设备 ID 作为标识符,请注意它可能会在设备恢复出厂设置时更改。如果您打算继续使用此计费方案,请准备好与合法付款但被您的系统锁定的人打交道。 另请注意,如果您选择这种商业模式,很多人会使用您竞争对手的产品。 @Soriyyx 取决于所售应用/服务的类型。当然,在某些应用/服务中,每台设备的成本绝对有意义。你倾向于在盒子里思考。我假设你是一个新手程序员。 @FoamyGuy 如果设备恢复出厂设置,设备 ID 可能会发生变化,这就是为什么任何熟练的开发人员不使用设备 ID 而是使用 Wi-Fi 适配器的 MAC 地址的原因。 @AndroidDev mac地址...which can also be spoofed =) 【参考方案1】:Google 的文档最初似乎无法实现,但深入挖掘后,我发现了以下内容...
在 Google Play API 2.0 版中,您可以创建所谓的“非托管”产品类型,允许用户多次购买相同的东西。这似乎在 API 3.0 中部分消失了,尽管 Google 开发者控制台明确支持这一点。我认为它仍然受支持,因为使用 2.0 API 的应用程序仍然存在,而 Google 不能放弃对它的支持。
然而,在 3.0 中,“非托管”产品类型未在 API 文档中列出,但文档声明了以下关于为同一产品类型进行多次购买(一次性购买或订阅):
如果您使用的是版本 3 API,您还可以使用托管项目 在您的应用程序中。您通常会实现消费 可以多次购买的物品(例如游戏币、 燃料或魔法咒语)。被管理的项目一经购买,就不能 再次购买,直到您消费该项目,通过发送消费 向 Google Play 请求。要了解有关应用内商品消费的更多信息, 见消耗物品
http://developer.android.com/google/play/billing/api.html#consume
重要提示:不能使用订阅,这意味着如果您希望客户定期更新他们的许可证,您必须联系他们并告诉他们必须再次购买许可证。如果您的服务需要定期续订,那就不利了。
要获得您想要的东西,您需要一个后端服务器来处理设备注册并存储应用在购买时从 Google Play 收到的令牌。当用户想从另一台设备购买您的许可、功能、服务(或其他)时,另一台设备必须首先通过称为“消费”的过程向 Google Play 释放其对产品的“所有权”。它或多或少会像这样工作:
-
第一台设备进行购买并收到购买令牌
来自 Google Play 的字符串。
purchaseToken 与设备 ID 一起从应用程序发送到您的服务器并存储。
用户转至第二台设备并希望为该设备购买许可证。该应用首先需要访问您的服务器并获取purchaseToken(第一台设备上传的),然后使用consumePurchase 调用Google Play,释放用户对产品的“所有权”。
然后该应用会从 Google Play 购买新的许可证(或其他),获取新的 purchaseToken 并将其与设备 ID 一起存储在您的服务器上。
本质上,Google Play 不会跟踪哪个设备拥有该产品。它仅将 Google 帐户与所购买的产品相关联。由您的应用和服务器来管理许可证。
我发现您需要解决一个潜在问题。如果由于某种原因应用程序无法将 purchaseToken 发送回您的服务器(您的服务器已关闭,用户丢弃了他们的设备并损坏了它,您的应用程序在将令牌保存到设备上之前崩溃了,等等),那么您可能不会知道用户是否为服务付费。 Google 确实提供了一个服务器 API,可让您的后端服务器在 Google 的服务器上查询 Google Play 以获取有关购买的信息,但我不熟悉它,也没有它的局限性。
【讨论】:
【参考方案2】:您需要像对任何其他应用内商品一样实施应用内购买。
确保在开发控制台中创建项目时,它是非托管的,因为每个帐户只能购买一次托管项目。
当您收到购买非托管商品的确认信息时,将唯一 ID 等详细信息发送到您的服务器并将其存储在那里。
现在,每当您的应用启动时,请检查您的服务器是否是授权设备。如果不是,提示用户购买。如果是,让他们继续使用该应用程序。
这仅适用于您需要一次性付款的情况。如果您需要订阅,则必须一次性支付多次,因为订阅类似于托管购买,并且只能由任何帐户支付一次。
【讨论】:
以上是关于通过 Google Play 购买的每台设备订阅的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中测试 Google Play 计费订阅(非应用内购买)
检测当前订阅是不是为 Google Play 商店的试用版?