{"templateId":"markdown","sharedDataIds":{},"props":{"metadata":{"markdoc":{"tagList":["InteractiveLink","Notification","LightboxImage","CodeBlockCustom","CodeItem"]},"type":"markdown"},"seo":{"title":"Flutter quickstart","siteUrl":"https://developers.frontegg.com/","llmstxt":{"title":"Frontegg Developer Documentation","description":"Authentication, authorization, and user management for Customer Identity, plus Agen for SaaS and Agen for Work. Guides, SDKs, and API references.","sections":[{"title":"Customer Identity (CIAM)","description":"Auth, SSO, SCIM, entitlements, and user management — guides, SDKs, and APIs.","includeFiles":["ciam/**/*.md"],"excludeFiles":[]},{"title":"Agen for SaaS","description":"Agentic access and authorization for SaaS products.","includeFiles":["agen-for-saas/**/*.md"],"excludeFiles":[]},{"title":"Agen for Work","description":"Agentic access and authorization for internal and workforce use.","includeFiles":["agen-for-work/**/*.md"],"excludeFiles":[]},{"title":"Platform","description":"Shared platform overview.","includeFiles":["platform/**/*.md"],"excludeFiles":[]}],"excludeFiles":["internal-docs/**","ciam/guides/env-settings/inject-client-ip.md","CLAUDE.md",".claude/**","**/images/**"],"hide":false}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"flutter-quickstart","__idx":0},"children":["Flutter quickstart"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide is a walkthrough on how to integrate Frontegg’s authentication magic into your app using the Frontegg Flutter SDK. Whether you need to add secure sign-ups, logins, multi-factor authentication, or even social logins, this guide has you covered with simple, step-by-step instructions to get things rolling in no time."]},{"$$mdtype":"Tag","name":"InteractiveLink","attributes":{"href":"https://github.com/frontegg/frontegg-flutter","target":"_blank","justifyContent":"center"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Check out the sample package on GitHub"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"InteractiveLink","attributes":{"href":"https://pub.dev/packages/frontegg_flutter","target":"_blank","justifyContent":"center"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Or the package on pub.dev"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Notification","attributes":{"title":"Prerequisites","type":"attention"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Frontegg Hosted Login is required, and setting a ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ciam/guides/env-settings/custom-domain"},"children":["custom domain"]}," is highly recommended.",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"iOS ≥ 14",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"Android ≥ 26"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"prepare-your-frontegg-workspace","__idx":1},"children":["Prepare your Frontegg workspace"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Navigate to ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://portal.frontegg.com/development/settings"},"children":["Frontegg Portal Settings"]},", If you don't have application",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"follow the integration steps after signing up. Copy ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggDomain"]}," to future steps from ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://portal.frontegg.com/development/settings/domains"},"children":["Frontegg Portal Domain"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"LightboxImage","attributes":{"isLightbox":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/new-frontegg-domain.60f517108b4c93feb0326bd54894cfac97dcc0d10d29d12eb2cf4ef068816e5f.14341b2b.png","alt":"frontegg-domain"},"children":[]}]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Navigate to ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://portal.frontegg.com/development/authentication/hosted"},"children":["Login Method Settings"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Toggle on Hosted login method for iOS:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{{IOS_BUNDLE_IDENTIFIER}}://{{FRONTEGG_BASE_URL}}/ios/oauth/callback"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Toggle Hosted login method for Android:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{{ANDROID_PACKAGE_NAME}}://{{FRONTEGG_BASE_URL}}/android/oauth/callback"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://{{FRONTEGG_BASE_URL}}/oauth/account/redirect/android/{{ANDROID_PACKAGE_NAME}}"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IOS_BUNDLE_IDENTIFIER"]}," with your application identifier"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FRONTEGG_BASE_URL"]}," with your Frontegg base url, without ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["https"]},", i.e ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggDomain"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ANDROID_PACKAGE_NAME"]}," with your android package name"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"add-frontegg-package-to-the-project","__idx":2},"children":["Add Frontegg package to the project"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["bash"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"dart pub add frontegg_flutter\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Or manually:"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["yaml"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"dependencies:\n  frontegg_flutter: ^1.0.0\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"setup-ios-project","__idx":3},"children":["Setup iOS project"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To setup your SwiftUI application to communicate with Frontegg, you have to create a new file named ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Frontegg.plist"]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"under your root project directory, this file will store values to be used variables by Frontegg SDK:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["yaml"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <key>baseUrl</key>\n        <string>https://[DOMAIN_HOST_FROM_PREVIOUS_STEP]</string>\n        <key>clientId</key>\n        <string>[CLIENT_ID_FROM_PREVIOUS_STEP]</string>\n    </dict>\n</plist>\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"multi-apps-ios-support","__idx":4},"children":["Multi-apps iOS support"]},{"$$mdtype":"Tag","name":"Notification","attributes":{"title":"Prerequisites","type":"attention"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The use of this feature requires @frontegg/flutter@1.0.1"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide outlines the steps to configure your iOS application to support multiple applications."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Modify the Frontegg.plist file and add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["applicationId"]}," to Frontegg.plist file:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["xml"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"<plist version=\"1.0\">\n  <dict>\n    <key>applicationId</key>  \n    <string>your-application-id-uuid</string>\n    <key>baseUrl</key>\n    <string>https://your-domain.fronteg.com</string>\n    <key>clientId</key>\n    <string>your-client-id-uuid</string>\n  </dict>\n</plist>\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"handle-open-app-with-url","__idx":5},"children":["Handle open app with URL"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To handle Login with magic link and other authentication methods that require to open the app with a URL, you have to add the following code to."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"for-objective-c","__idx":6},"children":["For ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Objective-C"]}]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggSwiftAdapter.swift"]}," in your project and add the following code:"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["objective-c"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"//  FronteggSwiftAdapter.swift\n\n   import Foundation\n   import FronteggSwift\n\n   @objc(FronteggSwiftAdapter)\n   public class FronteggSwiftAdapter: NSObject {\n       @objc public static let shared = FronteggSwiftAdapter()\n\n       @objc public func handleOpenUrl(_ url: URL) -> Bool {\n           return FronteggAuth.shared.handleOpenUrl(url)\n       }\n   }\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AppDelegate.m"]}," file and import swift headers:"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["objective-c"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"#import <[YOUR_PROJECT_NAME]-Swift.h>\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":3},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add URL handlers to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AppDelegate.m"]},":"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["objective-c"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"#import <[YOUR_PROJECT_NAME]-Swift.h>\n\n   // ...CODE...\n\n   - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url\n           options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options\n   {\n     \n     if([[FronteggSwiftAdapter shared] handleOpenUrl:url] ){\n       return TRUE;\n     }\n     return [RCTLinkingManager application:app openURL:url options:options];\n   }\n\n   - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity\n    restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler\n   {\n     \n     if (userActivity.webpageURL != NULL){\n       if([[FronteggSwiftAdapter shared] handleOpenUrl:userActivity.webpageURL] ){\n         return TRUE;\n       }\n     }\n    return [RCTLinkingManager application:application\n                     continueUserActivity:userActivity\n                       restorationHandler:restorationHandler];\n   }\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":5,"id":"for-swift","__idx":7},"children":["For ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Swift"]}]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AppDelegate.m"]}," file and import swift headers:"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["swift"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"import FronteggSwift\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add URL handlers to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AppDelegate.swift"]},":"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["swift"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"import UIKit\n   import FronteggSwift\n\n   @UIApplicationMain\n   class AppDelegate: UIResponder, UIApplicationDelegate {\n\n       /*\n        * Called when the app was launched with a url. Feel free to add additional processing here,\n        * but if you want the App API to support tracking app url opens, make sure to keep this call\n        */\n       func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {\n           \n           if(FronteggAuth.shared.handleOpenUrl(url, true)){\n               return true\n           }\n           \n           return ApplicationDelegateProxy.shared.application(app, open: url, options: options)\n       }\n       \n       /*\n        * Called when the app was launched with an activity, including Universal Links.\n        * Feel free to add additional processing here, but if you want the App API to support\n        * tracking app url opens, make sure to keep this call\n        */\n       func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {\n           \n           if let url = userActivity.webpageURL {\n               if(FronteggAuth.shared.handleOpenUrl(url, true)){\n                   return true\n               }\n           }\n           return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)\n       }\n   }\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"configure-ios-associated-domain","__idx":8},"children":["Configure iOS associated domain"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Configuring your iOS associated domain is required for Magic Link authentication / Reset Password / Activate Account."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In order to add your iOS associated domain to your Frontegg application, you will need to update in each of your",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"integrated Frontegg Environments the iOS associated domain that you would like to use with that Environment. Send a POST request to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.frontegg.com/vendors/resources/associated-domains/v1/ios"]}," with the following payload:"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["cURL"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"{\n    \"appId\":[YOUR_ASSOCIATED_DOMAIN]\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In order to use our API’s, follow ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ciam/api/overview"},"children":["this guide"]}," to generate a vendor token."]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Next, you will need to add your associated domain to your iOS application. To do so, follow the steps below:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open your project in Xcode."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select your project in the Project Navigator."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select your target."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select the Signing & Capabilities tab."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Expand the Associated Domains section."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click the + button."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enter your associated domain in the format ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["applinks:[YOUR_ASSOCIATED_DOMAIN]"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enter your associated domain in the format ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webcredentials:[YOUR_ASSOCIATED_DOMAIN]"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click Done."]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[YOUR_ASSOCIATED_DOMAIN]"]}," is the associated domain that you would like to use with your iOS application.",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"For example, if you would like to use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://example.com"]}," as your associated domain, you would enter ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["applinks:example.com"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webcredentials:example.com"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"setup-android-project","__idx":9},"children":["Setup Android project"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To set up your Android minimum sdk version, open root gradle file at",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["android/build.gradle"]},", and add/edit the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["minSdkVersion"]}," under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["buildscript.ext"]},":"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["groovy"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"buildscript {\n    ext {\n        minSdkVersion = 26\n        // ...\n    }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"configure-build-config-fields","__idx":10},"children":["Configure build config fields"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To set up your Android application on to communicate with Frontegg, you have to add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["buildConfigField"]}," property the",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"gradle ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["android/app/build.gradle"]},". This property will store frontegg hostname (without https) and client id from previous step:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["groovy"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"def fronteggDomain = \"FRONTEGG_DOMAIN_HOST.com\" // without protocol https://\ndef fronteggClientId = \"FRONTEGG_CLIENT_ID\"\n\nandroid {\n    defaultConfig {\n\n        manifestPlaceholders = [\n                \"package_name\" : applicationId,\n                \"frontegg_domain\" : fronteggDomain,\n                \"frontegg_client_id\": fronteggClientId\n        ]\n\n        buildConfigField \"String\", 'FRONTEGG_DOMAIN', \"\\\"$fronteggDomain\\\"\"\n        buildConfigField \"String\", 'FRONTEGG_CLIENT_ID', \"\\\"$fronteggClientId\\\"\"\n        buildConfigField \"Boolean\", 'FRONTEGG_USE_ASSETS_LINKS', \"true\" /** For using frontegg domain for deeplinks **/\n        buildConfigField \"Boolean\", 'FRONTEGG_USE_CHROME_CUSTOM_TABS', \"true\"  /** For using custom chrome tab for social-logins **/\n    }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["NOTE:"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FRONTEGG_USE_ASSETS_LINKS"]}," by default is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},".",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FRONTEGG_USE_CHROME_CUSTOM_TABS"]}," by default is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["So, if you do not set up those values we will use the default ones."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bundleConfig=true"]}," if it does not exist inside the android section inside the app gradle ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["android/app/build.gradle"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["groovy"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"android {\n  buildFeatures {\n    buildConfig = true\n  }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"add-permissions-to-androidmanifestxml","__idx":11},"children":["Add permissions to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AndroidManifest.xml"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INTERNET"]}," permission to the app's manifest file."]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["xml"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"<uses-permission android:name=\"android.permission.INTERNET\"/>\n<uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\"/>\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"configure-android-assetlinks","__idx":12},"children":["Configure Android AssetLinks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Configuring your Android ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AssetLinks"]}," is required for Magic Link authentication / Reset Password / Activate Account /",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"login with IdPs."]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To add your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AssetLinks"]}," to your Frontegg application, you will need to update in each of your integrated Frontegg",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"Environments the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AssetLinks"]}," that you would like to use with that Environment. Send a POST request to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.frontegg.com/vendors/resources/associated-domains/v1/android"]}," with the following payload:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["cURL"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"{\n    \"packageName\": \"YOUR_APPLICATION_PACKAGE_NAME\",\n    \"sha256CertFingerprints\": [\"YOUR_KEYSTORE_CERT_FINGERPRINTS\"]\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each Android app has multiple certificate fingerprint, to get your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DEBUG"]}," sha256CertFingerprint you have to run the",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"below command. For Debug mode, run the following command and copy the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SHA-256"]}," value."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["NOTE:"]}," make sure to choose the Variant and Config equals to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["debug"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["basj"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"./gradlew signingReport\n\n###################\n#  Example Output:\n###################\n\n#  Variant: debug\n#  Config: debug\n#  Store: /Users/davidfrontegg/.android/debug.keystore\n#  Alias: AndroidDebugKey\n#  MD5: 25:F5:99:23:FC:12:CA:10:8C:43:F4:02:7D:AD:DC:B6\n#  SHA1: FC:3C:88:D6:BF:4E:62:2E:F0:24:1D:DB:D7:15:36:D6:3E:14:84:50\n#  SHA-256: D9:6B:4A:FD:62:45:81:65:98:4D:5C:8C:A0:68:7B:7B:A5:31:BD:2B:9B:48:D9:CF:20:AE:56:FD:90:C1:C5:EE\n#  Valid until: Tuesday, 18 June 2052\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For Release mode, Extract the SHA256 using keytool from your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Release"]}," keystore file:"]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["bash"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"keytool -list -v -keystore /PATH/file.jks -alias YourAlias -storepass *** -keypass ***\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"enabling-chrome-custom-tabs-for-social-login","__idx":13},"children":["Enabling chrome custom tabs for social login"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To enable social login using Chrome Custom Tabs within your Android application, you need to modify the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["android/app/build.gradle"]}," file. Add a boolean ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["buildConfigField"]}," for the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FRONTEGG_USE_CHROME_CUSTOM_TABS"]}," flag and set it to true. By default, the SDK defaults to using the Chrome browser for social login."]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["groovy"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"def fronteggDomain = \"FRONTEGG_DOMAIN_HOST.com\" // without protocol https://\ndef fronteggClientId = \"FRONTEGG_CLIENT_ID\"\n\nandroid {\n   defaultConfig {\n\n       manifestPlaceholders = [\n               \"package_name\" : applicationId,\n               \"frontegg_domain\" : fronteggDomain,\n               \"frontegg_client_id\": fronteggClientId\n       ]\n\n       buildConfigField \"String\", 'FRONTEGG_DOMAIN', \"\\\"$fronteggDomain\\\"\"\n       buildConfigField \"String\", 'FRONTEGG_CLIENT_ID', \"\\\"$fronteggClientId\\\"\"\n       \n       buildConfigField \"Boolean\", 'FRONTEGG_USE_CHROME_CUSTOM_TABS', \"true\"\n   }\n   \n   \n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"multi-apps-android-support","__idx":14},"children":["Multi-apps Android support"]},{"$$mdtype":"Tag","name":"Notification","attributes":{"title":"Prerequisites","type":"attention"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The use of this feature requires minimum @frontegg/flutter@1.0.1"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Modify the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Build.gradle"]}," file and add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FRONTEGG_APPLICATION_ID"]}," buildConfigField into the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["build.gradle"]}," file:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["groovy"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"def fronteggApplicationId = \"your-application-id-uuid\"\n...\nandroid {\n    ...\n    buildConfigField \"String\", 'FRONTEGG_APPLICATION_ID', \"\\\"$fronteggApplicationId\\\"\"\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"wrap-your-root-widget-with-fronteggprovider","__idx":15},"children":["Wrap your root widget with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggProvider"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"import 'package:flutter/material.dart';\nimport 'package:frontegg_flutter/frontegg_flutter.dart';\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: FronteggProvider(\n        child: const MainPage(),\n      ),\n    );\n  }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Or use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Provider"]}," from the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://pub.dev/packages/provider"},"children":["plugin"]}," or other suitable plugin. Make sure to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dispose"]}," of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggFlutter"]},":"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"import 'package:flutter/material.dart';\nimport 'package:frontegg_flutter/frontegg_flutter.dart';\nimport 'package:provider/provider.dart';\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: Provider(\n        create: (_) => FronteggFlutter(),\n        dispose: (_, frontegg) => frontegg.dispose(),\n        child: const MainPage(),\n      ),\n    );\n  }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"access-the-frontegg-instance","__idx":16},"children":["Access the Frontegg instance"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To get the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggFlutter"]}," instance use the Frontegg BuildContext extension down the widget tree:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"class MainPage extends StatelessWidget {\n  const MainPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final frontegg = context.frontegg;\n    return const SizedBox();\n  }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"login-with-frontegg","__idx":17},"children":["Login with Frontegg"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To login with Frontegg you can use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["context"]},".",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["frontegg"]}," accessor and call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["login"]}," method:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"class MainPage extends StatelessWidget {\n  const MainPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final frontegg = context.frontegg;\n    return Scaffold(\n      body: Center(\n        child: ElevatedButton(\n          child: const Text(\"Login\"),\n          onPressed: () async {\n            await frontegg.login();\n          },\n        ),\n      ),\n    );\n  }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"switch-users-tenant","__idx":18},"children":["Switch user's tenant"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To switch a user's tenant you can use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["context"]},".",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["frontegg"]}," accessor and call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["switchTenant"]}," method:"]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"class MainPage extends StatelessWidget {\n  const MainPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final frontegg = context.frontegg;\n    return Scaffold(\n      body: Center(\n        child: ElevatedButton(\n          child: const Text(\"Login\"),\n          onPressed: () async {\n            final tenantId = \"TENANT_ID\";\n            await frontegg.switchTenant(tenantId);\n          },\n        ),\n      ),\n    );\n  }\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"frontegg-state","__idx":19},"children":["Frontegg state"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggPlugin"]}," has a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggState"]}," and this state is changing according to the plugin flowing:"," ",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"class FronteggState {\n  final String? accessToken;\n  final String? refreshToken;\n  final FronteggUser? user;\n  final bool isAuthenticated;\n  final bool isLoading;\n  final bool initializing;\n  final bool showLoader;\n  final bool appLink;\n}\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To get the state of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggFlutter"]}," you have two options:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Get ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["currentState"]},":"]}]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"@override\n    Widget build(BuildContext context) {\n      final frontegg = context.frontegg;\n      final fronteggState = frontegg.currentState;\n    }\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Listen to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["stateChanged"]}," stream:"]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"CodeBlockCustom","attributes":{"tabs":["dart"]},"children":[{"$$mdtype":"Tag","name":"CodeItem","attributes":{},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"import 'package:flutter/material.dart';\nimport 'package:frontegg_flutter/frontegg_flutter.dart';\nimport 'package:frontegg_flutter_example/login_page.dart';\nimport 'package:frontegg_flutter_example/user_page.dart';\n\n    class MainPage extends StatelessWidget {\n      const MainPage({super.key});\n\n      @override\n      Widget build(BuildContext context) {\n        final frontegg = context.frontegg;\n        return Scaffold(\n          body: Center(\n            child: StreamBuilder<FronteggState>(\n              stream: frontegg.stateChanged,\n              builder: (BuildContext context, AsyncSnapshot<FronteggState> snapshot) {\n                if (snapshot.hasData) {\n                  final state = snapshot.data!;\n                  if (state.isAuthenticated && state.user != null) {\n                    return const UserPage();\n                  } else if (state.initializing) {\n                    return const CircularProgressIndicator();\n                  } else {\n                    return const LoginPage();\n                  }\n                }\n\n                return const SizedBox();\n              },\n            ),\n          ),\n        );\n      }\n    }\n"},"children":[]}]}]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"other-frontegg-functionalities","__idx":20},"children":["Other Frontegg functionalities"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["logout"]}," - logs out from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FronteggFlutter"]},";"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["refreshToken"]}," - refreshes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["accessToken"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["refreshToken"]}," only if needed, returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," if refreshing succeeds;"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getConstants"]}," - returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Frontegg Flutter"]}," initialization constants;"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["directLoginAction"]}," - direct login with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data"]},"."]}]}]},"headings":[{"value":"Flutter quickstart","id":"flutter-quickstart","depth":2},{"value":"Prepare your Frontegg workspace","id":"prepare-your-frontegg-workspace","depth":3},{"value":"Add Frontegg package to the project","id":"add-frontegg-package-to-the-project","depth":3},{"value":"Setup iOS project","id":"setup-ios-project","depth":3},{"value":"Multi-apps iOS support","id":"multi-apps-ios-support","depth":4},{"value":"Handle open app with URL","id":"handle-open-app-with-url","depth":4},{"value":"For Objective-C","id":"for-objective-c","depth":5},{"value":"For Swift","id":"for-swift","depth":5},{"value":"Configure iOS associated domain","id":"configure-ios-associated-domain","depth":4},{"value":"Setup Android project","id":"setup-android-project","depth":3},{"value":"Configure build config fields","id":"configure-build-config-fields","depth":4},{"value":"Add permissions to AndroidManifest.xml","id":"add-permissions-to-androidmanifestxml","depth":4},{"value":"Configure Android AssetLinks","id":"configure-android-assetlinks","depth":4},{"value":"Enabling chrome custom tabs for social login","id":"enabling-chrome-custom-tabs-for-social-login","depth":4},{"value":"Multi-apps Android support","id":"multi-apps-android-support","depth":4},{"value":"Wrap your root widget with FronteggProvider","id":"wrap-your-root-widget-with-fronteggprovider","depth":3},{"value":"Access the Frontegg instance","id":"access-the-frontegg-instance","depth":3},{"value":"Login with Frontegg","id":"login-with-frontegg","depth":3},{"value":"Switch user's tenant","id":"switch-users-tenant","depth":3},{"value":"Frontegg state","id":"frontegg-state","depth":3},{"value":"Other Frontegg functionalities","id":"other-frontegg-functionalities","depth":3}],"frontmatter":{"seo":{"title":"Flutter quickstart"}},"lastModified":"2025-11-04T13:25:50.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/ciam/sdks/mobile/flutter/login-old","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}