این کد لبه بخشی از دوره آموزشی 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-auth
SDK اجازه می دهد تا کاربران تأیید شده برنامه شما را مدیریت کنید.
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
در یک کد بعدی کار خواهید کرد.)
- با کد آشنا شوید. به ویژه توجه کنید:
-
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 شما با کاربر فعلیFirebaseUserLiveData
مطابقت داشته باشد.
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.
- در ObserverAuthenticationState
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
باز کنید. - در ObserverAuthenticationState
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 را ببینید.