Я тестирую аутентификацию с мобильным приложением. Я использую службу аутентификации Firebase. Я проверил его один раз перед использованием устройства Android, и хотел бы протестировать его снова. Шаги заключаются в следующем: < /p>
Приложение запускает экран аутентификации (Firebaseui auth) < /li>
Если это первый раз, когда пользователь вошел в систему, это приведет их к экрану фрагмента, чтобы создать свое USERNAME < /li>
, это приведет их на главный экран. /> < /ol>
Код для этого ниже: < /p>
class LoginFragment: Fragment() {
private val TAG = "LoginFragment"
private var _binding: FragmentLoginBinding? = null
private val binding
get() = checkNotNull(_binding) {
"Cannot access binding because it is null, is the view visible?"
}
private val loginViewModel: LoginViewModel by viewModels()
// Creates ActivityResultLauncher to register a callback for FirebaseUI Activity result contract
private val signInLauncher = registerForActivityResult(
FirebaseAuthUIActivityResultContract(),
) { res ->
this.onSignInResult(res)
}
// Authentication providers
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build()
)
//creates custom layout
val customLayout = AuthMethodPickerLayout.Builder(R.layout.fragment_login)
.setGoogleButtonId(R.id.google_sign_in)
.setEmailButtonId(R.id.email_sign_in)
.build()
// Creates and launches sign-in intent
val signInIntent = AuthUI.getInstance()
.createSignInIntentBuilder().setAvailableProviders(providers)
.setIsSmartLockEnabled(false, true).setAuthMethodPickerLayout(customLayout).build()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentLoginBinding.inflate(inflater, container, false)
return binding.root
}
override fun onStart() {
super.onStart()
val currentUser = FirebaseAuth.getInstance().currentUser
if (currentUser == null) {
signInLauncher.launch(signInIntent)
} else {
Log.e("Auth", "onStart action_login_to_mainline")
findNavController().navigate(R.id.action_login_to_mainline)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
val response = result.idpResponse
if (result.resultCode == RESULT_OK) {
//successfully signed in, set up username if first time logging in
//TODO: if user has already signed in, redirect to login with a message
val user = FirebaseAuth.getInstance().currentUser
val db = FirebaseFirestore.getInstance()
db.collection("users").document(user!!.uid).get()
.addOnSuccessListener { document ->
if (!document.exists()) {
// User doesn't exist in Firestore, treat as new user
Log.d("Auth", "User not found in Firestore, navigating to username setup")
findNavController().navigate(R.id.action_login_to_setusername)
} else {
// User exists in Firestore, proceed to main screen
Log.d("Auth", "User found in Firestore, navigating to main")
findNavController().navigate(R.id.action_login_to_mainline)
}
}
.addOnFailureListener { e ->
Log.e("Auth", "Error checking user existence: ${e.message}", e)
// Important: Add navigation to username setup here as fallback
findNavController().navigate(R.id.action_login_to_setusername)
}
}
}
< /code>
} < /p>
Все 3 шага были успешно выполнены в первый раз, когда я его тестировал. Я изменил несколько вещей с учетом пользовательского интерфейса и хотел бы протестировать его снова, но шаг 2 пропускается. Это происходит в OnStart (), и он выполняет еще, когда я хочу, чтобы он выполнил if. Как это исправить? База данных < /li>
< /ul>
Я удаляю приложение на своем устройстве каждый раз, когда пытаюсь протестировать его. Я уверен, что в базе данных или аутентификаторе ничего не хранится, так как он отображается как пустое на платформе Google Cloud. Если требуется дополнительная информация, дайте мне знать! Я потерялся в отношении того, что делать.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... en-testing
Как мне остановить приложение автоматическое освещение моего устройства Android при тестировании? ⇐ Android
Форум для тех, кто программирует под Android
1743537238
Anonymous
Я тестирую аутентификацию с мобильным приложением. Я использую службу аутентификации Firebase. Я проверил его один раз перед использованием устройства Android, и хотел бы протестировать его снова. Шаги заключаются в следующем: < /p>
Приложение запускает экран аутентификации (Firebaseui auth) < /li>
Если это первый раз, когда пользователь вошел в систему, это приведет их к экрану фрагмента, чтобы создать свое USERNAME < /li>
, это приведет их на главный экран. /> < /ol>
Код для этого ниже: < /p>
class LoginFragment: Fragment() {
private val TAG = "LoginFragment"
private var _binding: FragmentLoginBinding? = null
private val binding
get() = checkNotNull(_binding) {
"Cannot access binding because it is null, is the view visible?"
}
private val loginViewModel: LoginViewModel by viewModels()
// Creates ActivityResultLauncher to register a callback for FirebaseUI Activity result contract
private val signInLauncher = registerForActivityResult(
FirebaseAuthUIActivityResultContract(),
) { res ->
this.onSignInResult(res)
}
// Authentication providers
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build()
)
//creates custom layout
val customLayout = AuthMethodPickerLayout.Builder(R.layout.fragment_login)
.setGoogleButtonId(R.id.google_sign_in)
.setEmailButtonId(R.id.email_sign_in)
.build()
// Creates and launches sign-in intent
val signInIntent = AuthUI.getInstance()
.createSignInIntentBuilder().setAvailableProviders(providers)
.setIsSmartLockEnabled(false, true).setAuthMethodPickerLayout(customLayout).build()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentLoginBinding.inflate(inflater, container, false)
return binding.root
}
override fun onStart() {
super.onStart()
val currentUser = FirebaseAuth.getInstance().currentUser
if (currentUser == null) {
signInLauncher.launch(signInIntent)
} else {
Log.e("Auth", "onStart action_login_to_mainline")
findNavController().navigate(R.id.action_login_to_mainline)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
val response = result.idpResponse
if (result.resultCode == RESULT_OK) {
//successfully signed in, set up username if first time logging in
//TODO: if user has already signed in, redirect to login with a message
val user = FirebaseAuth.getInstance().currentUser
val db = FirebaseFirestore.getInstance()
db.collection("users").document(user!!.uid).get()
.addOnSuccessListener { document ->
if (!document.exists()) {
// User doesn't exist in Firestore, treat as new user
Log.d("Auth", "User not found in Firestore, navigating to username setup")
findNavController().navigate(R.id.action_login_to_setusername)
} else {
// User exists in Firestore, proceed to main screen
Log.d("Auth", "User found in Firestore, navigating to main")
findNavController().navigate(R.id.action_login_to_mainline)
}
}
.addOnFailureListener { e ->
Log.e("Auth", "Error checking user existence: ${e.message}", e)
// Important: Add navigation to username setup here as fallback
findNavController().navigate(R.id.action_login_to_setusername)
}
}
}
< /code>
} < /p>
Все 3 шага были успешно выполнены в первый раз, когда я его тестировал. Я изменил несколько вещей с учетом пользовательского интерфейса и хотел бы протестировать его снова, но шаг 2 пропускается. Это происходит в OnStart (), и он выполняет еще, когда я хочу, чтобы он выполнил if. Как это исправить? База данных < /li>
< /ul>
Я удаляю приложение на своем устройстве каждый раз, когда пытаюсь протестировать его. Я уверен, что в базе данных или аутентификаторе ничего не хранится, так как он отображается как пустое на платформе Google Cloud. Если требуется дополнительная информация, дайте мне знать! Я потерялся в отношении того, что делать.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79549064/how-do-i-stop-my-app-from-auto-logging-my-android-device-in-when-testing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия