【问题标题】:iOS7: How to store a key / bool value in keychainiOS7:如何在钥匙串中存储键/布尔值
【发布时间】:2014-08-24 22:54:32
【问题描述】:

我实施了应用内购买,所有产品都是非消耗品。我的目的是为每个产品标识符存储 bool 值在 keychain 中,然后根据存储的 bool 值控制 Core Data 检索。

我的问题是:如何将键/布尔值存储到钥匙串中?

P.S:我使用 KeyChainItemWrapper。

【问题讨论】:

  • 如果有一天Apple允许在iOS上编辑钥匙串,就像他们在macOS上一直允许的那样,你会哭一整天:-P钥匙串是用来存储密码和加密密钥的,而且只是为了那个,请不要滥用它。如果您想验证用户进行的购买,请解析与您的应用程序一起存储的本地配方文件(它包含用户的完整购买历史记录,用户无法访问或操作它)并使用 Apple 的商店 API 来查询商店服务器(只有当用户有互联网时才有可能,这就是为什么有一个离线访问的配方文件)。

标签: ios keychain keychainitemwrapper


【解决方案1】:

NSNumber 的形式存储它,因为它包含一个特殊的方法+ numberWithBool: 将BOOL 值转换为对象:

[keychainItemWrapper setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)(kSecAttrIsInvisible)];

并获取:

NSNumber *value = [keychainItemWrapper objectForKey:(__bridge id)(kSecAttrIsInvisible)];
BOOL boolValue = [value boolValue];

使用钥匙串键 kSecAttrIsInvisiblekSecAttrIsNegative 中的任何一个,因为它们支持存储布尔值。

【讨论】:

    【解决方案2】:

    我不明白一些事情。为什么需要将布尔值存储在钥匙串中?此外,Core Data 将如何与钥匙串通信或依赖它?这个问题有点模糊。

    Look at this year's WWDC session 在 Touch ID 和钥匙串(或去年的钥匙串会话)上,用于设置钥匙串并与之通信的属性。还请查看 Apple 今年的示例项目。

    The docs 有很多关于您可以使用的可能密钥以及如何与钥匙串通信的信息。

    【讨论】:

    • bool YES/NO = 模块是否购买。然后从钥匙串中检索数据,为核心数据选择构建适当的 NSPredicate。
    • 为什么不把它也存储在 Core Data 中呢?我认为不需要在钥匙串中存储用户是否进行了购买。如果安全是一个问题,您可以写入磁盘并使用 File Protection Complete
    • 我不想在 NSUserDefaults 中保存购买布尔值的原因。即使被加密。
    • 是的,在文档目录或用户的库中。完成文件保护并设置密码后,文件将在更新的设备上进行硬件加密。为了检查用户是否进行了购买,钥匙串似乎有点矫枉过正。推荐用于存储密码、安全/敏感数据等。
    • 是的,这也是敏感数据,我不想被一些险恶的人修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多