Android应用内购买,如何检查用户是否购买了一件商品

2024-03-09

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

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

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


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

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

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

--> 您可以要求用户动态更新 google play 版本。 Google 开发人员文档称,超过 90% 的设备使用 2.2 操作系统并安装了 Google Play 商店。我不能对 paypal 交易说任何话,因为我以前没有使用过它,但是使用 v3 的应用程序购买非常容易实现和理解支付流程。

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

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

1) 共享偏好:您可以使用共享偏好值来检查是否已购买。如果用户卸载了该应用程序,然后重新安装该应用程序,那么您可以检查用户是否已购买,此时您会发现该商品已购买。并且您必须管理用户才能访问您的应用程序数据。

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

or

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

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

EDIT:

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

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

如果您只是在共享首选项中保存一个标志,则任何具有 root 权限的用户 设备可以随意翻转标志并无需付费即可“订阅”。 所以你至少应该做一些混淆。这是一个样品方式 http://developer.android.com/google/play/licensing/adding-licensing.html#impl-Obfuscator去做 它。此外,还有一个API https://developers.google.com/android-publisher/v1/检查订阅状态,所以 您应该定期检查以确保订阅有效。

更多信息检查尼古拉·埃连科夫的回答 https://stackoverflow.com/questions/12270367/how-to-store-subscription-data-for-android-in-app-billing/12273593#12273593

应用内购买或 Paypal 哪种计费方式最好?

这取决于产品类型,

--> 在应用程序计费中:最适合谷歌的应用程序计费,

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

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

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

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

从 iPhone 应用程序购买实体产品,无需 Apple 在应用程序内购买 https://stackoverflow.com/questions/3355313/purchase-physical-product-from-iphone-app-without-apple-in-app-purchase/3355619#3355619

希望它能帮助你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android应用内购买,如何检查用户是否购买了一件商品 的相关文章

随机推荐

  • 如何在控制器中使用辅助函数?

    我在 app helper 文件中编写了一些函数 现在我需要在我的控制器中调用该函数 我如何在 CAKEPHP 中做到这一点 你不能 如果您的函数非常通用 可以在视图之外使用 请在中创建它们bootstrap php或在中创建自定义库 类l
  • 如何让我的Python代码运行得更快

    我正在研究循环多个 netcdf 文件 大 28G 的代码 netcdf 文件在整个域中具有多个 4D 变量 时间 东西 南北 高度 目标是循环这些文件并循环域中所有这些变量的每个位置 并将某些变量存储到一个大数组中 当文件丢失或不完整时
  • 如何从 Angular 规范触发输入 onchange

    我有一个input HTML File filed
  • 尽早设置日志记录:捕获导入期间发出的警告

    我希望所有警告都按照我希望处理日志的方式进行处理 即使这些是在导入库期间发出的 这意味着必须在导入库之前完成日志记录的配置 经过一段时间的搜索后 我认为在自定义中配置日志记录sitecustomize py可能是一个解决方案 But sit
  • 向 Citrix 会话发送消息

    我有在本地和 Citrix 会话上运行的程序 我需要以非常可靠的方式从本地运行的程序向 Citrix 会话上运行的程序发送一位消息 该客户端称为 MetaFrame 演示服务器客户端 到目前为止我想到了以下几种方法 使用 TCP IP 然而
  • sql server中日期时间的内部表示是什么?

    SQL Server 中存储的日期时间值的基础数据结构是什么 2000 和 2005 如果不同 即精确到字节表示 据推测 当您选择日期时间列时获得的默认表示形式是特定于区域性的值 可能会发生变化 也就是说 一些我们看不到的底层结构被格式化为
  • 如何使用 GetAsyncEnumerator 中止正在运行的 EF Core 查询?

    我正在使用 EF Core 5 0 并有以下代码 public async IAsyncEnumerable
  • 在哪里可以找到图片的 Instagram 媒体 ID

    我正在寻找MediaID已上传的 Instagram 图片 它应该看起来像 1234567894561231236 33215652 我发现最后一组整数是usersID 例如 这是直接图像的链接 但是我看不到mediaID以正确的格式 ht
  • ES6 中检查构造函数是否继承另一个构造函数

    我遇到一种情况 我需要检查构造函数 X 的原型链中是否有另一个构造函数 Y 或者是 Y 本身 最快的方法可能是 new X instanceof Y 在这种情况下 这不是一个选项 因为如果在没有有效参数的情况下实例化 相关构造函数可能会抛出
  • 如何使用谷歌性能工具

    我刚刚开始使用谷歌性能工具 google perftools and libgoogle perftools4ubuntu 中的软件包 我发誓我在谷歌上搜索了大约一天 但没有找到答案 问题是我没有通过 CPU 分析获得所有函数的结果 这是我
  • 如何创建一个动态导航栏,当您到达某个位置时它会跟随您

    我想创建一个类似于此网站的导航栏 http www mysupermarket co uk shelves top offers in asda html http www mysupermarket co uk shelves top o
  • 始终使用 Azure Key Vault SSMS 清除错误进行加密

    I m trying to setup a new Always Encrypted database using Azure Key Vault I have previously had this working In the SSMS
  • Hibernate慢sql未记录

    记录用 Hikari 包装的 sql 语句时出现问题 我有休眠属性 hibernate session events log LOG QUERIES SLOWER THAN MS 50 logging level org hibernate
  • Android ListView 与 SQLite

    我想刷新列表视图项目 这些项目是从 SQLite 数据库填充的 我的代码如下 public class Weeve extends Activity private String lv arr protected ListView CVie
  • 使用 google 登录进行身份验证时出现错误 12501

    我在用着谷歌登录服务 https developers google com identity sign in android start对使用我的应用程序的用户进行身份验证 当我刚刚请求电子邮件信息时 我得到了它的工作 GoogleSig
  • 如何检索实现自定义接口的所有类?

    我想要获得所有实现的类IFeature界面 Java Refelctions 似乎是一个可能的解决方案 但它并没有按照我想要的方式工作 IFeature feature new Landing Class c cls System out
  • 使用多个 jquery-ui 版本

    我们有两个使用 jQuery UI 的网站 其中一个网站包含另一个网站的一些内容 这些部分是基于 Jquery UI Accordion 构建的 但我无法加载两个版本的 UI 一个是 1 8 11 的自定义版本 另一个是完整版本 完整版本不
  • 使用JPA和JTA的单元测试代码

    我使用2个独立的数据库 所以我必须使用JTA来处理分布式事务 所以要么两个数据库都必须提交 要么都回滚 我使用开放的 JPA 和 JTA 现在使用 junit 对代码进行单元测试吗 当我尝试运行处理分布式交易的代码时 出现以下错误 我在此网
  • 如何在 Glide/Picasso/Ion 等占位符中加载 gif 图像

    无法找到在占位符中加载 gif 图像的完美解决方案 Glide with context load imageUrl asGif placeholder R drawable gifImage crossFade into imageVie
  • Android应用内购买,如何检查用户是否购买了一件商品

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