inflearn logo
강의

Course

Instructor

Howl's Android Instagram Clone

Howlstagram Facebook Login

페이스북 로그인

355

pshoon05265242

1 asked

0

페이스북 로그인버튼을 활용하여 실행하면, 
페이스북 계정을 올바르게 입력하였음에도 다음과 같이 나타나서 문의드립니다.

코드는 아래와 같습니다.

package com.example.howlstagram

import android.content.ContentValues.TAG
import android.content.Intent
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.Bundle
import android.service.controls.ControlsProviderService.TAG
import android.util.Base64
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentActivity
import com.facebook.AccessToken
import com.facebook.CallbackManager
import com.facebook.FacebookCallback
import com.facebook.FacebookException
import com.facebook.login.LoginManager
import com.facebook.login.LoginResult
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.FacebookAuthProvider
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.*
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.util.*


class LoginActivity : AppCompatActivity() {
var auth : FirebaseAuth? = null
var googleSignInClient : GoogleSignInClient? = null
var GOOGLE_LOGIN_CODE = 9001
var callbackManager : CallbackManager? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = FirebaseAuth.getInstance()
email_login_button.setOnClickListener {
signinAndSignup()
}
google_sign_in_button.setOnClickListener {
//First Step
googleLogin()
}
facebook_login_button.setOnClickListener {
facebooklogin()
//First Step
}
var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("284216010288-9grtncojbd715e2b7ud2mkg47g3nttpj.apps.googleusercontent.com")
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this,gso)
printHashKey()
callbackManager = CallbackManager.Factory.create()


}
fun printHashKey() {
try {
val info: PackageInfo = packageManager
.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.encode(md.digest(), 0))
Log.i("TAG", "printHashKey() Hash Key: $hashKey")
}
} catch (e: NoSuchAlgorithmException) {
Log.e("TAG", "printHashKey()", e)
} catch (e: Exception) {
Log.e("TAG", "printHashKey()", e)
}
}
fun googleLogin(){
var signInIntent = googleSignInClient?.signInIntent
startActivityForResult(signInIntent,GOOGLE_LOGIN_CODE)
}
fun facebooklogin(){
LoginManager.getInstance() // public profile과 email을 가져옴
.logInWithReadPermissions(this, Arrays.asList("public_profile","email"))
LoginManager.getInstance() // 로그인 성공시 가져오게 되는 부분.
.registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
override fun onSuccess(result: LoginResult?) {
// Second Step
handleFacebookAccessToken(result?.accessToken)

//로그인 성공시 데이터를 firebase로
}
override fun onCancel() {
}
override fun onError(error: FacebookException) {
}
})
}
fun handleFacebookAccessToken(token : AccessToken?){
var credential = FacebookAuthProvider.getCredential(token?.token!!)
auth?.signInWithCredential(credential) // firebase로 정보를 넘기는것. google과 동일
?.addOnCompleteListener {
task ->
if (task.isSuccessful) {
//login
//Third Step 응답값을 받아서 정리한다.
moveMainPage(task.result?.user)
} else {
//show the error message
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}




override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
callbackManager?.onActivityResult(requestCode, resultCode,data)
if(requestCode == GOOGLE_LOGIN_CODE){
var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if(result.isSuccess){
var account = result.signInAccount
//second step
firebaseAuthWithGoogle(account)
}
}
}
fun firebaseAuthWithGoogle(account : GoogleSignInAccount?){
var credential = GoogleAuthProvider.getCredential(account?.idToken,null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
//login
moveMainPage(task.result?.user)
} else {
//show the error message
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}
fun signinAndSignup(){
// 회원가입 하는 코드
auth?.createUserWithEmailAndPassword(email_edittext.text.toString(), password_edittext.text.toString())
?.addOnCompleteListener {
task ->
if(task.isSuccessful){
//creating a user account
moveMainPage(task.result?.user)
}else if(task.exception?.message.isNullOrEmpty()){
//show the error message
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}else{
//login if you have account
signinEmail()
}


}
}
fun signinEmail(){
auth?.signInWithEmailAndPassword(email_edittext.text.toString(), password_edittext.text.toString())
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
//login
moveMainPage(task.result?.user)
} else {
//show the error message
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}
fun moveMainPage(user:FirebaseUser?){
if(user != null){
startActivity(Intent(this, MainActivity::class.java))
}
}
}

 

4강 kotlin 페이스북 android 로그인 클론코딩

Answer 0

CloudFireStore에 데이터가 들어가지 않아요

0

74

1

firebase storage에서 putfile해도 이미지 업로드가 안되요..

0

97

1

1강 AndroidManifest.xml 코드 오류

0

466

1

도와주세요 ㅠㅠ

0

405

1

게시물이 뜨지 않습니다.(detail_veiw)

0

382

0

NavigationBarView 사용법 변경으로 인한 네비게이션 바 애니메이션 적용법

0

512

1

안드로이드 11 이상부터 startActivityForResult 지원 안하므로 다른 방법 이용

0

360

1

bottom_navigation 오류

0

425

1

게시물을 최신게시물순으로 하고싶은데 어떻게 하면 될까요..?ㅠ

0

271

1

오류..? 에러..?

0

472

0

댓글 activity에서 mainActivity의 userFragment 이동 방법관련..

0

366

1

댓글activity에서 userId를 클릭했을 때

0

295

1

파이어베이스 연결에서 막힙니다,,

0

399

1

파이어베이스 이미지url Glide로 불러올 때 에러

1

554

1

- 혹시 사진 업로드 여러장 되게 할수 있는 방법이 있을까요??

0

420

1

화면전환시 색깔이 안나오고 흰바탕입니다

0

260

1

Facebook공식 문서에서 제공해주는 최신 SDK 오류

1

282

0

startActivityForResult와 onActivityResult는 이제 안드로이드 스튜디오에서 못쓰게 하는데 어떻게 수정 해야 할까요?

0

391

1

google 계정 선택창이 아예 뜨지 않습니다.

0

298

1

로그인 시 에러

0

315

0

3강에서 startActivityForResult 사용불가 문제

0

450

1

인스타그램 자바언어로 하는 클론코딩은 없을까요?

0

1696

1

mainfest 오류

1

242

0

사진업로드 안됨

0

255

0