auth0-android
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAuth0 Android Integration
Auth0 Android 集成
Add authentication to Android applications using .
com.auth0.android:auth0Agent instruction: Before providing SDK setup instructions, fetch the latest release version by running:gh api repos/auth0/Auth0.Android/releases/latest --jq '.tag_name'Use the returned version in alldependency lines instead of any hardcoded version below. If the command fails, fall back to checking https://github.com/auth0/Auth0.Android/releases.implementation
使用为Android应用添加认证功能。
com.auth0.android:auth0Agent 指令: 在提供SDK设置说明前,运行以下命令获取最新版本:gh api repos/auth0/Auth0.Android/releases/latest --jq '.tag_name'将返回的版本替换以下所有依赖行中的硬编码版本。如果命令执行失败,可查看https://github.com/auth0/Auth0.Android/releases获取最新版本。implementation
Prerequisites
前提条件
- Android API 21 or higher
- Kotlin or Java project
- Auth0 account with a Native application configured
- If you don't have Auth0 set up, see auth0-quickstart
- Android API 21 或更高版本
- Kotlin 或 Java 项目
- 已配置原生应用的Auth0账号
- 若未设置Auth0,请查看auth0-quickstart
When NOT to Use
不适用于以下场景
- React Native apps: Use auth0-react-native
- Flutter apps: Use the native Flutter Auth0 SDK
- Web SPAs (React, Angular, Vue): Use auth0-react, auth0-angular, or auth0-vue
- Node.js/Express servers: Use auth0-express
- iOS/macOS apps: Use auth0-swift
- React Native 应用:使用auth0-react-native
- Flutter 应用:使用Flutter Auth0原生SDK
- Web单页应用(SPA)(React、Angular、Vue):使用auth0-react、auth0-angular或auth0-vue
- Node.js/Express 服务器:使用auth0-express
- iOS/macOS 应用:使用auth0-swift
Quick Start Workflow
快速开始流程
-
Install SDK: Add the Auth0 Android SDK dependency to your:
build.gradlegradleimplementation 'com.auth0.android:auth0:{LATEST_VERSION}' -
Configure Auth0:Agent instruction: Check whether the user prompt already includes both Auth0 Client ID and Domain.
- If both are provided, proceed directly to Manual Setup in Setup Guide using those values.
- If either is missing, you MUST ask the user BEFORE writing any code or files:
- Question: "How would you like to configure Auth0 for this project?"
- Options: "Automatic setup (Recommended) — Auth0 CLI creates the app and writes credentials to strings.xml" / "Manual setup — I'll provide my Client ID and Domain"
Then follow Setup Guide for the chosen path. Do NOT proceed to step 3 until Auth0 credentials are confirmed.Note: For native Android apps, Domain and Client ID are public configuration (not secrets). No client secret is used. Write values directly towithout displaying them in conversation output.strings.xml -
Initialize: Create an Auth0 account instance:kotlin
import com.auth0.android.Auth0 val account = Auth0.getInstance(context) -
Add Auth UI: Implement login and logout with Web Auth:Agent instruction: Before adding new UI elements, search the project for existing click handlers for login, logout, sign-in, or sign-out buttons (e.g.,,
loginButton,signInButton,logoutButton, orsignOutButtonwith auth-related naming). If existing handlers are found, hook the Auth0 code into them without modifying the existing UI. Only create new buttons if no existing handlers are found.setOnClickListenerLogin:kotlinimport com.auth0.android.Auth0 import com.auth0.android.authentication.AuthenticationAPIClient import com.auth0.android.authentication.storage.SecureCredentialsManager import com.auth0.android.authentication.storage.SharedPreferencesStorage import com.auth0.android.callback.Callback import com.auth0.android.authentication.AuthenticationException import com.auth0.android.provider.WebAuthProvider import com.auth0.android.result.Credentials val account = Auth0.getInstance(context) val authentication = AuthenticationAPIClient(account) val storage = SharedPreferencesStorage(context) val credentialsManager = SecureCredentialsManager(context, authentication, storage) WebAuthProvider.login(account) .withScheme(getString(R.string.com_auth0_scheme)) .withScope("openid profile email offline_access") .start(this, object : Callback<Credentials, AuthenticationException> { override fun onSuccess(result: Credentials) { // User authenticated val idToken = result.idToken val accessToken = result.accessToken // Store credentials securely credentialsManager.saveCredentials(result) } override fun onFailure(error: AuthenticationException) { // Handle authentication failure Log.e("Auth0", "Authentication failed", error) } })Logout:kotlinWebAuthProvider.logout(account) .withScheme(getString(R.string.com_auth0_scheme)) .start(this, object : Callback<Void?, AuthenticationException> { override fun onSuccess(result: Void) { // User logged out } override fun onFailure(error: AuthenticationException) { Log.e("Auth0", "Logout failed", error) } }) -
Build & Verify:Agent instruction: After completing the integration, build the project to verify it compiles successfully:bash
./gradlew assembleDebugIf the build fails, analyze the error output and fix the issues. Common integration build failures include:- Unresolved reference: Missing import statements — add the required imports
import com.auth0.android.* - Cannot resolve symbol :
R.string.com_auth0_schemenot updated — verifystrings.xml,com_auth0_scheme, andcom_auth0_client_identries existcom_auth0_domain - Incompatible types in callback: Callback type parameters don't match — ensure for login and
Callback<Credentials, AuthenticationException>for logoutCallback<Void?, AuthenticationException> - Unresolved : Missing dependency — add
lifecycleScopeor move code out of coroutine scopeimplementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.+' - minSdk too low: SDK requires API 21+ — update to at least 21
minSdkVersion - Java version mismatch: SDK requires Java 8 — add with
compileOptionsJavaVersion.VERSION_1_8
Re-run the build after each fix. Track the number of build-fix iterations.Failcheck: If the build still fails after 5–6 fix attempts, stop and ask the user:- Question: "The build is still failing after several fix attempts. How would you like to proceed?"
- Options: "Let the agent continue fixing iteratively" / "I'll fix it manually — show me the errors" / "Skip build verification and proceed"
Repeat this check after every 5–6 iterations if errors persist. Do not leave the project in a non-compiling state without the user's explicit consent.The callback URL must match your Auth0 application settings:{SCHEME}://{YOUR_AUTH0_DOMAIN}/android/{YOUR_APP_PACKAGE_NAME}/callback - Unresolved reference: Missing import statements — add the required
-
安装SDK:在中添加Auth0 Android SDK依赖:
build.gradlegradleimplementation 'com.auth0.android:auth0:{LATEST_VERSION}' -
配置Auth0:Agent 指令: 检查用户的提示是否已包含Auth0的Client ID和Domain。
- 若两者均已提供,直接使用这些值进入设置指南中的手动设置步骤。
- 若缺少其中任意一项,在编写代码或文件前必须询问用户:
- 问题:“您希望如何为该项目配置Auth0?”
- 选项:“自动设置(推荐)——Auth0 CLI创建应用并将凭证写入strings.xml” / “手动设置——我将提供自己的Client ID和Domain”
然后根据选择的方式遵循设置指南。 在确认Auth0凭证前,请勿进入步骤3。注意: 对于原生Android应用,Domain和Client ID是公开配置(非机密信息)。无需使用客户端密钥。直接将值写入,不要在对话输出中显示。strings.xml -
初始化:创建Auth0账号实例:kotlin
import com.auth0.android.Auth0 val account = Auth0.getInstance(context) -
添加认证UI:通过Web Auth实现登录和登出功能:Agent 指令: 在添加新UI元素前,搜索项目中已有的登录、登出按钮点击处理器(例如、
loginButton、signInButton、logoutButton或命名与认证相关的signOutButton)。若找到现有处理器,将Auth0代码接入其中,无需修改现有UI。仅当未找到现有处理器时,才创建新按钮。setOnClickListener登录:kotlinimport com.auth0.android.Auth0 import com.auth0.android.authentication.AuthenticationAPIClient import com.auth0.android.authentication.storage.SecureCredentialsManager import com.auth0.android.authentication.storage.SharedPreferencesStorage import com.auth0.android.callback.Callback import com.auth0.android.authentication.AuthenticationException import com.auth0.android.provider.WebAuthProvider import com.auth0.android.result.Credentials val account = Auth0.getInstance(context) val authentication = AuthenticationAPIClient(account) val storage = SharedPreferencesStorage(context) val credentialsManager = SecureCredentialsManager(context, authentication, storage) WebAuthProvider.login(account) .withScheme(getString(R.string.com_auth0_scheme)) .withScope("openid profile email offline_access") .start(this, object : Callback<Credentials, AuthenticationException> { override fun onSuccess(result: Credentials) { // 用户已认证 val idToken = result.idToken val accessToken = result.accessToken // 安全存储凭证 credentialsManager.saveCredentials(result) } override fun onFailure(error: AuthenticationException) { // 处理认证失败 Log.e("Auth0", "Authentication failed", error) } })登出:kotlinWebAuthProvider.logout(account) .withScheme(getString(R.string.com_auth0_scheme)) .start(this, object : Callback<Void?, AuthenticationException> { override fun onSuccess(result: Void) { // 用户已登出 } override fun onFailure(error: AuthenticationException) { Log.e("Auth0", "Logout failed", error) } }) -
构建与验证:Agent 指令: 完成集成后,构建项目以验证是否编译成功:bash
./gradlew assembleDebug若构建失败,分析错误输出并修复问题。常见的集成构建失败包括:- 未解析引用:缺少导入语句——添加所需的导入
import com.auth0.android.* - 无法解析符号:未更新
R.string.com_auth0_scheme——验证其中是否存在strings.xml、com_auth0_scheme和com_auth0_client_id条目com_auth0_domain - 回调中的类型不兼容:回调类型参数不匹配——确保登录使用,登出使用
Callback<Credentials, AuthenticationException>Callback<Void?, AuthenticationException> - 未解析:缺少依赖——添加
lifecycleScope或将代码移出协程作用域implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.+' - minSdk版本过低:SDK要求API 21+——将更新至至少21
minSdkVersion - Java版本不匹配:SDK要求Java 8——在中添加
compileOptionsJavaVersion.VERSION_1_8
每次修复后重新运行构建。记录构建-修复的迭代次数。失败检查: 若经过5-6次修复尝试后构建仍失败,请停止并询问用户:- 问题:“经过多次修复尝试后,构建仍失败。您希望如何继续?”
- 选项:“让Agent继续迭代修复” / “我将手动修复——显示错误信息” / “跳过构建验证继续”
若错误持续存在,每5-6次迭代后重复此检查。未经用户明确同意,请勿让项目处于无法编译的状态。回调URL必须与Auth0应用设置匹配:{SCHEME}://{YOUR_AUTH0_DOMAIN}/android/{YOUR_APP_PACKAGE_NAME}/callback - 未解析引用:缺少导入语句——添加所需的
Detailed Documentation
详细文档
- Setup Guide — Install SDK, configure Auth0 application, set up callback URLs, Android App Links, custom schemes, ProGuard/R8
- Integration Patterns — Web Auth login/logout, credential storage, biometric authentication, database login, passwordless authentication, MFA handling, custom tabs, error handling
- Testing & Reference — Testing checklist, common issues, security considerations, API reference
- 设置指南——安装SDK、配置Auth0应用、设置回调URL、Android应用链接、自定义Scheme、ProGuard/R8
- 集成模式——Web Auth登录/登出、凭证存储、生物识别认证、数据库登录、无密码认证、MFA处理、自定义标签页、错误处理
- 测试与参考——测试清单、常见问题、安全注意事项、API参考
Common Mistakes
常见错误
| Mistake | Fix |
|---|---|
| App type not set to Native in Auth0 Dashboard | Create a Native application type in your Auth0 tenant. The Android SDK requires Native app configuration, not Machine-to-Machine or other types. |
| Missing callback URL in Allowed Callback URLs | Add |
Missing | Add the INTERNET permission to |
| Custom scheme in lowercase | Android requires scheme names to be lowercase. Use |
Forgetting | Always call |
| Storing tokens in SharedPreferences without encryption | Use |
| Missing manifest placeholders | Add |
| 错误 | 修复方案 |
|---|---|
| Auth0控制台中应用类型未设置为Native | 在Auth0租户中创建Native类型的应用。Android SDK要求Native应用配置,不支持机器到机器或其他类型。 |
| 允许的回调URL中缺少回调URL | 将 |
缺少 | 在 |
| 自定义Scheme为大写 | Android要求Scheme名称为小写。推荐使用 |
直接调用认证接口时忘记 | 使用 |
| 在SharedPreferences中存储令牌时未加密 | 使用 |
| 缺少清单占位符 | 在 |
Related Skills
相关技能
- auth0-quickstart — Set up an Auth0 account and application
- auth0-mfa — Configure multi-factor authentication
- auth0-swift — iOS/macOS authentication
- auth0-cli — Manage Auth0 resources from the terminal
- auth0-quickstart——设置Auth0账号和应用
- auth0-mfa——配置多因素认证
- auth0-swift——iOS/macOS认证
- auth0-cli——通过终端管理Auth0资源
Quick Reference
快速参考
Core Classes
核心类
| Class | Purpose |
|---|---|
| Entry point for SDK, holds app credentials |
| OAuth 2.0 login/logout via browser |
| Direct API calls (database login, passwordless, MFA) |
| Secure storage and retrieval of credentials |
| User tokens and expiration |
| 类 | 用途 |
|---|---|
| SDK入口点,存储应用凭证 |
| 通过浏览器实现OAuth 2.0登录/登出 |
| 直接API调用(数据库登录、无密码登录、MFA) |
| 安全存储和获取凭证 |
| 用户令牌和过期信息 |
Common Use Cases
常见用例
- Log in with Web Auth
- Log out
- Store credentials securely
- Require biometric authentication
- Database login
- Passwordless authentication
- Handle MFA
- Call protected APIs
- 通过Web Auth登录
- 登出
- 安全存储凭证
- 要求生物识别认证
- 数据库登录
- 无密码认证
- 处理MFA
- 调用受保护的API