【问题标题】:Detect first time install in iOS NOT NSUserDefaults检测第一次安装在 iOS NOT NSUserDefaults
【发布时间】:2012-12-21 20:10:07
【问题描述】:

工作原理 - 该应用是对跨平台工作的服务的订阅。在 iPhone 上,初次购买将获得 30 天的完整功能,然后在 30 天后,您将无法做某些事情,直到您通过应用内购买购买订阅。

我需要什么 - 我需要知道它是否是第一次运行,以便我可以将用户信息添加到数据库中。或者因为它是跨平台的,他们可能已经支付了订阅费用,所以我需要为用户已经存在的订阅增加 30 天。

我现在在做什么 - 目前我将 identifierForVendor 存储在远程数据库中,并且在 NSUserDefaults 中有一个 bool 检查以查看 1. 是否是第一次运行和 2. 如果是第一次运行以允许用户将自己添加到数据库中 30 天的完整使用期,或将 30 天添加到他们现有的订阅中。

问题 - 问题是如果用户删除应用程序然后重新安装它,NSUserDefaults 也将被删除,并且 identifierForVendor 将更改,这将允许用户再添加 30 天他们只需删除并重新安装应用程序即可免费订阅。

理想的解决方案 我本来想订阅应用程序,但不知道如何在最初购买应用程序时查看收据并将用户插入远程数据库。此外,我真的不知道如何设置不是应用内购买的订阅。我还考虑过让应用程序免费,然后他们可以使用应用内购买来购买服务,但是应用程序没有用,因为它无法连接到远程服务器以首先建立数据。

底线我想做以下其中一项

  1. 首次购买时订阅(我需要能够检测购买是否有效,以便将用户信息输入远程数据库)
  2. 让应用免费,然后使用应用内购买来添加订阅(是否可以有一个免费应用在您订阅之前不会执行任何操作?)
  3. 保持现在的状态(但为 identifierForVendor 找到更永久的解决方案,identifierForAdvertising 也不起作用,因为它可以关闭)

【问题讨论】:

  • 为什么不在钥匙串里存东西呢?这应该是永久性的。
  • 我强烈建议您仔细阅读 Apple 的应用商店指南。您描述的订阅模式不太可能被允许。
  • 一个建议可能是将状态保存在应用程序的私有 iCloud 容器中(通过 CloudKit)。缺点是用户需要登录 iCloud 才能使用该应用,但实际上,大多数用户都是。

标签: ios cocoa-touch nsuserdefaults


【解决方案1】:

这将对您有很大帮助。基本上它是在 NSUserDefaults 之后模式化的 Keychain 的包装器。它帮助了我很多。将内容存储在钥匙串中可以让它们在应用重新安装后保持不变。

https://github.com/carlbrown/PDKeychainBindingsController

该项目旨在使用 Mac OSX 和 iOS 钥匙串 就像 NSUserDefaults 一样简单。

它是一个兼容 KVO 的 Cocoa 包装器,围绕 Mac OSX 和 iOS 钥匙串,这个包装器的模型是 NSUserDefaults,所以 意图是对于您通常想要调用的常见情况:

[NSUserDefaultsController sharedUserDefaultsController] 你应该是 可以打电话

[PDKeychainBindingsController sharedKeychainBindingsController] 和 对于您通常会调用的常见情况:

[NSUserDefaults standardUserDefaults] 你应该可以调用

[PDKeychainBindings sharedKeychainBindings]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多