미해결
하울의 안드로이드 인스타그램 클론 만들기
페이스북 로그인
페이스북 로그인버튼을 활용하여 실행하면, 페이스북 계정을 올바르게 입력하였음에도 다음과 같이 나타나서 문의드립니다.
코드는 아래와 같습니다.
package com.example.howlstagramimport android.content.ContentValues.TAGimport android.content.Intentimport android.content.pm.PackageInfoimport android.content.pm.PackageManagerimport android.os.Bundleimport android.service.controls.ControlsProviderService.TAGimport android.util.Base64import android.util.Logimport android.widget.Toastimport androidx.appcompat.app.AppCompatActivityimport androidx.fragment.app.FragmentActivityimport com.facebook.AccessTokenimport com.facebook.CallbackManagerimport com.facebook.FacebookCallbackimport com.facebook.FacebookExceptionimport com.facebook.login.LoginManagerimport com.facebook.login.LoginResultimport com.google.android.gms.auth.api.Authimport com.google.android.gms.auth.api.signin.GoogleSignInimport com.google.android.gms.auth.api.signin.GoogleSignInAccountimport com.google.android.gms.auth.api.signin.GoogleSignInClientimport com.google.android.gms.auth.api.signin.GoogleSignInOptionsimport com.google.firebase.auth.FacebookAuthProviderimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.auth.FirebaseUserimport com.google.firebase.auth.GoogleAuthProviderimport kotlinx.android.synthetic.main.activity_login.*import java.security.MessageDigestimport java.security.NoSuchAlgorithmExceptionimport 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)) } }}