Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.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_Mobile_In App Purchase_Google Play_In App Billing - Fatal编程技术网

Android Google Play应用内付费提供免费项目

Android Google Play应用内付费提供免费项目,android,mobile,in-app-purchase,google-play,in-app-billing,Android,Mobile,In App Purchase,Google Play,In App Billing,我已经在谷歌Play商店发布了一个完全免费的应用程序 由于这个应用比我想象的更受欢迎,我决定在使用它之前锁定一些功能并要求应用内付费。不过,我希望所有现有用户都能继续免费享受这些高级功能 因此,我想到了以下几点: 免费上传带有应用内计费的版本,以便现有用户 将免费“购买”它 经过一定时间后,开始对物品收费,但自 现有用户已经拥有了他们不会拥有的高级物品 受伤了 有没有一种方法可以授予某些用户“免费”的项目?应用内计费文档中写道,所有应用内计费项目都必须有价格。谷歌没有直接的方法。您将有2个测

我已经在谷歌Play商店发布了一个完全免费的应用程序

由于这个应用比我想象的更受欢迎,我决定在使用它之前锁定一些功能并要求应用内付费。不过,我希望所有现有用户都能继续免费享受这些高级功能

因此,我想到了以下几点:

  • 免费上传带有应用内计费的版本,以便现有用户 将免费“购买”它
  • 经过一定时间后,开始对物品收费,但自 现有用户已经拥有了他们不会拥有的高级物品 受伤了

有没有一种方法可以授予某些用户“免费”的项目?应用内计费文档中写道,所有应用内计费项目都必须有价格。

谷歌没有直接的方法。您将有2个测试用例:-

  • 现有用户
  • 新用户 您必须在服务器上存储唯一的
    用户id
    ,当您在应用程序中实现应用程序时,将此用户id发送到服务器 案例1: 如果您的服务器与返回给您成功消息的id匹配,那么它将与现有数据库匹配

    案例2:- 对于具有此用户id的新用户,您的应用程序应将购买令牌发送到您的服务器进行验证,验证购买后,您的服务器应发送成功消息

    共同任务:- 当应用程序启动时,您应该始终调用restoreTransaction(),然后您将从google获得一个列表,其中包含有关已购买物品的信息,您将解锁该内容。
    确保您的应用程序中有服务器验证实施。

    以下是您如何在不使用服务器的情况下部分实现所需功能的方法:

  • 使用新版本更新应用程序,该版本将向SharedReferences写入唯一值。该值应该是设备唯一的ID的散列(或者至少是其他设备不会共享的ID)。该值应该相对唯一的原因是防止以后的用户共享该值。如果你想让它在重新安装后存活下来,你还可以将它写入用户外部内存的某个区域,该区域在安装应用程序时不会被删除

  • 请等待足够长的时间,以便您当前的大多数用户都已更新到新版本。在此过程中,此阶段的任何新用户也将在其SharedReference中获得唯一的价值

  • 发布一个新版本,该版本不写入唯一ID,并且仅当ID存在或用户已通过应用内计费支付时,才启用您想要收费的功能

  • 这并不完美,但至少可以让您当前的大多数用户继续访问这些功能

    我不知道这是否会违反你与Google Play的协议,你需要自己调查这个问题。你向现有用户免费展示了该应用程序,并且现在希望对其某些功能收费,这一事实可能被视为是一种误解,除非你在现有用户中注册,而且我刚才概述的方法不能保证所有现有用户都能成功获得访问权限

    请注意,在另一个答案中提交的需要使用您自己的服务器的方法似乎也存在这些问题,因为您需要发布一个新版本的应用程序,其中包含与您的服务器通信的代码,而且也没有办法强迫当前用户在特定的时间间隔内更新到新版本。否则,由于免费应用程序的用户通常不为开发人员所知,您将如何收集唯一标识服务器数据库中当前用户的ID

    一种更干净的方法是添加与现有功能紧密集成的新功能,使其更有价值,并使使用旧功能输入的任何内容更有价值。您可以继续免费提供现有功能,但对新功能收费

    通过采用这种方法,当前用户不会被剥夺功能,您还可以向当前用户(而不仅仅是新用户)收取增值功能的费用。使用这种方法不仅会让你的用户更满意,而且可能会给你带来更高的回报,因为你将拥有作为潜在付费客户的整个当前用户群


    此外,您可能会认为您的应用程序目前的受欢迎程度很可能是由于您现在想要收取的功能。因此,一旦这些功能不再免费,你可能无法吸引源源不断的新用户。

    虽然对于下载量巨大的应用程序来说不可行,但截至2016年1月,你可以每季度为每个应用程序授予多达500个促销代码。

    我发现这是一个非常古老的思路,公认的答案已经过时。现在有了一个正式的解决方案

    谷歌几年前就推出了,这正是你想要的。 您可以在游戏控制台上的
    应用程序->用户获取->促销
    下创建促销代码

    您可以使用促销向用户免费提供带有促销代码的付费应用或应用内产品。您可以创建促销活动来奖励忠诚的粉丝,获得新用户,并与以前的用户重新连接


    谢谢你的回答。我没有想过要保留一个唯一的用户id。这是一个好主意!然而,这对我来说并不是很有用,因为这个应用程序只是客户端,我现在没有时间实现服务器端。我接受你的回答,因为这是应该做的。对我来说,解决方案就是不向升级的用户收费,但下次,当他们在另一台设备上安装应用程序时,他们将被收费。您将如何检查用户是否升级了应用程序或重新安装,因为当用户升级任何应用程序时