Używam kodu scifihifi-iphone idandersena do pęku kluczy i zapisuję hasło za pomocą
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Po usunięciu aplikacji z urządzenia hasło pozostaje w pęku kluczy.
Chcę usunąć hasło z pęku kluczy, gdy użytkownik usunie aplikację z urządzenia. W jaki sposób mogę to zrobić?
ios
objective-c
keychain
enc
źródło
źródło
Odpowiedzi:
Możesz skorzystać z faktu, że
NSUserDefaults
są usuwane przez odinstalowanie aplikacji. Na przykład:To sprawdza i ustawia klucz / wartość „FirstRun”
NSUserDefaults
przy pierwszym uruchomieniu aplikacji, jeśli nie jest jeszcze ustawione. Jest komentarz, w którym należy umieścić kod, aby usunąć wartości z pęku kluczy. Synchronizację można wywołać, aby mieć pewność, że klucz / wartość „FirstRun” zostanie natychmiast utrwalony na wypadek, gdyby użytkownik ręcznie zabił aplikację, zanim system ją utrzyma.źródło
synchronize
W tym przypadku tracone są tylko wartości, które ustawiłeś, ale albo system (okresowo), albo jeszcze nie zsynchronizowałeś się z dyskiem (przez wywołanie ). Warto ustawić synchronizację połączeń po ustawieniu klucza pierwszego uruchomienia. I tak, NSUserDefaulty są usuwane, gdy urządzenie jest resetowane (i nie jest przywracane z kopii zapasowej), i w tym przypadku jest to w porządku.Dla użytkowników szukających odpowiedzi @ amro w wersji Swift 3.0 :
* Uwaga: funkcja synchronize () jest przestarzała
źródło
if !userDefaults.bool(forKey: "hasRunBefore") {
To jest po prostu czystsze.Po usunięciu aplikacji z urządzenia nie ma wyzwalacza do wykonania kodu. Dostęp do pęku kluczy zależy od profilu udostępniania używanego do podpisywania aplikacji. Dlatego żadne inne aplikacje nie będą miały dostępu do tych informacji w pęku kluczy.
Nie pomaga ci to usunąć hasła z pęku kluczy, gdy użytkownik usuwa aplikację z urządzenia, ale powinno dać ci pewną wygodę, że hasło nie jest dostępne (tylko podczas ponownej instalacji oryginalnej aplikacji).
źródło
Dla tych, którzy szukają szybkiej wersji odpowiedzi @ amro:
źródło
Wersja C # Xamarin
... i wyczyścić zapisy z pęku kluczy (komentarz TODO powyżej)
źródło
if (VersionTracking.IsFirstLaunchEver) {// remove keychain items}
z Xamarin.Essentials, nie potrzebujesz kodu douserDefaults
. Xamarin.Essentials otacza to dla Ciebie .Pliki zostaną usunięte z katalogu dokumentów aplikacji, gdy użytkownik odinstaluje aplikację. Wiedząc o tym, wszystko co musisz zrobić, to sprawdzić, czy plik istnieje jako pierwsza rzecz, która się wydarzy
application:didFinishLaunchingWithOptions:
. Następnie bezwarunkowo utwórz plik (nawet jeśli jest to tylko plik zastępczy).Jeśli plik nie istniał w momencie sprawdzania, wiesz, że jest to pierwsze uruchomienie od ostatniej instalacji. Jeśli chcesz się dowiedzieć później w aplikacji, zapisz wynik boolowski w elemencie delegowanym aplikacji.
źródło
Odpowiedź @ amro przetłumaczona na Swift 4.0:
źródło
if !UserDefaults.standard.bool(forKey: "FirstInstall")
która domyślnie ma wartość false, jeśli klucz nie istnieje. I .synchronize () nie jest potrzebne.Wygląda na to, że jest to domyślne zachowanie w iOS 10.3 na podstawie zachowania, którego ludzie byli świadkami w wersji beta 2. Nie znalazłem jeszcze oficjalnej dokumentacji na ten temat, więc proszę o komentarz, jeśli masz.
źródło