From cf04e6529da4d858071b9e4326fbedcaae055707 Mon Sep 17 00:00:00 2001 From: Leonel Galan <727774+leonelgalan@users.noreply.github.com> Date: Wed, 25 Feb 2026 18:45:45 -0600 Subject: [PATCH 1/2] Add handleSignInLink for Android (feature parity with iOS) `handleSignInLink` is implemented on iOS and called from the JS bridge (`GlobalContext.tsx`) for deep link sign-in, but has no Android implementation. This means deep link sign-in silently fails on Android. Adds `@ReactMethod handleSignInLink(url)` to `RowndPluginModule.kt`. Uses reflection to call the internal `SignInLinkApi` since the Android SDK doesn't expose a public equivalent of iOS's `Rownd.handleSmartLink`. --- .../RowndPluginModule.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt b/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt index 7666a26..d80b433 100644 --- a/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt +++ b/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt @@ -118,6 +118,26 @@ class RowndPluginModule(reactContext: ReactApplicationContext) : ReactContextBas } } + @ReactMethod + fun handleSignInLink(url: String) { + val activity = reactApplicationContext.currentActivity ?: return + activity.intent = android.content.Intent( + android.content.Intent.ACTION_VIEW, + android.net.Uri.parse(url) + ) + try { + val apiGetter = Rownd.javaClass.getMethod("getSignInLinkApi\$android-release") + val api = apiGetter.invoke(Rownd) + val method = api.javaClass.getMethod( + "signInWithLinkIfPresentOnIntentOrClipboard\$android-release", + android.app.Activity::class.java + ) + method.invoke(api, activity) + } catch (e: Exception) { + Log.e("RowndPlugin", "handleSignInLink failed: ${e.message}") + } + } + @ReactMethod fun requestSignIn(signInConfig: ReadableMap) { val rowndSignInOptions = RowndSignInOptions() From d146981d21fb1cb5a4ed34703ddc61e4653d1371 Mon Sep 17 00:00:00 2001 From: Leonel Galan <727774+leonelgalan@users.noreply.github.com> Date: Wed, 25 Feb 2026 19:35:21 -0600 Subject: [PATCH 2/2] fix: log full exception in handleSignInLink error handler Preserve stack trace by passing exception object to Log.e() instead of only logging the message string. This improves debugging for reflection, parsing, or SDK failures. --- .../main/java/com/reactnativerowndplugin/RowndPluginModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt b/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt index d80b433..6c8e413 100644 --- a/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt +++ b/android/src/main/java/com/reactnativerowndplugin/RowndPluginModule.kt @@ -134,7 +134,7 @@ class RowndPluginModule(reactContext: ReactApplicationContext) : ReactContextBas ) method.invoke(api, activity) } catch (e: Exception) { - Log.e("RowndPlugin", "handleSignInLink failed: ${e.message}") + Log.e("RowndPlugin", "handleSignInLink failed", e) } }