通过 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 中处理多个订阅

检测当前订阅是不是为 Google Play 商店的试用版?

检测当前订阅是否在Google Play商店试用版中?

Android/Google Play:我真的需要我的 OWN 服务器来管理应用内计费订阅吗?

如何在 Google Play 开发者控制台中取消测试订阅