mojo's Blog

Firebase (1) 본문

카테고리 없음

Firebase (1)

_mojo_ 2022. 3. 28. 22:37

Firebase 프로젝트 생성

 

1.  프로젝트 이름 작성 후 계속 누르기

 

 

2. 애널리틱스 사용을 하지 않고 프로젝트 만들기

 

3. 프로젝트가 만들어진다.

 

4. 안드로이드 앱 버튼을 누른다.

 

5. manifests 에 패키지 명을 복사해서 붙여넣고 앱 등록을 해준다.

 

 

6. 그 다음 google-service.json 을 다운하고 Android 를 Project 으로 변경한 다음에 app 폴더에 넣어주면 된다.

 

 

7. Firebase SDK 추가를 위해 build.gradle 을 열어서 다음과 같이 채워준다.

 

 

buildscript {
    repositories {
        // Check that you have the following line (if not, add it):
        google()  // Google's Maven repository

    }
    dependencies {
        // Add this line
        classpath 'com.google.gms:google-services:4.3.10'

    }
}

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}

allprojects {
    repositories {
        // Check that you have the following line (if not, add it):
        google()  // Google's Maven repository
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

참고로 이렇게 하면 왜그런지는 모르겠지만 실행되지 않는다.

setting.gradle 에서 dependencyResolutionManagement 에서 

repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) 으로 변경해줘야 실행된다.

 

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "dbpractice"
include ':app'

 

 

그리고 app 수준의 build.gradle 에서도 위와 같은 방법으로 채워주도록 한다.

 

 

8. 콘솔로 이동한다.

 

 

9. Authentication 에서 시작하기 버튼을 누른다.

 

 

10.  Realtime Database 에서 데이터베이스를 만들기 해서 위치는 미국으로, 그리고 테스트 모드 시작을 누르면 아래와 같이 화면이 뜬다.

 

 

 

11.  프로젝트 개요로 돌아가서 아래와 같이 안드로이드 프로젝트를 눌러서 설정 버튼을 누른 후에 google-services.json 을 다운해준다.

 

 

그리고 아까와 동일하게 app 에다가 넣어주면 이전과는 약간 다르게 생성된 것을 확인할 수 있다.

 

 

 

12.  정상적으로 실행되는 것을 확인할 수 있다.

 

 


Firebase 를 이용하여 이메일 생성하기

 

 

1. Authentication 에서 이메일 활성화

 

 

2. Gradle Scripts 에서 build.grade (Module: ... ) 를 눌러서 dependencies 가장 아랫부분에 다음과 같이 추가해준다.

 

dependencies {

    ...
    implementation platform('com.google.firebase:firebase-bom:29.2.1')
    implementation 'com.google.firebase:firebase-auth-ktx'
}

 

그 후에 MainActivity 에서 Firebase.auth 를 입력할 때 에러 문구가 뜨지 않으면 정상적으로 된 것이다.

 

 

3.  kotlin 파일 하나 생성한다. (LoginActivity 으로)

그리고 manifest 에 LoginActivity 를 추가해주고 layout 도 하나 만들어주자.

 

MainActivity 코드

package com.example.dbpractice

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase

class MainActivity : AppCompatActivity() {

    private var auth : FirebaseAuth = FirebaseAuth.getInstance()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    override fun onStart() {
        super.onStart()
        if (auth.currentUser == null){
            startActivity(Intent(this, LoginActivity::class.java))
        }
    }
}

 

LoginActivity 코드

package com.example.dbpractice

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.core.widget.addTextChangedListener
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase

class LoginActivity : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        auth = Firebase.auth

        val emailEditText = findViewById<EditText>(R.id.emailEditText)
        val passwordEditText = findViewById<EditText>(R.id.passwordEditText)

        initSignUpButton()
        initLoginButton()
        initEmailAndPasswordEditText()

    }

    private fun initEmailAndPasswordEditText() {
        val emailEditText = findViewById<EditText>(R.id.emailEditText)
        val passwordEditText = findViewById<EditText>(R.id.passwordEditText)
        val signUpButton = findViewById<Button>(R.id.signButton)
        val loginButton = findViewById<Button>(R.id.loginButton)

        emailEditText.addTextChangedListener{
            val enable = emailEditText.text.isNotEmpty() && passwordEditText.text.isNotEmpty()
            loginButton.isEnabled = enable
            signUpButton.isEnabled = enable
        }

        passwordEditText.addTextChangedListener{
            val enable = emailEditText.text.isNotEmpty() && passwordEditText.text.isNotEmpty()
            loginButton.isEnabled = enable
            signUpButton.isEnabled = enable
        }
    }

    private fun initSignUpButton() {
        val signUpButton = findViewById<Button>(R.id.signButton)
        signUpButton.setOnClickListener {
            val email = getInputEmail()
            val password = getInputPassword()

            auth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this) {task->
                    if(task.isSuccessful){
                        Toast.makeText(this, "회원가입에 성공했습니다", Toast.LENGTH_SHORT).show()
                    } else{
                        Toast.makeText(this, "회원가입에 실패했습니다", Toast.LENGTH_SHORT).show()
                    }
                }
        }
    }

    private fun initLoginButton() {
        val loginButton = findViewById<Button>(R.id.loginButton)
        loginButton.setOnClickListener {
            val email = getInputEmail()
            val password = getInputPassword()

            auth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        finish()
                    } else {
                        Toast.makeText(this, "로그인에 실패했습니다.", Toast.LENGTH_SHORT).show()
                        
                    }
                }
        }
    }

    private fun getInputEmail(): String {
        return findViewById<EditText>(R.id.emailEditText).text.toString()
    }

    private fun getInputPassword(): String {
        return findViewById<EditText>(R.id.passwordEditText).text.toString()
    }
}

 

xml 코드

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

    <EditText
        android:id="@+id/emailEditText"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_width="0dp"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/passwordEditText"
        app:layout_constraintTop_toBottomOf="@id/emailEditText"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:inputType="textPassword"
        android:layout_width="0dp"
        android:layout_height="wrap_content"/>



    <Button
        android:id="@+id/loginButton"
        android:text="로그인"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/passwordEditText"
        app:layout_constraintEnd_toEndOf="parent" />

    <Button
        android:id="@+id/signButton"
        android:text="회원가입"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="4dp"
        app:layout_constraintTop_toBottomOf="@id/passwordEditText"
        app:layout_constraintEnd_toStartOf="@id/loginButton" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

4.  위 프로그램을 실행시켜서 회원가입을 한 다음에 Firebase 의 Authentication 의 Users 에 들어가면 회원가입한 이메일(식별자) 가 찍혀있는것을 확인할 수 있다.

 

 

Comments