Я хочу выполнить автоматический вход при загрузке действия, если оно было зарегистрировано ранее и не вышло из системы, но когда я создаю нового пользователя, после комментирования проверки при запуске, если пользователь частично вошел в систему, происходит сбой,Кроме того, я могу создать пользователя с помощью входа в Facebook и перейти к следующему действию, но когда я выхожу и снова вхожу с помощью кнопки facbook, он создает новый UID, который мне не нужен, я хочу, чтобы он распознал, что есть пользователь, намеченныйIP с этим facbook.Я новичок в Kotlin. Я обычно использую ios и Swift и могу сделать это следующим образом.
public override fun onStart() {
super.onStart()
// Check if user is signed in (non-null) and update UI accordingly.
val currentUser = auth.currentUser
progressBar.visibility = View.INVISIBLE
if (auth.currentUser == null) {
println("Tony signed out")
}else {
Toast.makeText(this, "Already Signed in :)", Toast.LENGTH_LONG).show()
println("Tony signed in")
userID = auth?.currentUser?.uid!!
val intent = Intent(this, ProjectsVC::class.java)
progressBar.visibility = View.INVISIBLE
startActivity(Intent(this, ProjectsVC::class.java))
}
}
Моя кнопка
facebookLogin.setOnClickListener {
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"))
progressBar.visibility = View.VISIBLE
facebookLogin()
}
Функция справочника
private fun facebookLogin() {
callbackManager = CallbackManager.Factory.create()
LoginManager.getInstance().registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
Log.d("Main", "facebook:onSuccess:$loginResult")
handleFacebookAccessToken(loginResult.accessToken)
}
РучкаТокен
private fun handleFacebookAccessToken(token: AccessToken) {
progressBar.visibility = View.VISIBLE
Log.d("Main", "handleFacebookAccessToken:$token")
println("Tony started facebook login")
val credential = FacebookAuthProvider.getCredential(token.token)
auth.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
println("Tony task facebook login")
// Sign in success, update UI with the signed-in user's information
Log.d("Main", "signInWithCredential:success")
usernameCheck {success ->
if (success == true) {
if (userExist) {
println("Tony User exists")
progressBar.visibility = View.INVISIBLE
}else {
println("Tony User doesn't exist")
val mAlertDialog = AlertDialog.Builder(this@LogInVC)
mAlertDialog.setTitle("Enter a Username")
mAlertDialog.setMessage("This will allow you to be added to other projects")
val view = layoutInflater.inflate(R.layout.alert_verify_vc, null)
view.codeVerify.hint = "Username"
view.codeVerify.inputType = InputType.TYPE_TEXT_FLAG_CAP_WORDS
mAlertDialog.setView(view)
mAlertDialog.setPositiveButton("Ok") { dialog: DialogInterface?, id: Int ->
userName = view.codeVerify.text.toString()
progressBar.visibility = View.VISIBLE
val post = HashMap<String, Any>()
post["username"] = userName
db.collection ("users").document(userID)
.set(post)
.addOnSuccessListener { Log.d("UserCheck2", "Tony DocumentSnapshot successfully written!") }
.addOnFailureListener { e -> Log.w("UserCheck2", " Tony Error writing document", e) }
println("Tony db check uid is $userID and username $userName")
checkNameExists { success ->
if (success) {
if (userNameExist) {
println("Tony Username used")
// create alert that has a check function and write function on ok
}else {
println("Tony Username not used")
val post2 = HashMap<String, Any>()
post2["UserID"] = userID
db.collection("usernames").document(userName)
.set(post2)
.addOnSuccessListener { Log.d("UserCheck", "Tony DocumentSnapshot successfully written!")
val intent = Intent(this, ProjectsVC::class.java)
progressBar.visibility = View.INVISIBLE
startActivity(intent)
}
.addOnFailureListener { e -> Log.w("UserCheck", "Tony Error writing document", e) }
}
}else {
println("Tony Error")
}
}
}
mAlertDialog.setNegativeButton("Cancel") { dialog: DialogInterface?, id: Int ->
dialog?.dismiss()
}
progressBar.visibility = View.INVISIBLE
mAlertDialog.show()
}
}else {
println("Tony not success")
progressBar.visibility = View.INVISIBLE
}
}
println("Tony Finished facebook login")
} else {
// If sign in fails, display a message to the user.
Log.w("Main", "signInWithCredential:failure", task.exception)
Toast.makeText(
baseContext, "Authentication failed.",
Toast.LENGTH_SHORT
).show()
progressBar.visibility = View.INVISIBLE
}
}
}
на маркере facbook дескриптора, если пользователь уже зарегистрирован, тогда я не хочу, чтобы он переходил к проверке имени пользователя.