Я пытался реализовать действие входа в firebase, но при запуске приложения, которое я получаю, приложение не отвечает и приложение не открывается

# #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" /> . Но для более подробной информации вы должны добавить свои ошибки из logcat

2. Если вы заинтересованы в чистой аутентификации Firebase с помощью Google, вы можете проверить это репо .