# #android #firebase #android-studio #kotlin
Вопрос:
поскольку я новичок, я не мог загружать изображения, скорее я написал необходимый код
Я пытался реализовать действие входа в firebase, но при запуске приложения
я получаю, что приложение не отвечает и приложение не открывается
Мое приложение при запуске продолжает показывать «приложение продолжает останавливаться».
//вот вход в действие
package com.example.dummymedia
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.ProgressBar
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.api.ApiException
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.tasks.await
import kotlinx.coroutines.withContext
@Suppress("DEPRECATION")
class SignInActivity : AppCompatActivity() {
private val RC_SIGN_IN: Int = 123
private lateinit var googleSignInClient:GoogleSignInClient
private lateinit var auth :FirebaseAuth
private val TAG ="SignInActivity Tag"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_in)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
auth = Firebase.auth
findViewById<Button>(R.id.SignInButton).setOnClickListener {
signIn()
}
}
private fun signIn(){
val signInIntent = googleSignInClient.signInIntent
startActivityForResult(signInIntent, RC_SIGN_IN)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
handlesignInresult(task)
}
}
private fun handlesignInresult(completedTask: Task<GoogleSignInAccount>?) {
try {
val account =
completedTask?.getResult(ApiException::class.java)!!
Log.d(TAG,"firebaseAuthWithGoogle:" account.id)
firebaseAuthWithGoogle(account.idToken!!)
}catch (e:ApiException){
Log.w(TAG,"signInResult:failed code =" e.statusCode)
}
}
private fun firebaseAuthWithGoogle(idToken: String) {
val credential =GoogleAuthProvider.getCredential(idToken,null)
findViewById<Button>(R.id.SignInButton).visibility = View.GONE
findViewById<ProgressBar>(R.id.progress_Bar).visibility = View.GONE
GlobalScope.launch(Dispatchers.IO) {
val auth = auth.signInWithCredential(credential).await()
val firebaseUser = auth.user
withContext(Dispatchers.Main){
updateUI(firebaseUser)
}
}
}
private fun updateUI(firebaseUser: FirebaseUser?) {
if (firebaseUser!=null){
val mainActivityIntent =Intent(this,MainActivity::class.java)
startActivity(mainActivityIntent)
finish()
}else{
findViewById<Button>(R.id.SignInButton).visibility = View.VISIBLE
findViewById<ProgressBar>(R.id.progress_Bar).visibility = View.GONE
}
}
}
// Androidmanifest.xml
здесь я переместил пусковую установку в действие входа
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dummymedia">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.DummyMedia">
<activity android:name=".SignInActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"/>
</application>
</manifest>
//project level gradle
Specified the versions of dependencies used in app level gradle
buildscript {
ext.kotlin_version = "1.5.10"
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.8'
}
}
allprojects {
repositories {
google()
mavenCentral()
// Warning: this repository is going to shut down soon
}
}
task clean(type: Delete) {
delete rootProject.buildDir
} ext
{
activityVersion = '1.2.3'
appCompatVersion = '1.3.0'
constraintLayoutVersion = '2.0.4'
coreTestingVersion = '2.1.0'
coroutines = '1.4.1'
lifecycleVersion = '2.3.1'
materialVersion = '1.3.0'
roomVersion = '2.3.0'
junitVersion = '4.13.2'
espressoVersion = '3.1.0'
androidxJunitVersion = '1.1.2'
}
//оценка уровня приложения
определил зависимости здесь для firebase и т. Д.
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.gms.google-services'
id 'kotlin-kapt'
}
android
{
compileSdkVersion 30
defaultConfig {
applicationId "com.example.dummymedia"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-
rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "androidx.appcompat:appcompat:$rootProject.appCompatVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.coroutines"
api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.coroutines"
// UI
implementation
"androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion"
implementation "com.google.android.material:material:$rootProject.materialVersion"
/* coroutines support for firebase operations */
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1'
// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:28.1.0')
implementation 'com.google.firebase:firebase-firestore'
implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.firebaseui:firebase-ui-firestore:7.1.1'
implementation 'com.google.android.gms:play-services-auth:19.0.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.google.firebase:firebase-firestore:23.0.1'
// Testing
testImplementation "junit:junit:$rootProject.junitVersion"
androidTestImplementation "androidx.arch.core:core-testing:$rootProject.coreTestingVersion"
androidTestImplementation ("androidx.test.espresso:espresso-core:$rootProject.espressoVersion", {
exclude group: 'com.android.support', module: 'support-annotations'
})
androidTestImplementation "androidx.test.ext:junit:$rootProject.androidxJunitVersion"
}
Комментарии:
1. Вероятно, ошибка связана с тем, что у вас не было разрешения на доступ в Интернет
manifest
во время использования firebase, для которого требуется доступ в Интернет<uses-permission android:name="android.permission.INTERNET" />
. Но для более подробной информации вы должны добавить свои ошибки из logcat2. Если вы заинтересованы в чистой аутентификации Firebase с помощью Google, вы можете проверить это репо .