Android: Login

View on Github

Android: Login

Gravatar for
By Luciano Balmaceda

This tutorial demonstrates how to add user login to an Android application using Auth0. We recommend you to Log in to follow this quickstart with examples configured for your account.

I want to explore a sample app

2 minutes

Get a sample configured with your account settings or check it out on Github.

View on Github
System requirements: Android Studio 2.3 | Android SDK 25 | Emulator - Nexus 5X - Android 6.0

New to Auth? Learn How Auth0 works, how it integrates with Native Applications and which protocol it uses.

Configure Auth0

Get Your Application Keys

When you signed up for Auth0, a new application was created for you, or you could have created a new one.

You will need some details about that application to communicate with Auth0. You can get these details from the Application Settings section in the Auth0 dashboard.

You need the following information:

  • Domain
  • Client ID

If you download the sample from the top of this page these details are filled out for you.

If you have more than one application in your account, the sample comes with the values for your Default App.

App Dashboard

We suggest you do not hardcode these values as you may need to change them in the future. Instead, use String Resources, such as @string/com_auth0_domain, to define the values.

Edit your res/values/strings.xml file as follows:

    <string name="com_auth0_client_id">YOUR_CLIENT_ID</string>
    <string name="com_auth0_domain">YOUR_DOMAIN</string>

Configure Callback URLs

A callback URL is a URL in your application where Auth0 redirects the user after they have authenticated.

The callback URL for your app must be whitelisted in the Allowed Callback URLs field in your Application Settings. If this field is not set, users will be unable to log in to the application and will get an error.

If you are following along with the sample project you downloaded from the top of this page, you should set the Allowed Callback URL to demo://YOUR_DOMAIN/android/YOUR_APP_PACKAGE_NAME/callback.

Replace YOUR_APP_PACKAGE_NAME with your application's package name, available as the applicationId attribute in the app/build.gradle file.

Configure Logout URLs

A logout URL is a URL in your application that Auth0 can return to after the user has been logged out of the authorization server. This is specified in the returnTo query parameter.

The logout URL for your app must be whitelisted in the Allowed Logout URLs field in your Application Settings. If this field is not set, users will be unable to log out from the application and will get an error.

If you are following along with the sample project you downloaded from the top of this page, the logout URL you need to whitelist in the Allowed Logout URLs field is demo://YOUR_DOMAIN/android/YOUR_APP_PACKAGE_NAME/callback.

Replace `YOUR_APP_PACKAGE_NAME` with your application's package name, available as the `applicationId` attribute in the `app/build.gradle` file.

Add the Auth0 Android Dependency

Add the Auth0 Android SDK into your project. The library will make requests to the Auth0's Authentication and Management APIs.

Add Auth0 to Gradle

In your app's build.gradle dependencies section, add the following:

apply plugin: ''
android {
  // ...
dependencies {
  // Add the Auth0 Android SDK
  implementation ''

If Android Studio lints the + sign, or if you want to use a fixed version, check for the latest in Maven or JCenter.

Sync Project with Gradle Files

Remember to synchronize using the Android Studio prompt or run ./gradlew clean build from the command line. For more information about Gradle usage, check their official documentation.

Add manifest placeholders required by the SDK. The placeholders are used internally to define an intent-filter that captures the authentication callback URL.

To add the manifest placeholders, add the next line:

// app/build.gradle

apply plugin: ''
compileSdkVersion 28
android {
    defaultConfig {
        applicationId "com.auth0.samples"
        minSdkVersion 15
        targetSdkVersion 28
        // ...

        // ---> Add the next line
        manifestPlaceholders = [auth0Domain: "@string/com_auth0_domain", auth0Scheme: "demo"]
        // <---

You do not need to declare a specific intent-filter for your activity, because you have defined the manifest placeholders with your Auth0 Domain and Scheme values and the library will handle the redirection for you.

The AndroidManifest.xml file should look like this:

<!-- app/src/main/AndroidManifest.xml -->

<manifest xmlns:android=""

    <uses-permission android:name="android.permission.INTERNET" />


        <activity android:name="com.auth0.samples.MainActivity">
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />



Run Sync Project with Gradle Files inside Android Studio or execute ./gradlew clean assembleDebug from the command line.

For more information about using Gradle, check the Gradle official documentation.

Add Authentication with Auth0

Universal Login is the easiest way to set up authentication in your application. We recommend using it for the best experience, best security and the fullest array of features.

You can also embed the login dialog directly in your application using the Lock widget. If you use this method, some features, such as single sign-on, will not be accessible. To learn how to embed the Lock widget in your application, follow the Embedded Login sample. Make sure you read the Browser-Based vs. Native Login Flows on Mobile Devices article to learn how to choose between the two types of login flows.

In the onCreate method, create a new instance of the Auth0 class to hold user credentials and set it to be OIDC conformant.

You can use a constructor that receives an Android Context if you have added the following String resources:

  • R.string.com_auth0_client_id
  • R.string.com_auth0_domain
// app/src/main/java/com/auth0/samples/

private Auth0 auth0;

protected void onCreate(@Nullable Bundle savedInstanceState) {
    // ...
    auth0 = new Auth0(this);

Otherwise, use the constructor that receives both strings.

Finally, create a login method and use the WebAuthProvider class to authenticate with any connection you enabled on your application in the Auth0 dashboard.

// app/src/main/java/com/auth0/samples/

private void login() {
            .withAudience(String.format("https://%s/userinfo", getString(R.string.com_auth0_domain)))
            .start(MainActivity.this, new AuthCallback() {
                public void onFailure(@NonNull Dialog dialog) {
                    // Show error Dialog to user

                public void onFailure(AuthenticationException exception) {
                    // Show error to user

                public void onSuccess(@NonNull Credentials credentials) {
                    // Store credentials
                    // Navigate to your main activity

Future steps of this quickstart guide move the AuthCallback in-line instance into a class field named loginCallback.

After you call the WebAuthProvider#start function, the browser launches and shows the Lock widget. Once the user authenticates, the callback URL is called. The callback URL contains the final result of the authentication process.

There are many options to customize the authentication with the WebAuthProvider builder. You can read about them in the Auth0 SDK for Android documentation.

Mobile example screenshot


Use WebAuthProvider to remove the cookie set by the Browser at authentication time, so that the users are forced to re-enter their credentials the next time they try to authenticate.

Check in the LoginActivity if a boolean extra is present in the Intent at the Activity launch. This scenario triggered by the MainActivity dictates that the user wants to log out.

// app/src/main/java/com/auth0/samples/

private void logout() {
    Intent intent = new Intent(this, LoginActivity.class);
    intent.putExtra(LoginActivity.EXTRA_CLEAR_CREDENTIALS, true);


// app/src/main/java/com/auth0/samples/

protected void onCreate(Bundle savedInstanceState) {
    // ...
    if (getIntent().getBooleanExtra(EXTRA_CLEAR_CREDENTIALS, false)) {

private void logout() {
            .start(this, new VoidCallback() {
                public void onSuccess(Void payload) {

                public void onFailure(Auth0Exception error) {
                    // Show error to user

The logout is achieved by using the WebAuthProvider class. This call will open the Browser and navigate the user to the logout endpoint. If the log out is cancelled, you might want to take the user back to where they were before attempting to log out.

Future steps of this quickstart guide move the VoidCallback in-line instance into a class field named logoutCallback.

Use Auth0 for FREE