این کد لبه بخشی از دوره Advanced Android in Kotlin است. اگر از طریق کدها به ترتیب کار کنید، بیشترین ارزش را از این دوره خواهید گرفت، اما اجباری نیست. همه کدهای دوره در صفحه فرود Android Advanced in Kotlin Codelabs فهرست شده اند.
مقدمه
هنگام ساخت یک برنامه اندروید، مزایای بسیاری از پشتیبانی از ورود به سیستم برای کاربران شما وجود دارد. با اجازه دادن به کاربران برای ایجاد هویت در برنامه شما، می توانید راه های بیشتری برای تعامل با برنامه در اختیار آنها قرار دهید.
با حسابهای شخصیسازیشده، کاربران میتوانند تجربه درونبرنامهای خود را سفارشی کنند، با سایر کاربران ارتباط برقرار کنند، و اگر از برنامه در دستگاه دیگری (مانند وب یا تلفن جدید) استفاده میکنند، دادههایشان باقی بماند و منتقل شود.
در این کد لبه، اصول اولیه نحوه پشتیبانی از ورود به برنامه خود را با استفاده از کتابخانه FirebaseUI یاد خواهید گرفت. در میان بسیاری از موارد دیگر، کتابخانه FirebaseUI آن را برای توسعه دهندگانی که می خواهند یک جریان ورود ایجاد کنند ساده می کند و کار مدیریت حساب های کاربری را برای شما انجام می دهد.
آنچه از قبل باید بدانید
- اصول ساخت اپلیکیشن اندروید
- LiveData و ViewModel
چیزی که یاد خواهید گرفت
- چگونه Firebase را به پروژه خود اضافه کنید
- چگونه از ورود به برنامه اندروید خود پشتیبانی کنیم
- نحوه مشاهده وضعیت فعلی احراز هویت برنامه خود
- نحوه خروج کاربران
کاری که خواهی کرد
- از کنسول Firebase برای ادغام Firebase در برنامه خود استفاده کنید.
- قابلیت ورود را پیاده سازی کنید.
- برای کاربرانی که وارد شده اند، سفارشی سازی ها را در برنامه اضافه کنید.
- پیاده سازی خروج کاربران
درباره LiveData و ViewModel بیشتر بیاموزید
برای برنامه موجود در این کد لبه، به درک اولیه LiveData و ViewModel نیاز دارید. اگر میخواهید مروری کوتاه بر این مفاهیم داشته باشید، مرورهای LiveData و ViewModel را مطالعه کنید.
همچنین میتوانید دوره توسعه برنامههای اندروید با کاتلین را طی کنید تا در مورد موضوعات اساسی اندروید که به عنوان بخشی از این کد با آنها مواجه میشوید آشنا شوید. این دوره هم به عنوان دوره Udacity و هم یک دوره کد لبه موجود است.
در این نرم افزار کد، برنامه ای خواهید ساخت که حقایق سرگرم کننده اندروید را نمایش می دهد. مهمتر از آن، برنامه دارای دکمه ورود/خروج است. هنگامی که کاربر وارد برنامه می شود، هر واقعیت اندرویدی نمایش داده شده شامل یک تبریک برای کاربر به عنوان راهی برای افزودن لمس شخصی سازی می شود.


نمونه برنامه را دانلود کنید، می توانید یکی از موارد زیر را:
... یا با استفاده از دستور زیر مخزن GitHub را از خط فرمان کلون کنید و به شاخه start مخزن بروید:
$ git clone https://github.com/googlecodelabs/android-kotlin-login
مهم: از آنجایی که برنامه را برای استفاده از Firebase ادغام خواهید کرد، برنامه شروع کننده برای ساخت و اجرا به تنظیماتی نیاز دارد. شما این کار را در مرحله بعدی Codelab انجام خواهید داد.
مرحله 1: یک پروژه Firebase ایجاد کنید
قبل از اینکه بتوانید Firebase را به برنامه Android خود اضافه کنید، باید یک پروژه Firebase برای اتصال به برنامه Android خود ایجاد کنید.
- در کنسول Firebase ، روی افزودن پروژه کلیک کنید.
- نام پروژه را انتخاب یا وارد کنید. شما می توانید نام پروژه خود را هر چیزی نامگذاری کنید، اما سعی کنید نامی را انتخاب کنید که مربوط به اپلیکیشنی باشد که در حال ساخت آن هستید.
- روی Continue کلیک کنید.
- می توانید از تنظیم Google Analytics صرف نظر کرده و گزینه Not Right Now را انتخاب کنید.
- برای پایان راهاندازی پروژه Firebase، روی Create Project کلیک کنید.
مرحله 2: برنامه خود را در Firebase ثبت کنید
اکنون که یک پروژه Firebase دارید، می توانید برنامه اندروید خود را به آن اضافه کنید.
- در مرکز صفحه نمای کلی پروژه کنسول Firebase ، روی نماد Android کلیک کنید تا گردش کار راه اندازی راه اندازی شود.
- شناسه برنامه برنامه خود را در قسمت نام بسته Android وارد کنید. مطمئن شوید شناسه ای را که برنامه شما استفاده می کند وارد کرده اید، زیرا نمی توانید پس از ثبت برنامه خود در پروژه Firebase، این مقدار را اضافه یا تغییر دهید.
- شناسه برنامه گاهی اوقات به عنوان نام بسته نامیده می شود.
- این شناسه برنامه را در فایل Gradle ماژول (سطح برنامه)، معمولاً
app/build.gradle(شناسه مثال:com.yourcompany.yourproject) پیدا کنید. - گواهی امضای اشکال زدایی SHA-1 را وارد کنید. می توانید این کلید را با وارد کردن دستور زیر در ترمینال خط فرمان خود ایجاد کنید.
keytool -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android
- روی ثبت برنامه کلیک کنید.
مرحله 3: فایل پیکربندی Firebase را به پروژه خود اضافه کنید
فایل پیکربندی Firebase Android را به برنامه خود اضافه کنید:
- برای دریافت فایل پیکربندی Android Firebase (
google-services.json) روی Download google-services.json کلیک کنید.
- میتوانید فایل پیکربندی Android Firebase خود را دوباره در هر زمانی دانلود کنید.
- مطمئن شوید که فایل پیکربندی با کاراکترهای اضافی ضمیمه نشده باشد و فقط باید
google-services.jsonنام داشته باشد.
- فایل پیکربندی خود را به دایرکتوری ماژول (سطح برنامه) برنامه خود منتقل کنید.
مرحله 4: پروژه اندروید خود را برای فعال کردن محصولات Firebase پیکربندی کنید
- برای فعال کردن محصولات Firebase در برنامه خود، افزونه google-services را به فایلهای Gradle خود اضافه کنید.
- در فایل Gradle در سطح ریشه (سطح پروژه) خود (
build.gradle)، قوانینی را اضافه کنید تا افزونه Google Services را نیز شامل شود. بررسی کنید که مخزن Maven Google را نیز دارید.
build.gradle
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// ...
// Add the following line:
classpath 'com.google.gms:google-services:4.3.0' // Google Services plugin
}
}
allprojects {
// ...
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
// ...
}
}- در فایل Gradle ماژول (سطح برنامه) خود (معمولا
app/build.gradle)، یک خط به پایین فایل اضافه کنید.
app/build.gradle
apply plugin: 'com.android.application'
android {
// ...
}
// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services' // Google Play services Gradle pluginمرحله 4: وابستگی Firebase را اضافه کنید
در این Codelab دلیل اصلی ادغام Firebase داشتن راهی برای ایجاد و مدیریت کاربران است. برای این کار، باید یک کتابخانه Firebase اضافه کنید که به شما امکان می دهد لاگین را پیاده سازی کنید.
- وابستگی زیر را در فایل
build.gradle (Module:app)خود اضافه کنید تا بتوانید از SDK در برنامه خود استفاده کنید.firebase-authSDK اجازه می دهد تا کاربران احراز هویت شده برنامه شما را مدیریت کنید.
app/build.gradle:
implementation 'com.firebaseui:firebase-ui-auth:5.0.0'- پروژه خود را با فایلهای gradle همگامسازی کنید تا مطمئن شوید که همه وابستگیها برای برنامه شما در دسترس هستند. اگر از شما خواسته نشد، File > Sync Project with Gradle Files را در Android Studio یا از نوار ابزار انتخاب کنید.
مرحله 5: برنامه را اجرا کنید و کد را بررسی کنید
- برنامه را روی یک شبیه ساز یا دستگاه فیزیکی اجرا کنید تا مطمئن شوید که محیط شما با موفقیت برای شروع توسعه راه اندازی شده است.
اگر موفقیت آمیز بود، باید صفحه اصلی را ببینید که یک واقعیت سرگرم کننده اندروید و یک دکمه ورود به سیستم را در گوشه سمت چپ بالای صفحه نمایش می دهد. ضربه زدن روی دکمه ورود هنوز کاری انجام نمی دهد.
در سطح بالا، این یک برنامه فعالیت واحد با چند قطعه است. MainFragment شامل تمام رابط کاربری است که در صفحه زیر می بینید. (شما با LoginFragment و SettingsFragment در یک Codelab بعدی کار خواهید کرد.)

- با کد آشنا شوید. به ویژه توجه کنید:
-
FirebaseUserLiveDataکلاسی است که شما برای مشاهده کاربر فعلی Firebase مرتبط با برنامه پیاده سازی خواهید کرد. شما از نمونهFirebaseAuthبه عنوان نقطه ورود برای دریافت این اطلاعات کاربر در مرحله بعد استفاده خواهید کرد. -
MainFragmentبهLoginViewModelگره خورده است.LoginViewModelکلاسی است که شما برای استفاده ازFirebaseUserLiveDataبرای ایجاد یک متغیرauthenticationStateپیاده سازی خواهید کرد. با استفاده از این متغیرauthenticationState،MainFragmentمیتواند مقدار را برای بهروزرسانی رابط کاربری مطابق با آن مشاهده کند.
در این مرحله از Firebase Console برای تنظیم روشهای احراز هویتی که میخواهید برنامهتان پشتیبانی کند، استفاده میکنید. برای این کد لبه، شما بر روی اجازه دادن به کاربران با آدرس ایمیلی که ارائه میکنند یا حساب Google خود وارد سیستم میشوید تمرکز خواهید کرد.
- به کنسول Firebase بروید. (توجه: اگر هنوز در گردش کار Add Firebase هستید، روی X در گوشه سمت چپ بالا کلیک کنید تا به کنسول بازگردید.
- اگر قبلاً در پروژه خود نیستید، پروژه خود را انتخاب کنید.
- ناوبری سمت چپ را باز کنید و Develop > Authentication را انتخاب کنید.

- برگه روش ورود به سیستم را در نوار پیمایش بالا انتخاب کنید.

- روی ردیف Email/Password کلیک کنید.
- در پنجره بازشو، سوئیچ Enabled را تغییر دهید و روی Save کلیک کنید.
- به همین ترتیب، روی ردیف گوگل کلیک کنید.
- سوئیچ Enabled را تغییر دهید، یک ایمیل پشتیبانی پروژه وارد کنید و روی ذخیره کلیک کنید.
در این کار شما ویژگی ورود به سیستم را برای کاربران خود پیاده سازی خواهید کرد.
-
MainFragment.ktرا باز کنید. - در طرح بندی
MainFragment، بهauth_buttonتوجه کنید. در حال حاضر برای مدیریت هیچ ورودی کاربر تنظیم نشده است. - در
onViewCreated(),یکonClickListenerبهauth_buttonاضافه کنید تاlaunchSignInFlow()فراخوانی کنید.
MainFragment.kt
binding.authButton.setOnClickListener { launchSignInFlow() }- به دنبال متد
launchSignInFlow()درMainFragment.ktبگردید. در حال حاضر شامل یکTODOاست. - تابع
launchSignInFlow()را مطابق شکل زیر تکمیل کنید.
MainFragment.kt
private fun launchSignInFlow() {
// Give users the option to sign in / register with their email or Google account.
// If users choose to register with their email,
// they will need to create a password as well.
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build()
// This is where you can provide more ways for users to register and
// sign in.
)
// Create and launch sign-in intent.
// We listen to the response of this activity with the
// SIGN_IN_REQUEST_CODE
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
MainFragment.SIGN_IN_REQUEST_CODE
)
}این به کاربران امکان می دهد با آدرس ایمیل یا حساب Google خود ثبت نام و وارد شوند. اگر کاربر انتخاب کند که با آدرس ایمیل خود ثبت نام کند، ترکیب ایمیل و رمز عبوری که ایجاد می کند برای برنامه شما منحصر به فرد است. این بدان معناست که آنها میتوانند با ترکیب آدرس ایمیل و رمز عبور وارد برنامه شما شوند، اما به این معنا نیست که میتوانند با همان اعتبارنامه به هر برنامه دیگری که Firebase پشتیبانی میکند وارد شوید.
- در
MainFragment.kt، میتوانید با پیادهسازی متدonActivityResult()مانند زیر، به نتیجه فرآیند ورود به سیستم گوش دهید. از آنجایی که فرآیند ورود به سیستم را باSIGN_IN_REQUEST_CODEآغاز کردید، همچنین میتوانید با فیلتر کردن زمانی کهSIGN_IN_REQUEST_CODEبهonActivityResult()ارسال میشود، به نتیجه فرآیند ورود گوش دهید. برای اینکه بدانید کاربر با موفقیت وارد سیستم شده است یا خیر، شروع کنید.
MainFragment.kt
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == SIGN_IN_REQUEST_CODE) {
val response = IdpResponse.fromResultIntent(data)
if (resultCode == Activity.RESULT_OK) {
// User successfully signed in
Log.i(TAG, "Successfully signed in user ${FirebaseAuth.getInstance().currentUser?.displayName}!")
} else {
// Sign in failed. If response is null the user canceled the
// sign-in flow using the back button. Otherwise check
// response.getError().getErrorCode() and handle the error.
Log.i(TAG, "Sign in unsuccessful ${response?.error?.errorCode}")
}
}
}اکنون برنامه شما باید بتواند ثبت نام و ورود کاربران را انجام دهد!
- برنامه را اجرا کنید و بررسی کنید که با ضربه زدن روی دکمه ورود ، صفحه ورود ظاهر می شود.
- اکنون می توانید با آدرس ایمیل و رمز عبور یا با حساب Google خود وارد شوید.
- پس از ورود به سیستم، هیچ تغییری در رابط کاربری ایجاد نخواهد شد (در مرحله بعدی بهروزرسانی رابط کاربری را اجرا میکنید)، اما اگر همه چیز به درستی کار میکند، باید پیام ورود
Successfully signed in user ${your name}!پس از عبور از جریان ثبت نام. - همچنین میتوانید به کنسول Firebase بروید و به مسیر Develop > Authentication > Users بروید تا بررسی کنید که برنامه اکنون یک کاربر ثبتشده دارد یا خیر.
- توجه داشته باشید که وقتی کاربران یک حساب کاربری برای برنامه شما ایجاد می کنند، این حساب به طور خاص فقط به برنامه شما متصل می شود و نه به برنامه ای که از Firebase برای عملکرد ورود استفاده می کند.
در این کار، بهروزرسانی رابط کاربری را بر اساس وضعیت احراز هویت اجرا میکنید. هنگامی که کاربر وارد شده است، می توانید صفحه اصلی او را با نمایش نام او شخصی کنید. همچنین هنگامی که کاربر وارد سیستم شده است، دکمه ورود به سیستم را به روز می کنید تا یک دکمه خروج باشد.
- کلاس he
FirebaseUserLiveData.ktرا که قبلاً برای شما ایجاد شده است باز کنید. اولین کاری که باید انجام دهید این است که راهی برای سایر کلاس های برنامه ارائه دهید تا بدانند کاربر چه زمانی وارد یا خارج شده است. با این حال، کلاس هنوز کاری انجام نمی دهد زیرا مقدارLiveDataبه روز نمی شود. - از آنجایی که از کتابخانه
FirebaseAuthاستفاده می کنید، می توانید با پاسخ تماسFirebaseUser.AuthStateListenerکه برای شما به عنوان بخشی از کتابخانه FirebaseUI اجرا شده است، به تغییرات کاربر وارد شده گوش دهید. هر زمان که کاربری وارد یا خارج از برنامه شما شود، این پاسخ تماس فعال میشود. - توجه داشته باشید که
FirebaseUserLiveData.ktمتغیرauthStateListenerرا تعریف می کند. شما از این متغیر برای ذخیره مقدارLiveDataاستفاده خواهید کرد. متغیرauthStateListenerایجاد شده است تا بتوانید به درستی گوش دادن به تغییرات در حالت auth را بر اساس وضعیت برنامه خود شروع و متوقف کنید. به عنوان مثال، اگر کاربر برنامه را در پسزمینه قرار دهد، برنامه باید به منظور جلوگیری از هرگونه نشت حافظه احتمالی، گوش دادن به تغییرات وضعیت احراز هویت را متوقف کند. -
authStateListenerبهروزرسانی کنید تا مقدارFirebaseUserLiveDataشما با کاربر فعلی Firebase مطابقت داشته باشد.
FirebaseUserLiveData.kt
private val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
value = firebaseAuth.currentUser
}-
LoginViewModel.ktباز کنید. - در
LoginViewModel.kt، یک متغیرauthenticationStateبر اساس شیFirebaseUserLiveDataکه به تازگی پیاده سازی کرده اید ایجاد کنید. با ایجاد این متغیرauthenticationState، کلاسهای دیگر اکنون میتوانند از طریقLoginViewModelوارد شده یا نه.
LoginViewModel.kt
val authenticationState = FirebaseUserLiveData().map { user ->
if (user != null) {
AuthenticationState.AUTHENTICATED
} else {
AuthenticationState.UNAUTHENTICATED
}
}-
MainFragment.kt. - در
observeAuthenticationState()MainFragment.ktمیتوانید از متغیرauthenticationStateکه به تازگی درLoginViewModelاضافه کردهاید استفاده کنید و UI را متناسب با آن تغییر دهید. اگر کاربر وارد سیستم شده باشد،authButtonباید Logout را نمایش دهد.
MainFragment.kt
private fun observeAuthenticationState() {
val factToDisplay = viewModel.getFactToDisplay(requireContext())
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
when (authenticationState) {
LoginViewModel.AuthenticationState.AUTHENTICATED -> {
binding.authButton.text = getString(R.string.logout_button_text)
binding.authButton.setOnClickListener {
// TODO implement logging out user in next step
}
// TODO 2. If the user is logged in,
// you can customize the welcome message they see by
// utilizing the getFactWithPersonalization() function provided
}
else -> {
// TODO 3. Lastly, if there is no logged-in user,
// auth_button should display Login and
// launch the sign in screen when clicked.
}
}
})
}- اگر کاربر وارد شده است، میتوانید پیام خوشامدگویی را که مشاهده میکند با استفاده از تابع
getFactWithPersonalization()ارائه شده درMainFragmentسفارشی کنید.
MainFragment.kt
binding.welcomeText.text = getFactWithPersonalization(factToDisplay)- در نهایت، اگر کاربر وارد شده ای وجود نداشته باشد (زمانی که
authenticationStateچیزی غیر ازLoginViewModel.AuthenticationState.AUTHENTICATEDاست)،auth_buttonباید Login را نمایش دهد و با کلیک روی آن، صفحه ورود به سیستم را راه اندازی کند. همچنین نباید پیام نمایش داده شده شخصی سازی شود.
MainFragment.kt
binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener { launchSignInFlow() }
binding.welcomeText.text = factToDisplayبا تکمیل تمام مراحل، متد observeAuthenticationState() نهایی شما باید شبیه به کد زیر باشد.
MainFragment.kt
private fun observeAuthenticationState() {
val factToDisplay = viewModel.getFactToDisplay(requireContext())
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
// TODO 1. Use the authenticationState variable you just added
// in LoginViewModel and change the UI accordingly.
when (authenticationState) {
// TODO 2. If the user is logged in,
// you can customize the welcome message they see by
// utilizing the getFactWithPersonalization() function provided
LoginViewModel.AuthenticationState.AUTHENTICATED -> {
binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
binding.authButton.text = getString(R.string.logout_button_text)
binding.authButton.setOnClickListener {
// TODO implement logging out user in next step
}
}
else -> {
// TODO 3. Lastly, if there is no logged-in user,
// auth_button should display Login and
// launch the sign in screen when clicked.
binding.welcomeText.text = factToDisplay
binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener {
launchSignInFlow()
}
}
}
})
}- برنامه خود را اجرا کنید رابط کاربری باید بر اساس اینکه آیا کاربر وارد شده است یا خیر، به روز شود. اگر همه چیز به درستی کار می کند، و شما وارد سیستم شده اید، صفحه اصلی باید علاوه بر نمایش یک واقعیت اندروید، با نام شما به شما سلام کند. دکمه ورود نیز اکنون باید Logout را نمایش دهد.

در این کار، ویژگی خروج را پیاده سازی خواهید کرد.
از آنجایی که این برنامه به کاربران اجازه ورود به سیستم را می دهد، باید راهی برای خروج از سیستم نیز در اختیار آنها قرار دهد. در اینجا مثالی از نحوه خروج یک کاربر با تنها یک خط کد آورده شده است:
AuthUI.getInstance().signOut(requireContext())-
MainFragment.ktرا باز کنید. - در
observeAuthenticationState()MainFragment.kt، منطق خروج را اضافه کنید تا وقتی یک کاربر وارد شده باشد،auth_buttonبه درستی عمل کند. نتیجه نهایی روش شبیه کد زیر است.
MainFragment.kt
private fun observeAuthenticationState() {
val factToDisplay = viewModel.getFactToDisplay(requireContext())
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
when (authenticationState) {
LoginViewModel.AuthenticationState.AUTHENTICATED -> {
binding.welcomeText.text = getFactWithPersonalization(factToDisplay)
binding.authButton.text = getString(R.string.logout_button_text)
binding.authButton.setOnClickListener {
AuthUI.getInstance().signOut(requireContext())
}
}
else -> {
binding.welcomeText.text = factToDisplay
binding.authButton.text = getString(R.string.login_button_text)
binding.authButton.setOnClickListener {
launchSignInFlow()
}
}
}
})
}- برنامه را اجرا کنید.
- روی دکمه خروج ضربه بزنید و تأیید کنید که کاربر از سیستم خارج شده است و وضعیت دکمه به ورود تغییر می کند.


میتوانید نسخه نهایی برنامه تکمیلشده را در اینجا پیدا کنید https://github.com/googlecodelabs/android-kotlin-login .
در این کد لبه یاد گرفتید:
- چگونه با افزودن وابستگی های لازم به فایل gradle خود و راه اندازی پروژه در کنسول Firebase، Firebase را به پروژه خود اضافه کنید.
- چگونه با استفاده از کتابخانه FirebaseUI ورود به برنامه خود را پیاده سازی کنید و مشخص کنید که چگونه می خواهید به کاربران خود اجازه ورود به سیستم را بدهید. توجه داشته باشید که هر حسابی که کاربر در برنامه شما ایجاد میکند فقط مختص برنامه شما است و با همه برنامههایی که از Firebase برای عملکرد ورود به سیستم استفاده میکنند به اشتراک گذاشته نمیشود.
- چگونه با استفاده از
LiveDataوضعیت احراز هویت فعلی برنامه خود را مشاهده کنید. - نحوه خروج کاربران
این کد لبه اصول نحوه پشتیبانی از ورود به برنامه اندروید را پوشش می دهد.
در این کد لبه به کاربران اجازه دادید تا با آدرس ایمیل خود ثبت نام کرده و وارد سیستم شوند. با این حال، با کتابخانه FirebaseUI می توانید از روش های دیگر احراز هویت مانند ورود به سیستم با شماره تلفن نیز پشتیبانی کنید. برای کسب اطلاعات بیشتر در مورد قابلیت های کتابخانه FirebaseUI و نحوه استفاده از سایر قابلیت های آن، منابع زیر را بررسی کنید:
برای اطلاعات بیشتر در مورد بهترین شیوه های ورود به سیستم، این منابع دیگر را بررسی کنید:
Codelabs:
مستندات توسعه دهنده اندروید:
ویدئوها:
برای پیوند به دیگر کدلب ها در این دوره، صفحه فرود Advanced Android in Kotlin Codelabs را ببینید.