diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 526b4c2..0cd0cb4 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -16,5 +16,6 @@ + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6a3b1bb..0743b36 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ plugins { id 'androidx.navigation.safeargs.kotlin' } - +apply plugin: 'com.android.application' android { compileSdk 32 @@ -64,4 +64,5 @@ dependencies { implementation "androidx.lifecycle:lifecycle-service:$androidxLifecycleVersion" implementation "com.kakao.sdk:v2-user:2.8.6" + implementation 'com.google.android.gms:play-services-auth:20.1.0' } diff --git a/app/src/main/java/com/example/drwaing/ui/login/LoginActivity.kt b/app/src/main/java/com/example/drwaing/ui/login/LoginActivity.kt index ea3feb0..bc45441 100644 --- a/app/src/main/java/com/example/drwaing/ui/login/LoginActivity.kt +++ b/app/src/main/java/com/example/drwaing/ui/login/LoginActivity.kt @@ -1,10 +1,16 @@ package com.example.drwaing.ui.login +import android.content.Intent import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.example.drwaing.databinding.ActivityLoginBinding import com.example.drwaing.extension.viewBinding +import com.example.drwaing.ui.main.MainActivity +import com.google.android.gms.auth.api.signin.GoogleSignIn +import com.google.android.gms.auth.api.signin.GoogleSignInOptions +import com.kakao.sdk.auth.AuthApiClient +import com.kakao.sdk.common.model.KakaoSdkError import com.kakao.sdk.user.UserApiClient @@ -15,12 +21,58 @@ class LoginActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(binding.root) - UserApiClient.instance.unlink { error -> - if (error != null) { - Log.e("E", "연결 끊기 실패", error) - } else { - Log.e("E", "연결 끊기 성공. SDK에서 토큰 삭제 됨") + + val intent = Intent(this, MainActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION) + + if (AuthApiClient.instance.hasToken()) { //카카오 자동로그인 체크 + UserApiClient.instance.accessTokenInfo { _, error -> + if (error != null) { + if (error is KakaoSdkError && error.isInvalidTokenError() == true) { + //로그인 필요 + } else { + //기타 에러 + } + } else { + //토큰 유효성 체크 성공(필요 시 토큰 갱신됨) + + + startActivity(intent) + finish() + } } + } else { + //로그인 필요 } + + //구글 자동로그인 + val account = GoogleSignIn.getLastSignedInAccount(this) + if (account == null) { + + } else { + Log.e( + "이름", account.id + + account.familyName + account.givenName + ) + startActivity(intent) + finish() + } + + +// UserApiClient.instance.unlink { error -> +// if (error != null) { +// Log.e("E", "연결 끊기 실패", error) +// } else { +// Log.e("E", "연결 끊기 성공. SDK에서 토큰 삭제 됨") +// } +// 카카오 로그아웃 + +// val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) +// .requestEmail() +// .build() +// var mGoogleSignInClient = GoogleSignIn.getClient(this, gso) +// mGoogleSignInClient.signOut() +// 구글 로그아웃 } -} \ No newline at end of file + +} diff --git a/app/src/main/java/com/example/drwaing/ui/login/SocialLoginFragment.kt b/app/src/main/java/com/example/drwaing/ui/login/SocialLoginFragment.kt index 551b80f..b507280 100644 --- a/app/src/main/java/com/example/drwaing/ui/login/SocialLoginFragment.kt +++ b/app/src/main/java/com/example/drwaing/ui/login/SocialLoginFragment.kt @@ -1,5 +1,6 @@ package com.example.drwaing.ui.login +import android.content.Intent import android.os.Bundle import android.util.Log import android.view.View @@ -9,6 +10,11 @@ import androidx.navigation.Navigation.findNavController import com.example.drwaing.R import com.example.drwaing.databinding.FragmentSocialLoginBinding import com.example.drwaing.extension.viewBinding +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.GoogleSignInOptions +import com.google.android.gms.common.api.ApiException +import com.google.android.gms.tasks.Task import com.kakao.sdk.auth.model.OAuthToken import com.kakao.sdk.common.model.ClientError import com.kakao.sdk.common.model.ClientErrorCause @@ -18,21 +24,53 @@ import com.kakao.sdk.user.UserApiClient class SocialLoginFragment : Fragment(R.layout.fragment_social_login) { private val binding: FragmentSocialLoginBinding by viewBinding(FragmentSocialLoginBinding::bind) - private val navController: NavController get() = findNavController(requireActivity(), R.id.nav_login_host) + private val navController: NavController + get() = findNavController( + requireActivity(), + R.id.nav_login_host + ) + private val callback: (OAuthToken?, Throwable?) -> Unit = { token, error -> if (error != null) { Log.e("TAG", "카카오계정으로 로그인 실패", error) } else if (token != null) { Log.e("TAG", "카카오계정으로 로그인 성공 ${token.accessToken}") + UserApiClient.instance.me { user, error -> + if (error != null) { + Log.e("카카오정보실패", "사용자 정보 요청 실패", error) + } else if (user != null) { + Log.e( + "정보", "사용자 정보 요청 성공" + + "\n회원번호: ${user.id}" + + "\n이메일: ${user.kakaoAccount?.email}" + + "\n닉네임: ${user.kakaoAccount?.profile?.nickname}" + + "\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}" + ) + } + } navController.navigate(R.id.action_socialLoginFragment_to_loginSuccessFragment2) } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + + + binding.signInButton.setOnClickListener { + //구글 로그인 초기화 + val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestEmail() + .build() + var mGoogleSignInClient = GoogleSignIn.getClient(requireContext(), gso) + var signInIntent: Intent = mGoogleSignInClient.getSignInIntent() + startActivityForResult(signInIntent, 333) + } + binding.llKakaoLogin.setOnClickListener { if (UserApiClient.instance.isKakaoTalkLoginAvailable(requireContext())) { + UserApiClient.instance.loginWithKakaoTalk(requireContext()) { token, error -> if (error != null) { Log.e("TAG", "카카오톡으로 로그인 실패", error) @@ -47,6 +85,7 @@ class SocialLoginFragment : Fragment(R.layout.fragment_social_login) { ) } else if (token != null) { Log.i("TAG", "카카오톡으로 로그인 성공 ${token.accessToken}") + navController.navigate(R.id.action_socialLoginFragment_to_loginSuccessFragment2) } } @@ -58,4 +97,22 @@ class SocialLoginFragment : Fragment(R.layout.fragment_social_login) { } } } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == 333) { + try { + val task: Task = + GoogleSignIn.getSignedInAccountFromIntent(data) + val account = task.getResult(ApiException::class.java) + Log.e("이름", account.familyName + account.givenName) + navController.navigate(R.id.action_socialLoginFragment_to_loginSuccessFragment2) + + + } catch (e: ApiException) { + Log.e("failed", "signInResult:failed code=" + e.statusCode) + } + + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/drwaing/ui/main/MainActivity.kt b/app/src/main/java/com/example/drwaing/ui/main/MainActivity.kt index 78b9415..95b08c5 100644 --- a/app/src/main/java/com/example/drwaing/ui/main/MainActivity.kt +++ b/app/src/main/java/com/example/drwaing/ui/main/MainActivity.kt @@ -1,14 +1,28 @@ package com.example.drwaing.ui.main import android.os.Bundle +import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.example.drwaing.databinding.ActivityMainBinding import com.example.drwaing.extension.viewBinding +import com.kakao.sdk.user.UserApiClient class MainActivity : AppCompatActivity() { private val binding: ActivityMainBinding by viewBinding(ActivityMainBinding::inflate) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) + UserApiClient.instance.me { user, error -> + if (error != null) { + Log.e("카카오정보실패", "사용자 정보 요청 실패", error) + } + else if (user != null) { + Log.e("정보", "사용자 정보 요청 성공" + + "\n회원번호: ${user.id}" + + "\n이메일: ${user.kakaoAccount?.email}" + + "\n닉네임: ${user.kakaoAccount?.profile?.nickname}" + + "\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}") + } + } } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_social_login.xml b/app/src/main/res/layout/fragment_social_login.xml index 5af759c..2871f62 100644 --- a/app/src/main/res/layout/fragment_social_login.xml +++ b/app/src/main/res/layout/fragment_social_login.xml @@ -75,25 +75,29 @@ android:textSize="14sp"> - - - - - - + android:layout_height="56dp" /> + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_recycler_drawing.xml b/app/src/main/res/layout/item_recycler_drawing.xml index 9de204c..e2eb911 100644 --- a/app/src/main/res/layout/item_recycler_drawing.xml +++ b/app/src/main/res/layout/item_recycler_drawing.xml @@ -1,8 +1,26 @@ + + + + \ No newline at end of file