保存特定于应用的数据,即使在删除应用后也能保留

时间:2016-03-29 10:23:09

标签: ios objective-c swift

有没有办法在app卸载后保留一些数据,并且可以在app再次安装后检索?

我找到了NSUserDefault,但我不确定。请指教。

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("Coding Explorer", forKey: "userNameKey")

5 个答案:

答案 0 :(得分:4)

您需要使用钥匙串,以了解有关应用程序的明智信息。

以下是如何实现这一目标的示例。

KeyChain Example

当用户从设备卸载应用程序时,

UserDefaults将被删除,因此替代方案是Keychain。

答案 1 :(得分:0)

卸载应用程序时,

NSUserDefaults将被清除。这样做的最佳方式我认为它使用keychain这也可以确保您的数据已加密且其他人无法访问。

答案 2 :(得分:0)

这很可能是使用iOS上的钥匙串完成的。

但是从我的观点来看,卸载后留下数据违反了应用程序的沙盒。有办法做到这一点,就像你可以添加图片/照片/联系人/ ......,但不太可能" Apple批准"而且很容易被黑客攻击。

所以我也建议你使用网络服务。一个简单的方法是在没有找到应用程序数据(安装和重新安装)的情况下验证服务(例如,使用设备的MAC地址,因为设备唯一标识符正在消失),如果它已经知道设备(无代币)与否(获取代币)。

答案 3 :(得分:0)

就我个人而言,不会使用钥匙串,对于像这样简单的事情来说,这太简单了。

使用defaults domains可能会发现一些运气,它允许您放置一小部分数据"外部"正常的默认区域。但这似乎也超出了你的需要。

另一个选项是make your own plist,然后将其保存到iCloud。

答案 4 :(得分:0)

使用此方法保存数据:

   func saveIMEI(key: String, data: String) -> OSStatus {
    let query = [
        kSecClass as String       : kSecClassGenericPassword as String,
        kSecAttrAccount as String : key,
        kSecValueData as String   : data ] as [String : Any]

    SecItemDelete(query as CFDictionary)

    return SecItemAdd(query as CFDictionary, nil)
}

使用它来加载数据:

     func loadIMEI(key: String) -> String? {
    let query = [
        kSecClass as String       : kSecClassGenericPassword,
        kSecAttrAccount as String : key,
        kSecReturnData as String  : kCFBooleanTrue,
        kSecMatchLimit as String  : kSecMatchLimitOne ] as [String : Any]

    var dataTypeRef: AnyObject? = nil

    let status: OSStatus = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)

    if status == noErr {
        return dataTypeRef as! String?
    } else {
        return nil
    }
}