페이스북 로그인
355
1 câu hỏi đã được viết
페이스북 로그인버튼을 활용하여 실행하면,
페이스북 계정을 올바르게 입력하였음에도 다음과 같이 나타나서 문의드립니다.
코드는 아래와 같습니다.
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))
}
}
}
Câu trả lời 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
513
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

