728x90
반응형
Apple SNS 로그인으로 사용자를 탈퇴하기 위해서는 Apple 로그인 API를 사용하여 해당 기능을 처리할 수 있습니다. 다음은 Swift TCA와 Apple 로그인 API를 활용하여 사용자 탈퇴를 구현하는 방법입니다.
1. 액션(Action)에 탈퇴 액션 추가
먼저, 액션에 탈퇴 액션을 추가합니다.
enum AppAction {
case loginSuccess(User)
case loginFailure(Error)
case appleSignInTapped
case userWithdrawn // 사용자 탈퇴 액션 추가
// 기타 다른 액션들을 추가할 수 있습니다.
}
2. 리듀서(Reducer)에 탈퇴 처리 추가
리듀서에서 사용자 탈퇴 시의 처리를 추가합니다.
let appReducer = Reducer<AppState, AppAction, AppEnvironment> { state, action, environment in
switch action {
case let .loginSuccess(user):
state.isLoggedIn = true
state.user = user
return .none
case .loginFailure:
// 로그인 실패 시에 대한 처리를 추가합니다.
return .none
case .appleSignInTapped:
// Apple 로그인 버튼이 눌렸을 때의 처리를 추가합니다.
let appleSignInProvider = ASAuthorizationAppleIDProvider()
let appleSignInRequest = appleSignInProvider.createRequest()
appleSignInRequest.requestedScopes = [.fullName, .email]
return environment.appleSignInController
.signIn(with: appleSignInRequest)
.map { authorization in
// Apple 로그인 성공 시에 대한 처리를 추가합니다.
// 사용자 정보를 추출하여 액션을 디스패치합니다.
guard let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential else {
return .loginFailure(AppError.unknownError)
}
let user = User(id: appleIDCredential.user,
name: "\(appleIDCredential.fullName?.givenName ?? "") \(appleIDCredential.fullName?.familyName ?? "")")
return .loginSuccess(user)
}
.catch { error in
// Apple 로그인 실패 시에 대한 처리를 추가합니다.
return .loginFailure(error)
}
.eraseToEffect()
case .userWithdrawn:
// 사용자 탈퇴 시의 처리를 추가합니다.
return environment.appleSignInProvider
.getCredentialState(forUserID: state.user?.id ?? "")
.map { credentialState in
switch credentialState {
case .authorized, .revoked, .transferred: // 사용자 인증 상태를 확인하고 탈퇴 처리합니다.
state.isLoggedIn = false
state.user = nil
case .notFound:
break // 해당 사용자를 찾지 못하는 경우 아무런 처리를 하지 않습니다.
@unknown default:
break // 기타 예외 상황에 대한 처리를 추가할 수 있습니다.
}
}
.eraseToEffect()
}
}
반응형
3. SwiftUI 뷰에서 탈퇴 액션 디스패치
마지막으로 SwiftUI 뷰에서 앱 스토어를 사용하여 탈퇴 액션을 디스패치하는 방법을 보여드리겠습니다.
import SwiftUI
import ComposableArchitecture
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(appStore) // 앱 스토어를 환경 객체로 주입합니다.
}
}
}
struct ContentView: View {
@EnvironmentObject var store: Store<AppState, AppAction> // 앱 스토어를 주입받습니다.
var body: some View {
VStack {
if store.state.isLoggedIn {
LoggedInView()
Button("탈퇴하기", action: {
store.send(.userWithdrawn) // 탈퇴 버튼이 눌렸을 때 탈퇴 액션을 디스패치합니다.
})
} else {
Button("Apple 로그인", action: {
store.send(.appleSignInTapped) // Apple 로그인 버튼이 눌렸을 때 액션을 디스패치합니다.
})
}
}
}
}
이제 사용자가 탈퇴 버튼을 누를 때 .userWithdrawn 액션이 발생하고, 리듀서에서 해당 액션을 처리하여 Apple 로그인 API를 사용하여 사용자를 탈퇴할 수 있습니다. 앱의 상태와 Apple 로그인 상태를 확인하여 사용자를 탈퇴하게 됩니다.
Swift TCA를 사용하여 Apple SNS 로그인과 사용자 탈퇴를 구현하면 상태 관리와 비동기 처리가 효율적으로 이루어집니다. 사용자에게 알맞은 탈퇴 처리를 제공하여 더욱 안정적인 앱을 개발하길 바랍니다.
728x90
반응형
'Swift' 카테고리의 다른 글
TCA와 UIKit을 활용한 DSR 계산기 (0) | 2023.07.20 |
---|---|
애플세계개발자대회(WWDC) 2023에서 공개된 iOS 17에 대한 새로운 기능들을 소개합니다. (0) | 2023.07.16 |
Swift TCA로 Apple SNS 로그인 구현하기 (0) | 2023.07.16 |
SwiftUI와 Combine을 활용한 TCA 아키텍처 TodoList 예제 (0) | 2023.07.11 |
SwiftUI와 Combine을 활용한 TCA 아키텍처 계산기 예제 (0) | 2023.07.11 |