即使用户重新安装后也限制 iOS 应用程序

2024-01-17

我创建了一个应用程序,在第一次启动时为用户提供 3 个硬币。
一旦用户用完 3 个硬币,他应该通过应用内购买购买无限的硬币。
问题是,如果用户不想购买无限的硬币,他可以删除该应用程序,重新安装该应用程序,然后他将再次拥有 3 个硬币。
他可以永远这样做,而无需购买应用内购买。

有没有一种简单的方法可以防止这种情况发生?即使删除了应用程序,我如何知道用户是否已经完成了应用程序内的硬币?


您可以用两种不同的方式处理这个问题。

方法一:将标识符存储在KeyChain中

  1. 首先检查来自的值keychain https://github.com/jrendel/SwiftKeychainWrapper如果用户已经安装 该应用程序是否在此设备上。
  2. 如果是第一次安装,则提供免费硬币并将用户 ID/标志存储在钥匙串中以识别将来的安装。

如果用户重置设备,您将丢失此钥匙串数据。

重置设备后,您将再次提供硬币,因为您的标志/标识符将不会出现在钥匙串中。

如果你想避免这种情况,那么你必须采用第二种方法。

方法2:在服务器上存储标识符

而不是将详细信息存储在设备钥匙串上。您必须将其保存在您的服务器上。应用程序首次启动时,您必须检查您的服务器以提供详细信息。

即使用户重置设备,这种方法也始终有效

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

即使用户重新安装后也限制 iOS 应用程序 的相关文章

随机推荐

  • 使用 CsvHelper、CsvReader.Read() 时如何忽略空格?

    使用 CsvHelper 库时 特别是CsvReader Read 函数 有没有办法忽略空白记录和 或空格 我需要退回原始数据string 但希望 我可以在解析库时执行一些清理功能 我检查过 Github 并CsvReader Read 似
  • 如何隐藏虚拟键盘

    我不想显示虚拟键盘 我尝试了下面的方法 但没有任何区别 InputMethodManager imm InputMethodManager getSystemService Context INPUT METHOD SERVICE imm
  • 无需使用 Google 帐户登录即可使用 Google Picker(使用 OAuth)

    是否可以介绍一下谷歌选择器 https developers google com picker 对于未使用其 Google 帐户登录的用户 我想让用户从我网站的 Google 帐户的共享 Google 云端硬盘中选择文件 我可以使用服务器
  • 在 html 输入日期时间本地选择器中禁用前一天的前一个时间

    我正在尝试找出解决方案来解决不允许用户选择上次的问题 我的意思是例如 今天的日期 17 02 2019当前时间 02 30 PM 因此 当用户选择今天的日期并选择时间 02 30 AM 而不是 PM 时 这里时间已经过去 因此不应允许用户选
  • 通过挂钩直接将击键发送到另一个进程

    我想知道 在摆弄了 SendInput SendKeys PostMessage SendMessage SendNotifyMessage keybd event 等各种问题之后 为了找到这一点 尝试将键盘输入发送到另一个非前台进程是非常
  • Django:对象和 model_set

    我正在学习 django 1 10 官方教程第 2 部分 class Question models Model class Choice models Model question models ForeignKey Question o
  • 将 swift 中的嵌套数组转换为一维数组

    我有一个像 我想转换成 E g Hi into Hi 我怎样才能在斯威夫特做到这一点 joined https developer apple com reference swift collection 2432330 joined返回串
  • 阿瓦杰·伊比恩. ManyToMany 延迟 BeanSet

    我正在编写小型应用程序 使用 Play Framework 2 0 它使用 Ebean 作为 ORM 所以我需要 User 类和 UserGroup 类之间的多对多关系 这是一些代码 Entity public class User ext
  • 如何在免安装应用中包含即时动态功能模块?

    我有一个包含这些模块的项目 app bookingfeature 即时启用 map 不是即时的 app包含一些通用代码和资源以及一个启动活动 其中包含一些逻辑 根据应用程序是否即时运行将应用程序路由到正确的目的地 bookingfeatur
  • 插入错误,“2”附近的语法不正确[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我试图将信息添加到表中 但它出现了错误的语法 这是我的插入语句 INSERT INTO Exercise 2 Exercise C
  • Windows Chrome + 黑十字

    我想知道在 Windows 上用 Chrome 运行一个非常简单的网站时是否有人对这个奇怪的问题有任何见解 我基本上将 5 个 div 堆叠在一起 如果窗口调整大小 我也会调整它们的大小 div div div div div div di
  • 在 Mongodb 上使用文本索引时出错

    我正在尝试在 Mongodb 上使用文本索引 我已经在一个集合上使用了文本索引 db ensureIndex field1 text 它有效 但我重试了另一个集合 并收到以下消息 db movies ensureIndex genres t
  • 为什么javac要创建一个额外的类? [复制]

    这个问题在这里已经有答案了 我编译了以下代码 为简洁起见 省略了方法和变量 Outer java public class Outer private class Inner void someMethod Inner inObj this
  • Node.js中的Ajax文件上传

    想要使用 ajax 上传文件 使用此上传器http valums com ajax upload http valums com ajax upload 并在 node js 中编写此代码 该代码可以在没有 ajax 的情况下处理正常文件上
  • 将日期代码添加到 matplotlib/python 图表

    我有一个听起来很简单的问题 但它让我发疯了好几天 我有一个历史时间序列 分为两个列表 第一个列表包含价格 假设 P 1 1 5 1 3 而第二个列表包含相关日期 假设 D 01 01 2010 02 01 2010 我想做的是绘制其中一些日
  • 如何通过索引获取字符串中的字符?

    我知道我可以使用以下命令返回字符串的特定字符的索引indexof 函数 但如何返回特定索引处的字符 string s hello char c s 1 now c e 也可以看看Substring 返回多个字符
  • Chrome:用于测试目的的假麦克风输入

    为了使用量角器进行测试 我需要在没有麦克风的计算机上模拟麦克风的音频输入 通过 use fake device for media stream 标志 Chrome 可以模拟假麦克风 然而 假麦克风没有输入 所以我的测试失败了 是否可以模拟
  • 从 MediaWiki 操作 URL 中删除 index.php

    好的 所以它相当有据可查 https stackoverflow com questions 6667847 mediawiki removing index php from url如何隐藏 url 中的 index php title
  • mysql 如果表存在则插入

    在我的项目中 我有两个在首次设置期间与 MySQL 交互的代码路径 第一步是数据库结构创建 在这里 用户可以选择他们想要的功能 并且根据用户的选择 某些表可能最终不会在数据库中创建 在第二部分中 我需要预加载以下表格did使用一些基本数据创
  • 即使用户重新安装后也限制 iOS 应用程序

    我创建了一个应用程序 在第一次启动时为用户提供 3 个硬币 一旦用户用完 3 个硬币 他应该通过应用内购买购买无限的硬币 问题是 如果用户不想购买无限的硬币 他可以删除该应用程序 重新安装该应用程序 然后他将再次拥有 3 个硬币 他可以永远