Skip to content

Commit 61e3448

Browse files
refactor: facebook provider
1 parent 4da94df commit 61e3448

File tree

4 files changed

+32
-40
lines changed

4 files changed

+32
-40
lines changed

FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AccountService+Facebook.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import FirebaseAuthSwiftUI
2424
import Observation
2525

2626
protocol FacebookOperationReauthentication {
27-
var facebookProvider: FacebookProviderAuthUI { get }
27+
var facebookProvider: FacebookProviderSwift { get }
2828
}
2929

3030
extension FacebookOperationReauthentication {
@@ -47,8 +47,8 @@ extension FacebookOperationReauthentication {
4747
@MainActor
4848
class FacebookDeleteUserOperation: AuthenticatedOperation,
4949
@preconcurrency FacebookOperationReauthentication {
50-
let facebookProvider: FacebookProviderAuthUI
51-
init(facebookProvider: FacebookProviderAuthUI) {
50+
let facebookProvider: FacebookProviderSwift
51+
init(facebookProvider: FacebookProviderSwift) {
5252
self.facebookProvider = facebookProvider
5353
}
5454

FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AuthService+Facebook.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import FirebaseAuthSwiftUI
2323

2424
public extension AuthService {
2525
@discardableResult
26-
func withFacebookSignIn(scopes scopes: [String]? = nil) -> AuthService {
27-
FacebookProviderAuthUI.configureProvider(scopes: scopes)
28-
registerProvider(providerWithButton: FacebookProviderAuthUI.shared)
26+
func withFacebookSignIn(_ provider: FacebookProviderSwift? = nil) -> AuthService {
27+
registerProvider(providerWithButton: FacebookProviderAuthUI(provider: provider ??
28+
FacebookProviderSwift()))
2929
return self
3030
}
3131
}

FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/FacebookProviderAuthUI.swift

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ import FirebaseAuth
1919
import FirebaseAuthSwiftUI
2020
import SwiftUI
2121

22-
let kFacebookEmailScope = "email"
23-
let kFacebookProfileScope = "public_profile"
24-
let kDefaultFacebookScopes = [kFacebookEmailScope, kFacebookProfileScope]
25-
2622
public enum FacebookProviderError: Error {
2723
case signInCancelled(String)
2824
case configurationInvalid(String)
@@ -31,44 +27,20 @@ public enum FacebookProviderError: Error {
3127
case authenticationToken(String)
3228
}
3329

34-
public class FacebookProviderAuthUI: AuthProviderSwift, AuthProviderUI, DeleteUserSwift {
35-
public let id: String = "facebook"
30+
public class FacebookProviderSwift: AuthProviderSwift, DeleteUserSwift {
3631
let scopes: [String]
37-
let shortName = "Facebook"
3832
let providerId = "facebook.com"
3933
private let loginManager = LoginManager()
4034
private var rawNonce: String?
4135
private var shaNonce: String?
4236
// Needed for reauthentication
4337
var isLimitedLogin: Bool = true
44-
45-
public var provider: AuthProviderSwift { self }
46-
47-
@MainActor private static var _shared: FacebookProviderAuthUI = FacebookProviderAuthUI(scopes: kDefaultFacebookScopes)
48-
49-
@MainActor public static var shared: FacebookProviderAuthUI {
50-
return _shared
51-
}
5238

53-
@MainActor public static func configureProvider(scopes: [String]? = nil, isLimitedLogin: Bool = true) {
54-
_shared = FacebookProviderAuthUI(scopes: scopes, isLimitedLogin: isLimitedLogin)
55-
}
56-
57-
public init(scopes: [String]? = nil, isLimitedLogin: Bool = true) {
58-
self.scopes = scopes ?? kDefaultFacebookScopes
39+
public init(scopes: [String] = ["email", "public_profile"], isLimitedLogin: Bool = true) {
40+
self.scopes = scopes
5941
self.isLimitedLogin = isLimitedLogin
6042
}
6143

62-
@MainActor public func authButton() -> AnyView {
63-
AnyView(SignInWithFacebookButton())
64-
}
65-
66-
public func deleteUser(user: User) async throws {
67-
let operation = FacebookDeleteUserOperation(facebookProvider: self)
68-
try await operation(on: user)
69-
}
70-
71-
7244
@MainActor public func createAuthCredential() async throws -> AuthCredential {
7345
let loginType: LoginTracking = isLimitedLogin ? .limited : .enabled
7446

@@ -149,4 +121,22 @@ public class FacebookProviderAuthUI: AuthProviderSwift, AuthProviderUI, DeleteUs
149121
)
150122
}
151123
}
124+
125+
public func deleteUser(user: User) async throws {
126+
let operation = FacebookDeleteUserOperation(facebookProvider: self)
127+
try await operation(on: user)
128+
}
129+
}
130+
131+
public class FacebookProviderAuthUI: AuthProviderUI {
132+
public var provider: AuthProviderSwift
133+
public let id: String = "facebook.com"
134+
135+
public init(provider: AuthProviderSwift) {
136+
self.provider = provider
137+
}
138+
139+
@MainActor public func authButton() -> AnyView {
140+
AnyView(SignInWithFacebookButton(facebookProvider: provider))
141+
}
152142
}

FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Views/SignInWithFacebookButton.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,16 @@ import SwiftUI
2323
@MainActor
2424
public struct SignInWithFacebookButton {
2525
@Environment(AuthService.self) private var authService
26+
let facebookProvider: AuthProviderSwift
2627
@State private var errorMessage = ""
2728
@State private var showCanceledAlert = false
2829
@State private var limitedLogin = true
2930
@State private var showUserTrackingAlert = false
3031
@State private var trackingAuthorizationStatus: ATTrackingManager
3132
.AuthorizationStatus = .notDetermined
3233

33-
public init() {
34+
public init(facebookProvider: AuthProviderSwift) {
35+
self.facebookProvider = facebookProvider
3436
_trackingAuthorizationStatus = State(initialValue: ATTrackingManager
3537
.trackingAuthorizationStatus)
3638
}
@@ -65,7 +67,6 @@ extension SignInWithFacebookButton: View {
6567
Button(action: {
6668
Task {
6769
do {
68-
let facebookProvider = FacebookProviderAuthUI(isLimitedLogin: limitedLogin)
6970
try await authService.signIn(facebookProvider)
7071
} catch {
7172
switch error {
@@ -128,6 +129,7 @@ extension SignInWithFacebookButton: View {
128129

129130
#Preview {
130131
FirebaseOptions.dummyConfigurationForPreview()
131-
return SignInWithFacebookButton()
132+
let facebookProvider = FacebookProviderSwift()
133+
return SignInWithFacebookButton(facebookProvider: facebookProvider)
132134
.environment(AuthService())
133135
}

0 commit comments

Comments
 (0)