Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ plugins {
id 'androidx.navigation.safeargs.kotlin'

}

apply plugin: 'com.android.application'
android {
compileSdk 32

Expand Down Expand Up @@ -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'
}
64 changes: 58 additions & 6 deletions app/src/main/java/com/example/drwaing/ui/login/LoginActivity.kt
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -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()
// 구글 로그아웃
}
}

}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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)
Expand All @@ -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)
}
}
Expand All @@ -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<GoogleSignInAccount> =
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)
}

}
}
}
14 changes: 14 additions & 0 deletions app/src/main/java/com/example/drwaing/ui/main/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -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}")
}
}
}
}
40 changes: 22 additions & 18 deletions app/src/main/res/layout/fragment_social_login.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,25 +75,29 @@
android:textSize="14sp"></TextView>
</LinearLayout>

<LinearLayout
android:id="@+id/ll_google_login"
<com.google.android.gms.common.SignInButton
android:id="@+id/sign_in_button"
android:layout_width="335dp"
android:layout_height="56dp"
android:background="@drawable/bg_login_button"
android:gravity="center">

<ImageView
android:layout_width="32dp"
android:layout_height="32dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Google 계정으로 로그인"

android:textColor="#111111"
android:textSize="14sp"></TextView>
</LinearLayout>
android:layout_height="56dp" />
<!-- <LinearLayout-->
<!-- android:id="@+id/ll_google_login"-->
<!-- android:layout_width="335dp"-->
<!-- android:layout_height="56dp"-->
<!-- android:background="@drawable/bg_login_button"-->
<!-- android:gravity="center">-->

<!-- <ImageView-->
<!-- android:layout_width="32dp"-->
<!-- android:layout_height="32dp" />-->

<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Google 계정으로 로그인"-->

<!-- android:textColor="#111111"-->
<!-- android:textSize="14sp"></TextView>-->
<!-- </LinearLayout>-->
</LinearLayout>


Expand Down
18 changes: 18 additions & 0 deletions app/src/main/res/layout/item_recycler_drawing.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/item_drawing_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="2022.03.13 일요일"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:id="@+id/item_drawing_weather"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginTop="2dp"
android:src="@drawable/ic_launcher_background"
app:layout_constraintLeft_toRightOf="@id/item_drawing_date"
app:layout_constraintTop_toTopOf="parent"></ImageView>

</androidx.constraintlayout.widget.ConstraintLayout>