@@ -17,7 +17,7 @@ public final class AuthClient: Sendable {
17
17
private var date : @Sendable ( ) -> Date { Current . date }
18
18
private var sessionManager : SessionManager { Current . sessionManager }
19
19
private var eventEmitter : AuthStateChangeEventEmitter { Current . eventEmitter }
20
- private var logger : ( any SupabaseLogger ) ? { Current . logger }
20
+ private var logger : ( any SupabaseLogger ) ? { Current . configuration . logger }
21
21
private var storage : any AuthLocalStorage { Current . configuration. localStorage }
22
22
23
23
/// Returns the session, refreshing it if necessary.
@@ -596,6 +596,67 @@ public final class AuthClient: Sendable {
596
596
}
597
597
#endif
598
598
599
+ /// Handles an incoming URL received by the app.
600
+ ///
601
+ /// ## Usage example:
602
+ ///
603
+ /// ### UIKit app lifecycle
604
+ ///
605
+ /// In your `AppDelegate.swift`:
606
+ ///
607
+ /// ```swift
608
+ /// public func application(
609
+ /// _ application: UIApplication,
610
+ /// didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
611
+ /// ) -> Bool {
612
+ /// if let url = launchOptions?[.url] as? URL {
613
+ /// supabase.auth.handle(url)
614
+ /// }
615
+ ///
616
+ /// return true
617
+ /// }
618
+ ///
619
+ /// func application(
620
+ /// _ app: UIApplication,
621
+ /// open url: URL,
622
+ /// options: [UIApplication.OpenURLOptionsKey: Any]
623
+ /// ) -> Bool {
624
+ /// supabase.auth.handle(url)
625
+ /// return true
626
+ /// }
627
+ /// ```
628
+ ///
629
+ /// ### UIKit app lifecycle with scenes
630
+ ///
631
+ /// In your `SceneDelegate.swift`:
632
+ ///
633
+ /// ```swift
634
+ /// func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
635
+ /// guard let url = URLContexts.first?.url else { return }
636
+ /// supabase.auth.handle(url)
637
+ /// }
638
+ /// ```
639
+ ///
640
+ /// ### SwiftUI app lifecycle
641
+ ///
642
+ /// In your `AppDelegate.swift`:
643
+ ///
644
+ /// ```swift
645
+ /// SomeView()
646
+ /// .onOpenURL { url in
647
+ /// supabase.auth.handle(url)
648
+ /// }
649
+ /// ```
650
+ public func handle( _ url: URL ) {
651
+ Task {
652
+ do {
653
+ try await session ( from: url)
654
+ } catch {
655
+ logger? . error ( " Failure loading session from url ' \( url) ' error: \( error) " )
656
+ }
657
+ }
658
+ }
659
+
599
660
/// Gets the session data from a OAuth2 callback URL.
600
661
@discardableResult
601
662
public func session( from url: URL ) async throws -> Session {
0 commit comments