diff --git a/.changeset/witty-clouds-yawn.md b/.changeset/witty-clouds-yawn.md new file mode 100644 index 00000000..9da0c4d0 --- /dev/null +++ b/.changeset/witty-clouds-yawn.md @@ -0,0 +1,5 @@ +--- +'@capacitor-firebase/authentication': patch +--- + +fix: `authStateChange` event is not fired right after the listener is registered diff --git a/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthentication.java b/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthentication.java index e5b9623e..7a4cb338 100644 --- a/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthentication.java +++ b/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthentication.java @@ -43,13 +43,6 @@ public class FirebaseAuthentication { - interface AuthStateChangeListener { - void onAuthStateChanged(); - } - - @Nullable - private AuthStateChangeListener authStateChangeListener; - private FirebaseAuthenticationPlugin plugin; private FirebaseAuthenticationConfig config; private FirebaseAuth firebaseAuthInstance; @@ -68,22 +61,11 @@ public FirebaseAuthentication(FirebaseAuthenticationPlugin plugin, FirebaseAuthe this.initAuthProviderHandlers(config); this.firebaseAuthStateListener = firebaseAuth -> { - if (authStateChangeListener != null) { - authStateChangeListener.onAuthStateChanged(); - } + this.plugin.handleAuthStateChange(); }; firebaseAuthInstance.addAuthStateListener(this.firebaseAuthStateListener); } - public void setAuthStateChangeListener(@Nullable AuthStateChangeListener listener) { - this.authStateChangeListener = listener; - } - - @Nullable - public AuthStateChangeListener getAuthStateChangeListener() { - return authStateChangeListener; - } - public void applyActionCode(@NonNull String oobCode, @NonNull Runnable callback) { firebaseAuthInstance .applyActionCode(oobCode) diff --git a/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthenticationPlugin.java b/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthenticationPlugin.java index 07d4dce3..67b66f24 100644 --- a/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthenticationPlugin.java +++ b/packages/authentication/android/src/main/java/io/capawesome/capacitorjs/plugins/firebase/authentication/FirebaseAuthenticationPlugin.java @@ -64,7 +64,6 @@ public class FirebaseAuthenticationPlugin extends Plugin { public void load() { config = getFirebaseAuthenticationConfig(); implementation = new FirebaseAuthentication(this, config); - implementation.setAuthStateChangeListener(this::updateAuthState); } @PluginMethod @@ -808,6 +807,14 @@ public void startActivityForResult(PluginCall call, Intent intent, String callba super.startActivityForResult(call, intent, callbackName); } + public void handleAuthStateChange() { + FirebaseUser user = implementation.getCurrentUser(); + JSObject userResult = FirebaseAuthenticationHelper.createUserResult(user); + JSObject result = new JSObject(); + result.put("user", (userResult == null ? JSONObject.NULL : userResult)); + notifyListeners(AUTH_STATE_CHANGE_EVENT, result, true); + } + @Override protected void handleOnActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.handleOnActivityResult(requestCode, resultCode, data); @@ -817,14 +824,6 @@ protected void handleOnActivityResult(int requestCode, int resultCode, @Nullable implementation.handleOnActivityResult(requestCode, resultCode, data); } - private void updateAuthState() { - FirebaseUser user = implementation.getCurrentUser(); - JSObject userResult = FirebaseAuthenticationHelper.createUserResult(user); - JSObject result = new JSObject(); - result.put("user", (userResult == null ? JSONObject.NULL : userResult)); - notifyListeners(AUTH_STATE_CHANGE_EVENT, result, true); - } - @ActivityCallback private void handleGoogleAuthProviderSignInActivityResult(@Nullable PluginCall call, @Nullable ActivityResult result) { if (call == null || result == null) { diff --git a/packages/authentication/ios/Plugin/FirebaseAuthentication.swift b/packages/authentication/ios/Plugin/FirebaseAuthentication.swift index cf11a100..2514ac78 100644 --- a/packages/authentication/ios/Plugin/FirebaseAuthentication.swift +++ b/packages/authentication/ios/Plugin/FirebaseAuthentication.swift @@ -7,7 +7,6 @@ public typealias AuthStateChangedObserver = () -> Void // swiftlint:disable type_body_length @objc public class FirebaseAuthentication: NSObject { - public var authStateObserver: AuthStateChangedObserver? private let plugin: FirebaseAuthenticationPlugin private let config: FirebaseAuthenticationConfig private var appleAuthProviderHandler: AppleAuthProviderHandler? @@ -27,7 +26,7 @@ public typealias AuthStateChangedObserver = () -> Void } self.initAuthProviderHandlers(config: config) Auth.auth().addStateDidChangeListener {_, _ in - self.authStateObserver?() + self.plugin.handleAuthStateChange() } } diff --git a/packages/authentication/ios/Plugin/FirebaseAuthenticationPlugin.swift b/packages/authentication/ios/Plugin/FirebaseAuthenticationPlugin.swift index 13b7eac2..8c9aca87 100644 --- a/packages/authentication/ios/Plugin/FirebaseAuthenticationPlugin.swift +++ b/packages/authentication/ios/Plugin/FirebaseAuthenticationPlugin.swift @@ -41,9 +41,6 @@ public class FirebaseAuthenticationPlugin: CAPPlugin { override public func load() { self.implementation = FirebaseAuthentication(plugin: self, config: firebaseAuthenticationConfig()) - self.implementation?.authStateObserver = { [weak self] in - self?.handleAuthStateChange() - } } @objc func applyActionCode(_ call: CAPPluginCall) {