인프런 커뮤니티 질문&답변

emkemkemk님의 프로필 이미지
emkemkemk

작성한 질문수

[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)

파이어베이스 익명로그인

파이어베이스 익명로그인 강의 09:01 부분 문의

작성

·

926

0

해당 부분 에서 FirebaseAuth, Firebase는 자동으로 import가 되는데 Firebase.auth 부분에서 뒤에 auth가 자동 import가 뜨질 않고 Unresolved reference:auth 에러가 계속 발생합니다. 한 번만 확인해주시면 감사하겠습니다. 

// LoginActivity
package com.fitdback.userinterface

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.Toast
import com.fitdback.pointdetection.R
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.ktx.Firebase

class LoginTestActivity : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login_test)

        // Initialize Firebase Auth
        auth = Firebase.auth

        val btnAnonymousLogin = findViewById<Button>(R.id.btnAnonymousLogin)
        btnAnonymousLogin.setOnClickListener {

            auth.signInAnonymously()
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d("LoginTestActivity", "signInAnonymously:success")
                        val user = auth.currentUser
//                        updateUI(user)
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w("LoginTesetActivity", "signInAnonymously:failure", task.exception)
                        Toast.makeText(
                            baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT
                        ).show()
//                       updateUI(null)
                    }
                }

        }

    }
}

// build.gradle(app)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion buildConfig.compileSdk
    defaultConfig {
        applicationId 'com.fitdback.userinterface'
        minSdkVersion buildConfig.minSdk
        targetSdkVersion buildConfig.targetSdk
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        externalNativeBuild {
            cmake {
                arguments  '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
                cppFlags "-std=c++11","-frtti", "-fexceptions"
            }
        }
        ndk {
            abiFilters 'armeabi-v7a'
        }
    }

//    externalNativeBuild {
//        cmake {
//            path "CMakeLists.txt"
//        }
//    }

    lintOptions {
        abortOnError false
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    aaptOptions {
        noCompress "tflite"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

repositories {
    maven {
        url 'https://google.bintray.com/tensorflow'
    }
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':openCVLibrary341')
    implementation deps.kotlin.stdlib.jdk
//    implementation(name:'tensorflow-lite', ext:'aar')
    implementation deps.android.support.appcompatV7
    implementation deps.android.support.constraintLayout
    implementation deps.android.support.design
    implementation deps.android.support.annotations
    implementation deps.android.support.supportV13
    implementation deps.timber

    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
    implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly'

    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:29.2.1')

    // Declare the dependency for the Firebase Authentication library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-auth-ktx'

    testImplementation deps.junit

    androidTestImplementation(deps.android.test.espresso, {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
}

답변 4

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

Build -> Clean Project / Rebuild Project 실행 후 다시한번 시도해보세요.

emkemkemk님의 프로필 이미지
emkemkemk
질문자

선생님께서 말씀해주신 방법대로 전부해보았으나 역시 '.auth' 부분을 인식할 수 없다고 뜹니다 ㅠㅠ

e: C:\Projects\Android\Lec_Firebase_LoginEX\app\src\main\java\com\preferkim\lec_firebase_loginex\MainActivity.kt: (22, 25): Class 'com.google.firebase.auth.ktx.AuthKt' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected version is 1.4.2.

The class is loaded from C:/Users/shine/.gradle/caches/transforms-2/files-2.1/5ffb82c9e1b94a920f4ac7f686cb7b1d/jetified-firebase-auth-ktx-21.0.2-api.jar!/com/google/firebase/auth/ktx/AuthKt.class

위는 에러 전문이고 해결법이 보통 1.4.32 코틀린 버전을 쓰라는 것인데 

이미 1.4.32를 쓰고 있는 중입니다..  스튜디오가 4.1.3이라서 그런 걸까요...? 

또, 급한대로 일단 프로젝트에서는 

firebaseAuth = FirebaseAuth.getInstance()

방식으로 대체해서 쓰고 있는 중인데 파이어베이스에서도 잘 인식이 되서(로그인 정보가 보입니다) 그냥

' .auth ' 방식을 쭉 대체해서 써도 괜찮을까요..?  

주말에도 답변해주셔서 정말 감사드립니다! (꾸벅)

emkemkemk님의 프로필 이미지
emkemkemk
질문자

안드로이드 스튜디오 최신 정식 릴리즈 버전(범블비),

코틀린 1.6.20 에서는 정상 작동하는 것을 확인했습니다. 

 

대체 1.4.32에서는 왜 안되는 건지... 😥 

선생님꼐서는  혹시 코틀린 버전 상관없이 잘 되시는 건가요..?

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

아래 버전에서는 별도로 테스트하지 않았는데

특정 버전을 사용하시는 이유가 있으신가요?

emkemkemk님의 프로필 이미지
emkemkemk
질문자

기존 프로젝트에서 사용하던 라이브러리들이 1.6 이상에서는 바뀐 문법 때문인지 에러가 계속 발생해서요 ㅠㅠ 

'firebaseAuth = FirebaseAuth.getInstance()'
선생님 혹시 대신에 위 방식으로 쭉 대체해서 써도 괜찮을까요..? 나중에 Firebase DB도 사용하고 그럴텐데 혹여 나중가서 문제가 발생할 지 않을 지 걱정이 됩니다.. 🤣
🤣🤣

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

넵 말씀해주신대로 이전 버전을 사용하시면 문제가 발생할 가능성이 있습니다.

기존 라이브러리를 변경하기 어려우시면, 이전 버전으로 다운그레이드 하셔서 사용하시고 생기는 트러블을 처리하셔야 할 것 같습니다 :) 

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

확인해보니 

 

import com.google.firebase.auth.ktx.auth

 

이 부분이 import가 안된거 같은데요.

위의 부분 추가해보니 잘 됩니다.

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

안녕하세요

코드를 보니, 개인 프로젝트와 코드가 이것저것 섞인 것 같은데

Firebase로그인 부분만 별도로 만들어서 공유해주시겠어요?

새롭게 프로젝트를 만드셔서 MainActivity에 Firebase Auth부분만 구현하셔서 깃허브에 올려주시면 살펴보겠습니다.

 

emkemkemk님의 프로필 이미지
emkemkemk
질문자

https://github.com/preferKim/Lec_Firebase_LoginEX/blob/main/app/src/main/java/com/preferkim/lec_firebase_loginex/MainActivity.kt

 

말씀하신대로 올렸습니다! 살펴봐주셔서 감사합니다!! 

 

// 추가

아래 플러그인을 추가해봐도 같은 증상입니다..!

'com.google.gms.google-services'

저도 .auth를 인식하지 못해서 rebuild해보니

동일한증상이 발생하여 좀찾아봤는데 코틀린 버전을 올려주니까되네요.

에러메세지는 아래와같구요

java.com.google.android.libraries.firebase.firebase_analytics_ktx_granule.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.8.0, expected version is 1.6.0.

 

프로젝트 build.gradle고치고 sync맞춘다음 rebuild하면 잘됩니다.

이문제가맞나 싶어서 해당부분만 다시 지우고 rebuild하면 똑같은 에러가 뜨네요.ㅎㅎ

 

ext.kotlin_version ="1.8.0"하고

dependencies안에 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

이부분만 추가했습니다.

haero님은 에러메세지를보니 1.6.0으로 하시면되지않을까 싶네요

buildscript {
    ext.kotlin_version = '1.8.0'
    repositories {
        google()
        mavenCentral()

    }
    dependencies {
        classpath 'com.google.gms:google-services:4.3.15'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

 

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

안녕하세요 안율님

수강팁 공유 감사합니다.

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

안녕하세요

얼핏 보니 잘 하신 것 같이 보이는데 안드로이드 스튜디오 전체 화면 스크린샷과 함께

코드를 깃허브에 올리고 공유해주시겠어요?

emkemkemk님의 프로필 이미지
emkemkemk
질문자

선생님 블로그에 나와있는 메일 주소로 관련하여 메일 송부했습니다. 확인해주시면 감사하겠습니다!

emkemkemk님의 프로필 이미지
emkemkemk

작성한 질문수

질문하기