native_authentication

A Dart-only library for performing authentication flows using native APIs.

The platform implementations for NativeAuthentication are:

Platform Implementation
iOS/macOS ASWebAuthenticationSession
Android Auth Tabs
Linux/Windows Localhost HTTP server
Web HTTP Redirects

Android

NOTE: For HTTPS callbacks to work correctly, you must enable domain verification.

The Android implementation uses Auth Tabs for authentication, which is an improvement to Custom Tabs. When Auth Tabs are available, no extra configuration is needed to use either a custom scheme or an HTTPS URL as a callback. However, when the Auth Tabs feature is not available the implementation will fall back to Custom Tabs, so it is recommended to update your AndroidManifest.xml with one of the following configurations to ensure that the authentication flow works correctly.

Start by modifying your AndroidManifest.xml to enable the OnBackInvokedCallback feature, which is required for handling the back button correctly in the authentication flow. Add the following line to your <application> tag:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:label="My App"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
+        android:enableOnBackInvokedCallback="true">

Then, to configure a custom scheme, add the following to your AndroidManifest.xml application tag:

<activity
        android:name="dev.celest.native_authentication.CallbackReceiverActivity"
        android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <!-- Update this -->
        <data android:scheme="my-app" />
    </intent-filter>
</activity>

To configure an HTTPS URL, for example to support App Links, add the following to your AndroidManifest.xml application tag:

<activity
        android:name="dev.celest.native_authentication.CallbackReceiverActivity"
        android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <!-- Update this -->
        <data android:scheme="https"
              android:host="app.example.com"
              android:path="/auth/callback"/>
    </intent-filter>
</activity>