Skip to content

Commit c14ad31

Browse files
refactor: phone auth provider
1 parent 8da6c91 commit c14ad31

File tree

4 files changed

+43
-22
lines changed

4 files changed

+43
-22
lines changed

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public protocol DeleteUserSwift {
2929
@MainActor func deleteUser(user: User) async throws
3030
}
3131

32-
public protocol PhoneAuthProviderAuthUIProtocol: AuthProviderSwift {
32+
public protocol PhoneAuthProviderSwift: AuthProviderSwift {
3333
@MainActor func verifyPhoneNumber(phoneNumber: String) async throws -> String
3434
}
3535

FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/PhoneAuthProviderAuthUI.swift

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,12 @@ import SwiftUI
1818

1919
public typealias VerificationID = String
2020

21-
public class PhoneAuthProviderAuthUI: PhoneAuthProviderAuthUIProtocol, AuthProviderUI {
22-
public let id: String = "phone"
23-
24-
public var provider: AuthProviderSwift { self }
25-
21+
public class PhoneProviderSwift: PhoneAuthProviderSwift {
2622
// Store verification details for the signIn method
2723
private var storedVerificationID: String?
2824
private var storedVerificationCode: String?
2925

30-
@MainActor public func authButton() -> AnyView {
31-
AnyView(PhoneAuthButtonView())
32-
}
26+
public init() {}
3327

3428
@MainActor public func verifyPhoneNumber(phoneNumber: String) async throws -> VerificationID {
3529
return try await withCheckedThrowingContinuation { continuation in
@@ -43,20 +37,36 @@ public class PhoneAuthProviderAuthUI: PhoneAuthProviderAuthUIProtocol, AuthProvi
4337
}
4438
}
4539
}
46-
40+
4741
// Set verification details before calling signIn
4842
public func setVerificationDetails(verificationID: String, verificationCode: String) {
49-
self.storedVerificationID = verificationID
50-
self.storedVerificationCode = verificationCode
43+
storedVerificationID = verificationID
44+
storedVerificationCode = verificationCode
5145
}
52-
46+
5347
@MainActor public func createAuthCredential() async throws -> AuthCredential {
5448
guard let verificationID = storedVerificationID,
5549
let verificationCode = storedVerificationCode else {
56-
throw AuthServiceError.invalidPhoneAuthenticationArguments("please call setVerificationDetails() before creating Phone Auth credential")
50+
throw AuthServiceError
51+
.invalidPhoneAuthenticationArguments(
52+
"please call setVerificationDetails() before creating Phone Auth credential"
53+
)
5754
}
58-
55+
5956
return PhoneAuthProvider.provider()
6057
.credential(withVerificationID: verificationID, verificationCode: verificationCode)
6158
}
6259
}
60+
61+
public class PhoneAuthProviderAuthUI: AuthProviderUI {
62+
public var provider: AuthProviderSwift
63+
public let id: String = "phone.com"
64+
65+
public init(provider: PhoneAuthProviderSwift? = nil) {
66+
self.provider = provider ?? PhoneProviderSwift()
67+
}
68+
69+
@MainActor public func authButton() -> AnyView {
70+
AnyView(PhoneAuthButtonView(phoneProvider: provider as! PhoneAuthProviderSwift))
71+
}
72+
}

FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthButtonView.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,18 @@ import SwiftUI
1919
@MainActor
2020
public struct PhoneAuthButtonView {
2121
@Environment(AuthService.self) private var authService
22+
let phoneProvider: PhoneAuthProviderSwift
2223

23-
public init() {}
24+
public init(phoneProvider: PhoneAuthProviderSwift) {
25+
self.phoneProvider = phoneProvider
26+
}
2427
}
2528

2629
extension PhoneAuthButtonView: View {
2730
public var body: some View {
2831
Button(action: {
2932
authService.registerModalView(for: .phoneAuth) {
30-
AnyView(PhoneAuthView().environment(authService))
33+
AnyView(PhoneAuthView(phoneProvider: phoneProvider).environment(authService))
3134
}
3235
authService.presentModal(for: .phoneAuth)
3336
}) {
@@ -44,6 +47,7 @@ extension PhoneAuthButtonView: View {
4447

4548
#Preview {
4649
FirebaseOptions.dummyConfigurationForPreview()
47-
return PhoneAuthButtonView()
50+
let phoneProvider = PhoneProviderSwift()
51+
return PhoneAuthButtonView(phoneProvider: phoneProvider)
4852
.environment(AuthService())
4953
}

FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthView.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ public struct PhoneAuthView {
3131
@State private var showVerificationCodeInput = false
3232
@State private var verificationCode = ""
3333
@State private var verificationID = ""
34-
private let phoneProvider = PhoneAuthProviderAuthUI()
34+
let phoneProvider: PhoneAuthProviderSwift
3535

36-
public init() {}
36+
public init(phoneProvider: PhoneAuthProviderSwift) {
37+
self.phoneProvider = phoneProvider
38+
}
3739
}
3840

3941
extension PhoneAuthView: View {
@@ -83,7 +85,11 @@ extension PhoneAuthView: View {
8385
Button(action: {
8486
Task {
8587
do {
86-
phoneProvider.setVerificationDetails(
88+
guard let phoneAuthProvider = phoneProvider as? PhoneProviderSwift else {
89+
errorMessage = "Invalid phone provider"
90+
return
91+
}
92+
phoneAuthProvider.setVerificationDetails(
8793
verificationID: verificationID,
8894
verificationCode: verificationCode
8995
)
@@ -117,6 +123,7 @@ extension PhoneAuthView: View {
117123

118124
#Preview {
119125
FirebaseOptions.dummyConfigurationForPreview()
120-
return PhoneAuthView()
126+
let phoneProvider = PhoneProviderSwift()
127+
return PhoneAuthView(phoneProvider: phoneProvider)
121128
.environment(AuthService())
122129
}

0 commit comments

Comments
 (0)