Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过Google Play购买的每设备订阅_Android_In App Billing_Android Billing - Fatal编程技术网

Android 通过Google Play购买的每设备订阅

Android 通过Google Play购买的每设备订阅,android,in-app-billing,android-billing,Android,In App Billing,Android Billing,我想为将通过Google Play销售的应用程序设置基于订阅的计费。是否可以在不同的设备上向同一用户销售相同的订阅?因此,用户尝试在其上使用应用程序的每个设备都需要一个活动订阅 我想我可以将设备id和用户id存储在自己的服务器上,并以这种方式对其进行身份验证,但用户不能多次购买同一订阅是否正确?因此,如果用户希望购买多个“许可证”,我是否需要一个基本相同的订阅池?Google Play计费是否可以通过本地方式处理这些问题 谢谢您需要像对任何其他应用内项目一样实施应用内购买 确保在开发人员控制台中

我想为将通过Google Play销售的应用程序设置基于订阅的计费。是否可以在不同的设备上向同一用户销售相同的订阅?因此,用户尝试在其上使用应用程序的每个设备都需要一个活动订阅

我想我可以将设备id和用户id存储在自己的服务器上,并以这种方式对其进行身份验证,但用户不能多次购买同一订阅是否正确?因此,如果用户希望购买多个“许可证”,我是否需要一个基本相同的订阅池?Google Play计费是否可以通过本地方式处理这些问题


谢谢

您需要像对任何其他应用内项目一样实施应用内购买

确保在开发人员控制台中创建项目时,该项目处于非托管状态,因为每个帐户只能购买一次托管项目

当您收到购买非托管物品的确认时,请将诸如唯一ID之类的详细信息发送到服务器并存储在那里

现在,无论何时启动应用程序,都要检查服务器是否为授权设备。如果不是,则提示用户购买。如果是,让他们继续使用该应用程序


这只适用于需要一次性付款的情况。如果你需要订阅,你必须一次性支付多笔费用,因为订阅就像管理购买一样,任何账户只能支付一次。

谷歌的文档起初似乎无法实现这一点,但深入挖掘,我发现了以下几点

在Google Play API 2.0版中,您可以创建一种所谓的“非托管”产品类型,允许用户多次购买相同的产品。尽管Gooogle开发者控制台明确支持这一点,但在API 3.0中这似乎已经部分消失了。我认为它仍然受到支持,因为使用2.0API的应用程序仍然存在,而谷歌不能放弃对它的支持

但是,在3.0中,API文档中未列出“非托管”产品类型,但这些文档说明了对同一产品类型进行多次购买(一次性购买或订阅):

如果您使用的是版本3 API,则还可以使用托管项 在您的应用程序中。您通常会为以下对象实现消费: 可多次购买的物品(如游戏内货币、, 燃料或魔法咒语)。一旦购买了托管项目,就不能再购买 再次购买,直到您通过发送消费 请求谷歌播放。要了解更多关于应用内产品消费的信息, 参见消费项目

重要提示:无法使用订阅,这意味着如果您希望客户定期续订其许可证,您必须与他们联系,并告诉他们必须再次购买许可证。如果您的服务需要定期更新,这是一个缺点。

为了获得你想要的东西,你需要一个后端服务器来处理设备的注册,并存储应用程序在购买时从Google Play收到的代币。当用户想要从另一台设备购买您的许可证、功能、服务(或任何东西)时,另一台设备必须首先通过称为“消费”的过程,通过Google Play释放其对产品的“所有权”。它的工作原理大致如下:

  • 第一个设备进行购买并接收purchaseToken 来自Google Play的字符串
  • purchaseToken和设备ID将从应用程序发送到服务器并存储
  • 用户转到第二台设备并希望购买该设备的许可证。该应用程序首先需要转到您的服务器并获取purchaseToken(第一台设备上载的),然后通过ConsumerPurchase调用Google Play,从而从用户处释放产品的“所有权”
  • 然后,该应用程序从Google Play购买新的许可证(或任何东西),获得一个新的purchaseToken,并将其与设备ID一起存储在您的服务器上
  • 从本质上说,谷歌游戏不会跟踪哪个设备拥有该产品。它只将Google帐户与正在购买的产品关联。由您的应用程序和服务器来管理许可证


    我认为有一个潜在的问题需要解决。如果由于某种原因,应用程序无法将purchaseToken发送回您的服务器(您的服务器已关闭,用户丢弃了他们的设备并将其损坏,您的应用程序在将令牌保存到设备上之前崩溃,等等),则您可能不知道用户是否为服务付费。Google确实提供了一个服务器API,允许您的后端服务器在Google的服务器上查询Google Play以获取有关购买的信息,但我不熟悉它,也不熟悉它的局限性。

    我不这么认为。如果你想设置,你必须在市场之外处理账单。同样的用户(gmail地址)不能在Android市场上多次购买同一件东西,这是正确的吗。此外,如果您使用设备ID作为标识符,请注意,当设备出厂重置时,它可能会更改。如果您计划继续使用此计费方案,请准备好与合法付费并被您的系统锁定的人打交道。另外请注意,如果您选择此业务模式,许多人会使用您竞争对手的产品。@Soriyx取决于销售的应用程序/服务的类型。当然,在某些应用/服务中,每台设备的成本是绝对合理的。你倾向于在盒子里思考。我假设您是一名新手。@FoamyGuy如果设备出厂重置,设备ID可能会更改,这就是为什么任何熟练的开发人员都不使用设备ID,而是使用Wi-Fi适配器的MAC地址。@AndroidDev MAC地址…=)