Я использую код scifihifi-iphone от idandersen для связки ключей и сохраняю пароль, используя
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Когда я удаляю приложение с устройства, пароль остается в связке ключей.
Я хочу удалить пароль из цепочки для ключей, когда пользователь удаляет приложение с устройства. Как я могу это сделать?
ios
objective-c
keychain
прил
источник
источник
Ответы:
Вы можете воспользоваться тем , что
NSUserDefaults
имеют очищенные от деинсталляции приложения. Например:Это проверяет и устанавливает ключ / значение «FirstRun»
NSUserDefaults
при первом запуске вашего приложения, если оно еще не установлено. Там есть комментарий, где вы должны поместить код для удаления значений из цепочки для ключей. Синхронизация может быть вызвана, чтобы убедиться, что ключ / значение «FirstRun» немедленно сохраняется в случае, если пользователь убивает приложение вручную до того, как система его сохранит.источник
synchronize
этом случае будут потеряны только те значения, которые вы установили, но либо система (периодически), либо еще не синхронизированная с диском (путем вызова ). Рекомендуется вызвать синхронизацию после установки первого ключа запуска. И да, NSUserDefaults очищаются, когда устройство перезагружается (а не восстанавливается из резервной копии), и это нормально в этом случае.Для пользователей, которые ищут версию @ amro от Swift 3.0 :
* обратите внимание, что функция synchronize () устарела
источник
if !userDefaults.bool(forKey: "hasRunBefore") {
Это просто чище.Нет триггера для выполнения кода при удалении приложения с устройства. Доступ к цепочке для ключей зависит от профиля обеспечения, который используется для подписи приложения. Поэтому никакие другие приложения не смогут получить доступ к этой информации в цепочке для ключей.
Это не поможет вам удалить пароль из цепочки для ключей, когда пользователь удаляет приложение с устройства, но должно дать вам некоторое утешение, что пароль недоступен (только после переустановки исходного приложения).
источник
Для тех, кто ищет Swift-версию ответа @ amro:
источник
C # Xamarin версия
... и очистить записи из цепочки для ключей (комментарий TODO выше)
источник
if (VersionTracking.IsFirstLaunchEver) {// remove keychain items}
из Xamarin.Essentials вам не нужен код дляuserDefaults
. Xamarin.Essentials оборачивает это для вас .Файлы будут удалены из каталога документов вашего приложения, когда пользователь удалит приложение. Зная это, все, что вам нужно сделать, это проверить, существует ли файл как первое, что происходит в
application:didFinishLaunchingWithOptions:
. После этого безоговорочно создайте файл (даже если это просто фиктивный файл).Если файл не существовал на момент проверки, вы знаете, что это первый запуск с момента последней установки. Если вам нужно узнать об этом позже в приложении, сохраните логический результат в делегате вашего приложения.
источник
Ответ @ amro переведен на Swift 4.0:
источник
if !UserDefaults.standard.bool(forKey: "FirstInstall")
который по умолчанию имеет значение false, если ключ не существует. И .synchronize () не нужен.Похоже, что это поведение по умолчанию на iOS 10.3, основанное на поведении, которое люди наблюдали в бета-версии 2. Официальной документации по этому вопросу пока не найдено, поэтому, пожалуйста, оставьте комментарий.
источник