[iOS] App Development

[iOS] 회원탈퇴 기능 추가시 유의사항, UserDefault - get, set, remove, 삭제여부확인

ddgoori 2022. 1. 30. 19:00

애플의 정책 변경으로 인해 회원탈퇴 기능이 앱에 반드시 추가되어야 합니다. 원래 변경 기한은 올해 2022년 1월30일 까지였는데 연말로 연장되었다. 회원 탈퇴시 데이터베이스에서 정보를 지우기도 해야하지만 UserDefault에서도 데이터를 지워줘야한다.

 

UserDefault - get, set, remove

    

UserDefault란?

 

자신의 디바이스에 임시로 데이터값을 저장해놓은 공간

목적: 앱이 종료되어도 지정된 값으로 저장되어 있기 위해. 따로 삭제를 해야 초기화가 된다. 

예제: key-value pair로 값을 저장(set)하고, 필요할 때 get(key)를 하면 value를 사용할 수 있다. 

 

https://developer.apple.com/documentation/foundation/userdefaults

 

Apple Developer Documentation

 

developer.apple.com

 

An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.

유저의 디폴트 데이터베이스 인터페이스이다. 키-벨류 쌍으로 지속적으로 저장하는 앱을 실행시키는 과정에서

 

Apps store these preferences by assigning values to a set of parameters in a user’s defaults database. The parameters are referred to as defaults because they’re commonly used to determine an app’s default state at startup or the way it acts by default.

런타임시에 객체를 사용해 사용자의 기본데이터베이스에서 앱이 사용하는 기본 값을읽고, 기본값이 필요할 때마다 사용자의 기본 데이터베이스를 열지 않도록 캐시를 함. 저장은 단일장치에 로컬로 저장이되고, 백업 및 복원을 위해 유지가 됨. 사용자의 연결된 장치에서 기본 설정 및 기타 데이터를 동기화 하려면 NSUbiquitousKeyValueStore를 사용하면 됨. 

 

 

 

Default Object 저장하기

 

  • setValue 사용

 

userDefaults.standard.setValue(email, forKey: “userEmail”)



let userInfo = UserDefault.standard

userInfo.set(email, forKey: “userEmail”)

 

value: 저장 값(String, Int, Bool, Date 등 됨)

key: 저장값을 부를 때 사용하는 key(무조건 String 써야함)

 

 

Default Object 불러오기

 

  • value 사용

 

key로 부르면 됨

 

 

let userInfoEmail = UserDefaults.standard.value(forKey: “userEmail”)



let userInfoEmail = userInfo.value(forKey: “userEmail”) as? String

emailLabel.text = userInfoEmail

 

로그인 화면에서 사용자가 이메일 자동저장에 체크를 하고 앱을 종료했다면? 

다음 앱을 켤 때도 이메일 값은 보이도록 해야함. 이를 위해서 위 코드로 userDefault에 저장한 값을 가져와서 보여줄 수 있다. 

 

 

Default Object 삭제하기

 

  • removeObject 사용
UserDfaults.standard.removeObject(forKey: “userEmail”)

 

key값으로 삭제할 수 있다. 

 

**

Bool 값의 경우 setValue를 통해 false로 바꿔주며 분기처리할 때 사용할 수 있다. ex) 자동로그인의 경우 로그아웃을 하면 없애준다.

 

회원탈퇴, 로그아웃등의 이유로 데이터를 제거 해야할 때 사용된다. 

 

 

 

추가 관련 개념

 

synchronize()

 

Default데이터베이스에서 펜딩중인 비동기 업데이트를 기다리고 반환함. => 불필요하며 사용하지 말라고함

 

 

didChangeNotification

 

유저디폴트 값이 변화하면 스레드에 올라옴.키-값 관찰을하여 모든 로컬 디폴트 데이터베이스에 업데이트가 발생하면 노티를 받을수 있습니다. 

 

 

Default Object 불러올 때 관련 함수 

 

 

/**

     -boolForKey: is equivalent to -objectForKey:, except that it converts the returned value to a BOOL. If the value is an NSNumber, NO will be returned if the value is 0, YES otherwise. If the value is an NSString, values of "YES" or "1" will return YES, and values of "NO", "0", or any other string will return NO. If the value is absent or can't be converted to a BOOL, NO will be returned.

     

     */

 open func bool(forKey defaultName: String) -> Bool

 

사용예시

 

hasEmail = UserDefaults.standard.bool(forKey: “userEmailCheck)

 

 

**

     -registerDefaults: adds the registrationDictionary to the last item in every search list. This means that after NSUserDefaults has looked for a value in every other valid location, it will look in registered defaults, making them useful as a "fallback" value. Registered defaults are never stored between runs of an application, and are visible only to the application that registers them.

     

     Default values from Defaults Configuration Files will automatically be registered.

     */

    open func register(defaults registrationDictionary: [String : Any])

 

UIApplicationDelegate에서 사용하여 앱실행 가장 첫 시작점에서 코드

 

사용예시 

 

let dic = ["email_ud":"","pin_ud":"", "isPin":false, "isMember":false, "pw":""] as [String : Any]

    UserDefaults.standard.register(defaults: dic) //저장

 

    

삭제 여부 확인

 

마지막으로 삭제후에는 아래와 같이 데이터가 삭제됐는지 확인해준다.

print(UserDefaults.standard.string(forKey: USER_EMAIL))
print(UserDefaults.standard.bool(forKey: USER_PERMISSION_CHECK))

nil

false

가 나타나는데, bool 타입은 데이터를 삭제하면 false가 된다.

 

 

 

출처: 

https://developer.apple.com/documentation/foundation/userdefaults#1664798

https://qussk.github.io/2021/02/27/swift-UserDefault