iOS 钥匙串替代方案,无法在另一台设备上恢复

Posted

技术标签:

【中文标题】iOS 钥匙串替代方案,无法在另一台设备上恢复【英文标题】:iOS Key Chain alternative without possibility to restore on another device 【发布时间】:2014-09-29 15:02:39 【问题描述】:

是否可以在ios上存储一些在删除应用时不会删除的信息(如Keychain),并且也无法恢复到其他设备?

据我了解 - 如果您选择加密备份选项,钥匙串将恢复到另一台设备。 Does iOS keychain storage persist when restoring an app to a new device?

那么是否有可能以某种方式保留一些数据 - 在删除应用程序后(在重新安装后读取它)并且它仅在添加/创建它的设备上可用。

【问题讨论】:

【参考方案1】:

有以下选项:

kSecAttrAccessibleAlwaysThisDeviceOnly
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly

来自文档:

[...] 具有此属性的项目不会迁移到新设备。 [...]

我认为它们正是您所需要的。他们在这个 WWDC 演讲中得到了很好的解释:

https://developer.apple.com/videos/wwdc/2014/#711

上述谈话的示例用法:

SecAccessControlRef sacObject =
SecAccessControlCreateWithFlags(kCFAllocatorDefault,
   kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
   kSecAccessControlUserPresence, &error);

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding];
NSDictionary *query = @
   (id)kSecClass: (id)kSecClassGenericPassword,
   (id)kSecAttrService: @"myservice",
   (id)kSecAttrAccount: @"account name here",
   (id)kSecValueData: secret;

OSStatus status =  SecItemAdd((CFDictionaryRef)query, nil);

另见:https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/index.html#//apple_ref/doc/constant_group/Keychain_Item_Accessibility_Constants

【讨论】:

以上是关于iOS 钥匙串替代方案,无法在另一台设备上恢复的主要内容,如果未能解决你的问题,请参考以下文章

如果用户在另一台设备上登录,则自动注销用户

当 iPhone 从备份中恢复时,钥匙串会发生啥?

iOS 钥匙串服务与 iCloud 钥匙串不同吗?

Xamarin.iOS VSTS 无法将临时钥匙串添加到钥匙串搜索路径

重置设备上的钥匙串

iOS 钥匙串在设备之间共享数据