#android #google-signin
#Android #google-вход
Вопрос:
Я внедрил API входа в Google в своем приложении для Android. До недавнего времени все было хорошо. Одна из проблем, с которой я столкнулся, была связана с client_id, который был восстановлен. Самое последнее, что вызвало больше ошибок, заключается в том, что вход в Google не будет работать в созданном release.apk.
После двух дней отладки я решил создать новый демонстрационный проект, чтобы начать процесс заново. Это не будет работать как возврат false
задачи task.isSuccessful
.
Возможно, мне чего-то не хватает.
const val RC_SIGN_IN = 0
class MainActivity : AppCompatActivity() {
lateinit var observer:StartActivityForResults
private lateinit var mGoogleSignInClient:GoogleSignInClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
observer = StartActivityForResults(activityResultRegistry)
lifecycle.addObserver(observer)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build()
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
sign_in_button.setOnClickListener{
signIn()
}
}
private fun signIn() {
val signInIntent = mGoogleSignInClient.signInIntent
startActivityForResult(signInIntent, RC_SIGN_IN)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
val task = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
task?.isSuccess
Toast.makeText(this, "Success", Toast.LENGTH_LONG).show()
}
else{
Log.i("title", "OKCODE ${Activity.RESULT_OK} RESULTCODE ${resultCode}")
}
}
}
Ответ №1:
Легко добавьте вход в свое приложение для Android с помощью FirebaseUI
Если вы еще этого не сделали, добавьте Firebase в свой проект Android.
Добавьте зависимости для FirebaseUI в файл build.gradle на уровне приложения
dependencies {
// ...
implementation 'com.firebaseui:firebase-ui-auth:6.2.0'
}
В консоли Firebase откройте раздел аутентификации и включите методы входа, которые вы хотите поддерживать. Для некоторых методов входа требуется дополнительная информация, обычно доступная в консоли разработчика сервиса.
Если вы поддерживаете вход в Google и еще не указали отпечаток пальца SHA-1 вашего приложения, сделайте это на странице настроек консоли Firebase
// Choose authentication providers
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.PhoneBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build(),
AuthUI.IdpConfig.FacebookBuilder().build(),
AuthUI.IdpConfig.TwitterBuilder().build())
// Create and launch sign-in intent
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
RC_SIGN_IN)
Когда процесс входа в систему будет завершен, вы получите результат в onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
val response = IdpResponse.fromResultIntent(data)
if (resultCode == Activity.RESULT_OK) {
// Successfully signed in
val user = FirebaseAuth.getInstance().currentUser
// ...
} 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.
// ...
}
}
}
Ответ №2:
Не уверен, отвечает ли это на ваш вопрос, но я столкнулся с аналогичной проблемой, когда подписание работало в отладочных сборках и не работало в сборках выпуска.
В консоли Firebase, если у вас включен вход в Google, вам будет предложено ввести ключ SHA-1 вашей сборки. Теперь, что произошло в моем случае, я получил ключ SHA-1 для хранилища ключей отладки и не сделал этого для хранилища ключей выпуска.
Попробуйте,
keytool -list -v
-alias -хранилище ключей
и введите его в консоли Firebase.