1. 라이브러리 설치 Build.gradle(Module:app) Dependencies

1
2
    //구글 로그인 지원
    implementation 'com.google.android.gms:play-services-auth:12.0.0'
cs


2. https://console.firebase.google.com/ 사용설정으로 수정해준다.


3. LoginActivity.kr 페이지에 소스를 입력하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package kr.vrpano.wonstar
 
import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Toast
import com.facebook.CallbackManager
import com.google.android.gms.auth.api.Auth
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.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.GoogleAuthProvider
import kotlinx.android.synthetic.main.activity_login.*
 
class LoginActivity : AppCompatActivity() {
 
    // Firebase Authentication 관리 클래스
    var auth: FirebaseAuth? = null
 
    // 구글 로그인 관리 클래스
    var googleSignInClient: GoogleSignInClient? = null
 
//    // 로그인 처리 결과 관리 클래스
//    var callbackManager : CallbackManager? = null
 
    // GoogleLogin
    val GOOGLE_LOGIN_CODE = 9001
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
 
        // Firebase 로그인 통합 관리하는 Object 만들기
        auth = FirebaseAuth.getInstance()
 
        // 구글 로그인 옵션
        var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id)) //토큰요청
            .requestEmail() //이메일 요청
            .build() //코드를 끝마치겠다
 
        // 구글 로그인 클래스를 만듬
        googleSignInClient = GoogleSignIn.getClient(this, gso) // 구글 로그인하는 클래스
        //callbackManager = CallbackManager.Factory.create() // 초기
 
        // 구글 로그인 버튼 이벤트
        google_sign_in_button.setOnClickListener { googleLogin() }
 
    }
 
 
    // 로그인 성공 시 이동할 페이지
    fun moveMainPage(user: FirebaseUser?) {
        if (user != null) {
            Toast.makeText(
                this,
                getString(R.string.signin_complete),
                Toast.LENGTH_SHORT
            ).show()
            startActivity(Intent(this, MainActivity::class.java))
            finish()
        }
    }
 
    // 구글 로그인 코드
    fun googleLogin() {
        progress_bar.visibility = View.VISIBLE
        var signInIntent = googleSignInClient?.signInIntent
        startActivityForResult(signInIntent, GOOGLE_LOGIN_CODE)
    }
 
    // 구글 로그인 성공 했을 때 결과값이 넘어오는 함수
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
 
        // 구글에서 승인된 정보를 가지고 오기
        if (requestCode == GOOGLE_LOGIN_CODE) {
            val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
            if (result.isSuccess) {
                // 구글 로그인이 성공 했을 경우
                var account = result.signInAccount
                firebaseAuthWithGoogle(account!!)
               // moveMainPage(auth?.currentUser) //유저아이디를 넘겨준다.
            } else {
                progress_bar.visibility = View.GONE
            }
        }
    }
 
    // 구글 로그인 성공시 토큰값을 파이어베이스로 넘겨주어서 계정을 생성하는 콛,
    fun firebaseAuthWithGoogle(account: GoogleSignInAccount) {
        var credential = GoogleAuthProvider.getCredential(account.idToken, null)
        auth?.signInWithCredential(credential)
            ?.addOnCompleteListener { task ->
                progress_bar.visibility = View.GONE
                if (task.isSuccessful) {
                    //다음 페이지 호출
                    moveMainPage(auth?.currentUser)
                }
            }
    }
 
    // 자동 로그인 설정
    override fun onStart() {
        super.onStart()
        // 자동 로그인 설정
        moveMainPage(auth?.currentUser)
    }
 
}
 
cs



4. 어플을 실행하고 구글아이디로 로그인을 하면 MainActivity 화면으로 전환된다.



5. MainActivity 에 로그아웃버튼을 만들어서 로그아웃을 해보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package kr.vrpano.wonstar
 
import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import kotlinx.android.synthetic.main.activity_main.*
 
class MainActivity : AppCompatActivity() {
 
    // Firebase
    var auth: FirebaseAuth? = null
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        auth = FirebaseAuth.getInstance()
 
        //로그아웃 버튼 이벤트 처리
        account_btn_follow_signout.setOnClickListener { view ->
            auth?.signOut()
 
            startActivity(Intent(this, LoginActivity::class.java))
 
        }
    }
}
 
cs


+ Recent posts