16

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

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

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

4

4 回答 4

9

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

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

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

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

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

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

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

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

或者

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

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

编辑:

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

当我在互联网上搜索时,我找到了Nikolay Elenkov's如下答案:

如果您只是在共享首选项中保存一个标志,任何拥有根设备的用户都可以随意翻转标志并“订阅”而无需付费。所以你至少应该做一些混淆。这是一个示例方法。此外,还有一个用于检查订阅状态的API,因此您应该定期检查以确保订阅有效。

更多信息查看Nikolay Elenkov 的回答

什么是最适合在应用内购买或 Paypal 计费?

这取决于产品类型,

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

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

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

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

对于物理内容或产品,您想分享。您不得使用“应用内购买”销售实物商品或服务,因为通过此方法购买的商品必须与使用它们的应用直接相关。

从 iPhone 应用购买实体产品,无需 Apple 在应用内购买

希望它会帮助你。

于 2013-10-12T10:29:07.463 回答
4

从文档中:

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

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

于 2013-10-08T08:44:33.237 回答
1

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

** 事实上,用 bool 标明它是否是溢价是不好的 **。

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

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

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

于 2020-08-11T08:55:54.447 回答
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

于 2013-10-17T06:22:57.220 回答