【问题标题】:Android In-App-Purchase, how to check if user have purchased one itemAndroid In-App-Purchase,如何检查用户是否购买了一件商品
【发布时间】:2013-10-15 02:16:37
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为 SharedPreference 不是正确的方法,因为如果用户已经卸载应用程序然后重新安装它,您的 SharedPreference 值就会很清楚。您应该选择另一个选项,并请编辑您在问题中使用的应用内计费版本,以便任何人都可以根据它直接提供代码。

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


【解决方案1】:

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

--> 官方文档说只有支付交易会由google play自己处理,但是在应用程序中你必须设置你的业务逻辑你如何处理产品购买后的UI集成和其他事情。您也可以使用应用内购买 v3。

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

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

如何在您的应用程序中使用

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

1) 共享偏好: 您可以使用 share prefrence 值并检查是否已购买。如果万一用户卸载了应用程序然后重新安装了应用程序,那么您可以检查用户是否已购买,此时您会得到该项目已经购买。而且您必须管理用户以访问您的应用程序数据。

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

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

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

编辑:

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

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

如果您只是在共享首选项中保存一个标志,则任何拥有根 设备可以随意翻转标志,无需付费即可“订阅”。 所以你至少应该做一些混淆。这是一个sample way 做 它。此外,还有一个API 来检查订阅状态,所以 您应该定期检查以确保订阅有效。

更多信息查看Nikolay Elenkov's answer

在应用内购买或 Paypal 中哪个最适合计费?

这取决于产品类型,

--> 应用内计费:最适合谷歌应用内计费,

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

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

--> Paypal: 最适合 Paypal 计费,

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

Purchase physical product from iPhone app without Apple in app purchase

希望对您有所帮助。

【讨论】:

  • 在答案中编辑了最适合在应用购买或贝宝中使用的内容。
【解决方案2】:

来自文档:

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

这基本上意味着您每次都可以查找购买的内容,并且 Play 商店应用会立即做出响应。

【讨论】:

【解决方案3】:

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

** 实际上,用 bool 标记表示它是否是溢价是不好的 **。

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

此时如果他们想用手机的根目录欺骗我,他们应该首先了解我的应用程序的代码是如何工作的,然后了解在哪里进行交互,因为如果只是共享偏好发生变化,什么都不会改变,他们会被鞭打。

** 这并不能转化为高安全性,但至少安全级别更高,root 不会那么容易获得奖励。也因为他们应该了解在共享数据库中插入的确切代码是什么,并通过消除混淆来查找它们。老实说,我认为这对他们来说不值得。 **

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 2012-09-10
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多