Android In-App-Purchase,如何检查用户是否购买了一件商品

时间:2013-10-08 08:40:03

标签: android paypal in-app-purchase paypal-sandbox in-app-billing

是否可以安全地在SharedPreference中设置一个值来标记用户已购买此项?如果用户在SharedPreference中破解此值,该怎么办?或者我需要每次都连接IAP服务以检查用户是否可以使用它?

(1)使用Google Android IAP V3时的最佳做法是什么?

(2)如果用户的设备没有安装Google Play,我可能想使用paypal进行支付,但如果我要求用户使用简单的PayPal支付,如何跟踪购买并解锁用户的功能获得许可证密钥?我不想使用任何其他计费SDK,如果用Paypal网页购买许可证,如何实现呢?

4 个答案:

答案 0 :(得分:6)

(1)使用Google Android IAP V3时的最佳做法是什么?

- >官方文件说,只有支付交易将由谷歌播放本身处理,但在应用程序中,你必须设置你的业务逻辑如何处理产品购买后的UI集成和其他事情。您也可以使用应用内购买v3。

(2)如果用户的设备没有安装Google Play,我可能想使用paypal进行付款,但如果我要求用户使用,如何跟踪购买并解锁用户的功能简单的paypal付款获取许可证密钥?我不想使用任何其他计费SDK,如果用Paypal网页购买许可证,如何实现呢?

- >您可以要求用户动态更新Google Play版本。谷歌开发人员说,超过90%的设备使用安装了谷歌游戏商店的2.2操作系统。我不能说任何有关paypal交易的事情,因为我之前没有使用它,但使用v3购买应用程序是非常简单的实现和理解支付流程。

如何在您的应用中使用

  

管理应用程序产品数据的三种方法。

1)SharedPrefrence: 您可以使用共享优先级值并检查是否已购买。如果用户卸载了应用程序,然后重新安装应用程序,那么您可以检查用户是否已购买,此时您已经购买了该项目。您必须管理用户才能访问您的应用程序数据。

2)本地数据库: 您还可以使用本地sqlite数据库来存储购买详细信息和购买状态。如果用户清除数据或卸载应用程序然后再次请求购买项目并检查用户是否购买了项目,则与上述相同。

2)服务器数据库: 如果您使用Web服务器存储用户数据,则与上述方法相比,这是更好的方法。在这种类型中,如果用户卸载应用程序或清除应用程序数据,您甚至不需要第二次管理该案例。

3)混淆:(最有效的方式与共享优势相比)

修改

是否可以安全地在SharedPreference中设置一个值来标记用户已购买此商品?如果用户在SharedPreference中破解此值,该怎么办?或者我需要每次都连接IAP服务以检查用户是否可以使用它?

我在互联网上搜索时发现Nikolay Elenkov's答案如下:

  

如果您只是在共享偏好设置中保存标记,则任何具有root权限的用户   设备可以随意翻转旗帜,并且可以订阅'不用付钱。   所以你至少应该做一些混淆。这是sample way要做的事   它。此外,还有API来检查订阅状态,所以   您应该定期检查以确保订阅有效。

更多信息请查看Nikolay Elenkov's answer

什么是最适合结算的应用内购买或Paypal?

这取决于产品类型,

  

- > 应用内结算:最适合Google应用结算,

     

对于包括媒体等可下载内容的数字产品   文件或   照片,虚拟内容,如游戏关卡或药水,高级版   服务和功能等。

     

http://developer.android.com/google/play/billing/index.html

     

- > Paypal :最适合Paypal结算,

     

您想要分享物理内容或产品吗?你不是   允许使用“应用程序内购买”销售实体商品或服务。   因为通过这种方法购买的商品必须直接与商品有关   应用程序使用它们。

     

Purchase physical product from iPhone app without Apple in app purchase

希望它会对你有所帮助。

答案 1 :(得分:3)

来自文档:

  

因为Google Play客户端现在可以缓存应用内结算信息   在设备本地,您可以使用版本3 API来查询   信息更频繁,例如通过getPurchases调用。   与以前版本的API不同,许多版本3 API调用   将通过缓存查找而不是通过网络进行服务   与Google Play的连接,显着加快了API的速度   响应时间。

这基本上意味着您每次都可以查看购买,Play商店应用会立即响应。

答案 2 :(得分:1)

根据我的经验,我可以向您保证一件事。

**实际上,在带有bool的旗帜上标明是否值得**不好。

  • 我要做的是混淆共享代码
  • 创建了一些奇怪的字符串或数字后,如果用户是高级用户,则只能通过应用程序内的代码进行识别。
  • 与此有关,除了数据库中标识购买类型的数字代码外。因此,通过选中两者,我可以确保用户是高级用户。

在这一点上,如果他们想用手机的根作弊,那么他们应该首先了解我的应用代码的工作原理,然后了解在哪里进行交互,因为如果仅更改共享的首选项,则什么都不会改变,他们会被鞭打。

**这不会转换为高安全性,但是至少安全性级别更高,并且根用户将无法轻易获得奖励。同样是因为他们应该了解要在共享数据库中插入的确切代码是什么,并通过消除混淆来寻找它们。老实说,我认为这对他们来说不值得。 **

答案 3 :(得分:0)

正如Kuffs所提到的,最好查询应用内结算库的应用程序端实现,该库反过来查询设备的Google Play客户端。这将确保最近从Google Play服务器获取的购买历史记录是可靠且相对新鲜的信息。

此外,请注意,如果您要在Google Play上发布应用,则必须通过应用内结算使用Google Play付款机制。目前,Google Play和Wallet还不支持Paypal或有线/银行转帐方式,因此如果您要在Play上发布该选项,则不应集成该选项。

http://play.google.com/about/developer-content-policy.html#payments