inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

하울의 안드로이드 인스타그램 클론 만들기

하울스타그램 로그인 화면

구글 로그인에서 런타임 오류가 발생합니다.

해결된 질문

541

systella

작성한 질문수 1

0

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.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)
} else {
Toast.makeText(this, "로그인 실패", Toast.LENGTH_LONG).show()
}
}
}

위의 함수에서 토스트메시지로 로그인 결과값을 받아오는 것이 정상 작동 하는 것까지는 확인하였으나 계속하여 로그인 실패가 발생합니다.

logcat 확인 결과는 다음과 같습니다.
E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@8378379


혹시 몰라 전체 코드 첨부합니다.
package com.example.instagram

import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
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() {

var auth: FirebaseAuth? = null
var googleSignInClient : GoogleSignInClient? = null
var GOOGLE_LOGIN_CODE = 9001 //구글 로그인 시 사용할 리퀘스트 값


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


email_login_button.setOnClickListener {
signinAndSignup()
}

google_sign_in_button.setOnClickListener {
//google login first step
googleLogin()
}

//구글 로그인 옵션 만들기
var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id)) // 구글 API 키
.requestEmail() // email id 받아오기
.build() // build로 닫아줍니다

googleSignInClient = GoogleSignIn.getClient(this, gso)

//firebase 로그인 통합 관리하는 객체 만들기
auth = FirebaseAuth.getInstance()

}

fun googleLogin() {
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) {
//구글에서 넘겨주는 로그인 결과값 받아오기
var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if(result.isSuccess) { //로그인 성공 시
//이 값을 파이어베이스에 넘길수 있도록 만들어 주기
var account = result.signInAccount
//second step
firebaseAuthWithGoogle(account)
} else {
Toast.makeText(this, "로그인 실패", Toast.LENGTH_LONG).show()
}
}
}

//구글 로그인 성공시 토큰값을 파이어베이스로 넘겨주어서 계정을 생성하는 코드
fun firebaseAuthWithGoogle(account : GoogleSignInAccount?) {
//account 안에 있는 token id를 넘겨주기
var credential = GoogleAuthProvider.getCredential(account?.idToken, null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
//로그인 성공(id, pw 일치)
moveMainPage(task.result?.user)
} else {
//로그인 실패
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) {
//아이디 생성 성공 시
moveMainPage(task.result?.user)
} else {
//이미 계정이 있는 경우
signinEmail()
}
}

}

//로그인 함수
fun signinEmail() {
auth?.signInWithEmailAndPassword(email_edittext.text.toString(), password_edittext.text.toString())
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
//로그인 성공(id, pw 일치)
moveMainPage(task.result?.user)
} else {
//로그인 실패
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}

//로그인 성공 시 다음 페이지로 넘어가는 함수
fun moveMainPage(user: FirebaseUser?) { //firebaseUser상태를 넘겨줌
if(user != null) {//user가 있을 경우
startActivity(Intent(this,MainActivity::class.java))
}
}
}


kotlin android 클론코딩

답변 2

0

systella

넵 sha키 제대로 되어있었고 그냥 컴퓨터 껐다가 켰더니 해결되었습니다 답변 감사합니다 :)

0

하울

흠.. 구글 오류는 sha1 에러가 대다수인데 혹시 sha키는 확인해보셨나요?

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

0

74

1

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

0

99

1

1강 AndroidManifest.xml 코드 오류

0

466

1

도와주세요 ㅠㅠ

0

405

1

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

0

382

0

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

0

513

1

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

0

360

1

bottom_navigation 오류

0

425

1

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

0

271

1

오류..? 에러..?

0

472

0

페이스북 로그인

0

355

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

1697

1

mainfest 오류

1

242

0