2012-07-19 96 views
2

问:
凡在iOS设备上可信息(只有几个字节,在我的情况下,仅1位)小片被保存,让他们保持可用后,应用程序会从手机中删除并重新安装以后再来?哪里应该持久数据存储在iOS?

背景:
我正在开发一个应用程序,它将免费进入appstore。与应用程序一起提供免费的测试包。此测试包可在有限时间内访问我服务器上的有限数量的项目。如果用户想要,他/她可以购买额外的包装以获得更多物品并且持续更长的时间。

要使用这个软件包,每个用户都必须在我的服务器上创建一个帐户。很容易确保每个账户只能使用一个免费套餐。但我没有看到让用户创建其他帐户的方式。所以我想要更多:

我想,每个用户(每个活人)只能使用一个免费软件包,独立于他/她将创建的帐户数目。

我知道,在用户(活人)的层面限制这一点是不可能的。但要在手机上对它进行回复是可以接受的,因为我相信,在同一时间没有多少人使用更多的2或3部iPhone。如果一个人在3种不同的iPhone上使用我的应用程序只是为了能够使用3个不同账户的3个免费套餐,那么这是我可以接受的。

但是为了做到这一点,我需要将信息存储在手机的某个地方,与应用一起交付的免费软件包已经在使用中。但是,当用户卸载应用程序并稍后重新安装应用程序时,该信息仍然必须可供应用程序使用。而且我不知道在从手机中删除应用程序后,这些微小的1位信息将保存在哪里。

你能帮忙吗?

+0

我不认为苹果会批准商店中应用的“有限时间功能”。无论您提供什么,它都应该是时间无限的。 – 2012-07-19 10:50:18

+0

@ranReloaded:应用程序的功能不受时间限制。免费套餐的有效性是有限的。付款的软件包也会有一个到期日期。另见我对rockoenes的回答的评论。 – 2012-07-19 11:08:41

回答

1

我刚刚找到答案:存储在钥匙扣中的数据将保留在那里,即使应用程序被删除并且可以在重新安装后从同一应用程序访问。这正是我需要的。
只有彻底重新安装固件才能删除条目,但这也会删除其他每个应用程序的其他条目。人们不会经常这样做,我认为这只是为了让我的应用获得额外的免费软件包而矫枉过正。这是我可以接受的。

Apple为keychain访问提供了一个示例应用程序。我没有详细阅读本例中,应用程序,但我舒尔它包含了我需要的一切:http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html


编辑:

存储信息的通用密码是最好的解决办法对我的问题,但苹果exam​​ple-app有一个错误。在这个bug中是一个用作存储通用密码的“唯一键”的错误属性。有关更多详情以及如何让keychain-items真正独一无二地看待这个问题:What makes a keychain item unique (in iOS)?

1

iOS中没有这样的地方可用。如果应用程序被删除,您可以使用KeyChain存储一些数据以保留。但是,如果用户清除设备,这些设置将会进行。

有没有办法做到这一点,使一个免费的应用程序不应该限制使用的时间,但更多的功能。

+1

该应用程序允许用户在我的服务器上存储有关书籍和其他媒体的数据。数十年来,我不想让我的服务器从数千个免费软件包中填充未使用的数据。我想有一天摆脱这些数据,这就是为什么免费软件包和付费软件包有一个到期日期(免费:1个月,支付:1,2或5年)。通过购买额外的软件包,可以轻松延长付费套餐。软件包还可以通过可存储物品的数量进行扩展(免费:20,支付:200,500,1000,甚至更大的软件包) – 2012-07-19 10:52:54

+0

Mmhh ...这些“时间有限的软件包”是某种In App Purchase产品吗?订阅,也许? – 2012-07-19 11:11:59

+0

@ranReloaded:是的,但该服务不仅可通过iPhone使用。也会有一个网站,您也可以在该网站上购买软件包。 – 2012-07-19 11:18:33

2

解决此问题的最简单方法是将iPhone UniqueDeviceId存储在您的服务器上。然后,当有人尝试从设备注册帐户时,您可以检查设备是否已创建帐户。

Apple从SDK中删除(折旧)UDID,所以另一种方法是使用在GitHub上可用的OpenUDID。这会给你一个唯一的ID来标识一个设备:

OpenUDID - GitHub

+2

你不应该这样做,因为你没有识别用户,而是设备。所以如果我出售我的iPhone,新的所有者将无法使用您的应用程序“演示”。但是,如果您将帐户与UDID(或OpenUDID)关联起来,新所有者会看到我的数据可能会更糟。 – rckoenes 2012-07-19 10:40:40

+0

我知道UDID已从IOS中弃用,但我不知道有类似OpenUDID的东西。这听起来像个好主意,我会看看它。 – 2012-07-19 10:43:55

+0

@ rckoenes:好的反感。但我认为有人在我的应用程序以前使用的二手iPhone上安装我的应用程序的机会非常低。但我会考虑这个。 – 2012-07-19 11:02:52

1

这是我做的休伯特Schölnast:

  1. 我的应用程序需要登录,这样每个人都必须拥有有效的登录用户名和密码。

  2. 该应用程序正在使用UUID而不是UDID或任何替代品,每当应用程序与服务器对话时,它都会将UUID和用户身份都发送到服务器。

  3. 在服务器端,我有数据库表存储用户的身份和他们的UUID。

  4. 在服务器端,在代码中,我强制执行逻辑以检查用户以及每个Web服务调用的UUID。如果他们违反规则,我会根据规则将它们标记在用户表或设备表中。

还存在一个问题,如果他们一直在卸载应用程序并重新安装它,并且每次都用另一个用户名注册,那么很难识别。但是,这取决于他们真正想要滥用系统的努力。

在我的应用程序,这是不是一个问题,因为作为用户注册是不公开的。

希望这会有所帮助。

+0

我有点困惑。苹果UDID(唯一设备标识符)是所有可能的UUID(通用唯一标识符)的子集。因此,使用“UUID而不是UDID”就像使用“拉丁字母而不是辅音”,或者像“人们而不是女人”那样说话。 – 2012-07-19 16:16:42

+0

UUID是您的应用程序负责生成并将其用于您的应用程序的内容。 UDID是设备级唯一ID。由于法律问题,您的UDID不会更改,并且苹果已经阻止程序员访问它。对于UUID,它基于每个应用程序实例,对于您安装在设备上的应用程序,无论您对应用程序做什么,只要您不卸载它,就会拥有相同的UUID。如果你重新安装应用程序,你会发现自己得到另一个UUID。试试吧,你会明白我的意思。 – 2012-07-19 18:18:16

+0

以后卸载并重新安装应用程序时发生更改的任何ID对我来说都没有用处。 – 2012-07-20 05:56:10

相关问题