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 @@
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index ef8e63e..0f7763c 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -19,8 +19,8 @@
-
-
+
+
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