안드로이드 개발/중고거래앱 만들기

[Android Kotlin] Firebase연결 및 Firebase로 회원가입 /File google-servieces.json is missing 오류 해결 방법 /socket failed:EPERM(Operation not permitted) 오류해결법/

얌자 2021. 1. 29. 01:31

 

 

1. Firebase연결

 

Tools 탭의 Firebase를 클릭해줍니다.
Authentication의 Email and password authentucation를 클릭
Connet to Firebase로 파이어베이스와 연결해주고 Add Firebas Authentication to your app으로 로그인 라이브러리를 다운 받아줍니다.

 

Create new Firebase project를 선택해주시고 프로젝트 이름을 정해주신 후 하단의 Connect to Firebase를 클릭 해줍니다.

 

 

파이어베이스 홈페이지에 들어가 로그인 후 콘솔로 이동하게 되면 프로젝트가 추가 된 것을 확인 할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

해당 프로젝트에 들어간 후에 Authentication -> Sign-in method에 이메일/비밀번호를 사용 할 수 있도록 선택 후 저장해줍니다.

 

 

 

 

 

 

File google-servieces.json is missing 오류 해결 방법

 

 

 

빌드를 하면 밑과 같이 오류가 뜰 수 있습니다.

 

 

프로젝트 설정에 들어가주세요.

 

google-services.json 파일을 다운 받아 줍니다.

 

app폴더에 넣어주시면 끝입니다.

 

 

 

 

 

2. 회원가입 xml 파일만들기

 

 

 

 

Layout폴더에 activity_sign.xml 파일 생성해주시고 밑의 사진과 같이 만들었습니다. 간단히 이메일과 패스워드, 이름만 입력 받도록 하겠습니다.

 

 

 

회원가입 화면 입니다.

 

 

activity_sign.xml 코드

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_marginTop="120dp"
        android:fontFamily="@font/nanumsquareroundb"
        android:gravity="center_horizontal"
        android:text="회원가입"
        android:textSize="40dp"
        app:layout_constraintBottom_toTopOf="@+id/editText_email_sign_up"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

    <EditText
        android:id="@+id/editText_email_sign_up"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="140dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:hint="email를 입력해주세요"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3"
        tools:layout_editor_absoluteY="280dp" />

    <EditText
        android:id="@+id/editText_password_sign_up"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:hint="password를 입력해주세요"
        android:inputType="textPassword"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText_email_sign_up"
        app:layout_constraintVertical_bias="0.075" />

    <EditText
        android:id="@+id/editText_name_sign_up"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:hint="이름을 입력해주세요"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText_password_sign_up" />

    <Button
        android:id="@+id/btn_sign_up_ok"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="가입하기"
        app:layout_constraintEnd_toStartOf="@+id/btn_sign_up_back"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText_name_sign_up" />

    <Button
        android:id="@+id/btn_sign_up_back"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:layout_marginRight="60dp"
        android:text="취소"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText_name_sign_up" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

3. 회원가입 class 생성

 

 

 

SignUpActivity를 생성해주고 위에서 만든 회원가입 xml 과 연동시켜줍니다.

 

 

class SingUpActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign)


    }
}

 

 

 

LoginActivity의 onCreate 안에 위 코드를 추가해줍니다. 회원가입 버튼을 누르면 SignUpActivity로 넘어 갈 수 있도록 해줍니다.

 

 

   btn_sign_up_go.setOnClickListener {
            val nextIntent = Intent(this, SingUpActivity::class.java)
            startActivity(nextIntent)
        }

 

 

 

 

build.gradle (:app)의 dependencies 안에 코드를 추가 해줍니다.

 

 

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:26.2.0')

    // 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'
}

 

다음으로 클래스 안에 하단의 코드를 추가해주시고

 

private lateinit var auth: FirebaseAuth

 

 

onCreate안에도 하단의 코드를 추가해주세요.

 

auth = Firebase.auth

 

 

 

그리고 signinEmail() 함수를 추가해주겠습니다.

회원가입시에 createUserWithEmailAndPassword(email,password) 를 사용해서 사용자를 생성해 준 것입니다.

 

 

 fun signinEmail(){
        auth.createUserWithEmailAndPassword(editText_email_sign_up.text.toString(),editText_password_sign_up.text.toString())
            .addOnCompleteListener(this) {
                    task ->
                if(task.isSuccessful){
                    //Login
                    Toast.makeText(this,"회원가입이 완료되었습니다.", Toast.LENGTH_LONG).show()
                    val nextIntent = Intent(this, LoginActivity::class.java)
                    startActivity(nextIntent)
                }
                else{
                    Toast.makeText(this,task.exception?.message, Toast.LENGTH_LONG).show()
                    //Show the error message
                }
            }
    }

 

 

 

 

onCreate 안에 가입하기 버튼을 눌렀을시 회원가입이 될 수 있도록 클릭 버튼을 추가해줍니다.

btn_sign_up_ok.setOnClickListener {

            signinEmail()

        }

 

 

 

그럼 회원가입을 해보겠습니다. 

 

 

 

 

Authentication -> Users 로 들어가보시면 이메일이 추가되어 있는 것을 확인 가능합니다.

 

 

 

 

 

socket failed:EPERM(Operation not permitted) 오류 해결 방법

 

 

혹시 토스트 메세지로 socket failed:EPERM(Operation not permitted) 이 뜬다면 에뮬레이터에 있는 해당 앱을 삭제하고 다시 설치 하시면 됩니다.

 

 

SignUpActivity.kt 코드

 

package com.example.carrotmarket

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import kotlinx.android.synthetic.main.activity_sign.*


class SingUpActivity : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign)
        auth = Firebase.auth

        btn_sign_up_ok.setOnClickListener {

            signinEmail()

        }

    }

    fun signinEmail(){
        auth.createUserWithEmailAndPassword(editText_email_sign_up.text.toString(),editText_password_sign_up.text.toString())
            .addOnCompleteListener(this) {
                    task ->
                if(task.isSuccessful){
                    //Login
                    Toast.makeText(this,"회원가입이 완료되었습니다.", Toast.LENGTH_LONG).show()
                    val nextIntent = Intent(this, LoginActivity::class.java)
                    startActivity(nextIntent)
                }
                else{
                    Toast.makeText(this,task.exception?.message, Toast.LENGTH_LONG).show()
                    //Show the error message
                }
            }
    }
}

 

 

자세한 내용은 파이어베이스 홈페이지에서 확인 가능합니다.

 

 

Android에서 비밀번호 기반 계정으로 Firebase에 인증

Firebase 인증을 사용하여 사용자가 이메일 주소와 비밀번호로 Firebase에 인증하도록 하고, 앱의 비밀번호 기반 계정을 관리할 수 있습니다. 시작하기 전에 아직 추가하지 않았다면 Android 프로젝트

firebase.google.com