Abrova
☰ Docs menu · Ready-made sign-in screen

Ready-made sign-in screen

View as Markdown

Open Abrova's sign-in screen from your app with one call, like FirebaseUI: e-mail and password, magic link, Telegram, Google, Apple and guest, in English and Persian. No forms to build.

One call, no forms.

Every Abrova Auth SDK has a ready-made sign-in screen, like FirebaseUI. Your app opens it, the user signs in, and the app gets the signed-in user back. It shows only the methods you turned on in Abrova Auth › Sign-in methods, in English or Persian, and it lives inside the SDK: nothing more to install and nothing hosted.

Step 1: Open the screen#

It opens as a dialog on wide screens and tablets and as a full screen on phones. It answers the signed-in user, or nothing when the user closed it.

dart
// Flutter
import 'package:abrova_auth/abrova_auth_ui.dart';

final user = await AbrovaSignIn.show(context, options: const AbrovaSignInOptions(appName: 'My Shop'));
swift
// iOS (15 and later)
import AbrovaAuth

if let result = await AbrovaSignIn.present(from: self, options: AbrovaSignInOptions(appName: "My Shop")) {
    print(result.userId)
}
kotlin
// Android
AbrovaSignIn.show(this, options = AbrovaSignInOptions(appName = "My Shop")) { result ->
    if (result != null) Log.d("Auth", "signed in: ${result.userId}")
}
// or in a coroutine: val result = AbrovaSignIn.await(this)
typescript
// Web (any framework, or none)
import { openSignIn } from '@abrova/auth-web/ui';

const result = await openSignIn(auth, { appName: 'My Shop' });
tsx
// React Native
import { useAbrovaSignIn } from '@abrova/auth-react-native/ui';

const signIn = useAbrovaSignIn(auth, { appName: 'My Shop' });
// <Button title="Sign in" onPress={() => signIn.open()} /> and render {signIn.element}

The session is kept by the SDK as with any other sign-in, so currentUser, the token and the other Abrova SDKs work right away.

To put the form on a page of your own instead of a dialog: AbrovaSignInScreen (Flutter), AbrovaSignInView (iOS and Android), mountSignIn(element, auth) (Web), <AbrovaSignInScreen /> (React Native).

Step 2: Choose what it shows#

The screen asks Abrova which methods are on and shows only those. Some also need something from your app:

MethodShown when
E-mail and passwordIt is on. Includes create account and forgot password.
Magic linkIt is on and you pass magicLinkRedirectUrl, a link that opens your app. Your app finishes it with signInWithMagicLink(token), as without the screen.
TelegramIt is on. The user enters a phone number and the code Telegram sends.
Google, AppleIt is on and you pass a function that gets an ID token (see below).
GuestAnonymous sign-in is on and you pass allowGuest = true. Off by default: every guest is a new user and counts toward your plan’s monthly active users.

Step 3: Options#

OptionWhat it does
appName, logoThe title (“Sign in to My Shop”) and an image above it.
languageCodeen or fa (right to left). Default: the app’s or device’s language, English when it is neither.
allowGuestShows “Continue as guest”. Default off.
google, appleYour function that gets an ID token for the hashed nonce it is given. The button shows only when you pass it.
magicLinkRedirectUrlShows the magic link button. Must be one of the project’s allowed redirect URLs.
verifyRedirectUrl, resetRedirectUrlYour own pages for the confirm and reset links. Default: Abrova’s own pages.
openUrlOpens the Telegram bot link when the user must open the bot first. Without it the link is shown to copy.
color (Web, React Native)The button colour. On the web also CSS variables such as --abrova-accent.

The screen follows your app’s look: the theme on Flutter and Android, the tint on iOS, color on the web and React Native, and dark mode everywhere.

Google and Apple#

Google and Apple sign in through their own SDKs (on iOS, apple: AbrovaSignInOptions.nativeApple runs Sign in with Apple for you), as described in Google and Apple. Give the screen a small function: it receives the hashed nonce, runs your Google or Apple sign-in with it, and returns the ID token, or nothing when the user cancelled. The screen keeps the raw nonce and sends it to Abrova, so a captured token can't be replayed.

dart
AbrovaSignInOptions(
  google: (hashedNonce) async => /* your Google sign-in with this nonce */ idToken,
)

Language#

The screen is in English or Persian, from your app’s language or languageCode. While it is open, the e-mails it sends (confirm e-mail, password reset, magic link) use the same language, unless you set the client’s languageCode yourself. See Email templates to change their texts.

Safe by design#

  • Error messages come from the error code in the user’s language; Abrova’s technical messages are never shown.
  • One action at a time, and the screen can’t be closed while a sign-in is running, so no sign-in lands after the app was told “closed”.
  • The password is cleared when the user signs in and when the screen closes.
  • The Telegram bot link is opened only when it is an https://t.me address.
  • On the web the form lives in a shadow root and writes text only, so your page’s CSS can’t break it and nothing it shows can run as code.
SDK versions.

The ready-made screen needs Abrova Auth SDK 0.4.0: Flutter, iOS, Android, Web or React Native.

Next steps#

Was this page helpful?
Report a problem

Last updated: 8 Nov 2026