2021. 5. 27. 23:56ใ๐ฑAndroid/๐ฉ๐ป๐ป Android ๊ฐ๋ฐ ์ผ์ง
์ค๋์ ์นด์นด์คํก ๋ก๊ทธ์ธ์ Android ์ฐ๊ฒฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
์ ๊ฐ ์ด์ฉํ๋ ์นด์นด์คํก ๋ก๊ทธ์ธ์ v2 ๊ธฐ์ค์ ๋๋ค!
๋ด ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋กํ๊ธฐ
์๋ ํ์ด์ง์ ๋ค์ด๊ฐ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ํ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐํด์ฃผ์ธ์!
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฑ๋กํ์๋ฉด ์๋์ ๊ฐ์ด ๋ค์ดํฐ๋ธ ์ฑํค๋ฅผ ์ป์ผ์ค ์ ์์ต๋๋ค : )
์ด๋ ! ๋ค์ดํฐ๋ธ ์ฑํค๋ฅผ ์๋๋ก์ด๋ ํ๋ก์ ํธ ๋ด์ string ๊ฐ์ผ๋ก ๊ฐ์ง๊ณ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค์ํฉ๋๋ค !
ํ๋ซํผ ๋ฑ๋กํ๊ธฐ
ํ๋ซํผ ์นดํ ๊ณ ๋ฆฌ์ ํ๋ซํผ์ ์ค์ ํ ์ ์์ต๋๋ค. Android ํ๋ซํผ์ ๋ฑ๋กํด์ฃผ์ด์ผํฉ๋๋ค!
ํค ํด์ ์ถ์ถํด์ ๋ฑ๋กํ๊ธฐ
์ด๋ ํค ํด์๋ฅผ ๋ฑ๋กํด์ฃผ์ด์ผ ํ๋๋ฐ ํค ํด์๊ฐ์ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ ์๋ ํ์ด์ง๋ฅผ ์ด์ฉํ์ ์ ๋ฑ๋กํด์ฃผ์๋ฉด ๋ฉ๋๋ค!
์นด์นด์ค ๋ก๊ทธ์ธ ON ํด์ฃผ๊ธฐ
Redirect URI๋ REST API๋ก ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ํ์๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
์ ๋ ์ด ๋ถ๋ถ์์ Redirect URI๋ฅผ ์ค์ ํด์ฃผ์ง ์์๋๋ ์นด์นด์คํก ๋ก๊ทธ์ธ ํ๋ฉด์์ ๋ก๊ทธ์ธ ํ ๋์ด๊ฐ์ง ์๋ ํ์์ด ์์์ต๋๋ค!
์ ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๊ผญ ์์๋ก ์ ์ด์ฃผ์ธ์.
์ ๋ฑ๋กํด์ฃผ์ จ๋ค๋ฉด ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฑ๋ก์ ๋๋ฌ์ต๋๋ค.
์ด์ ์๋๋ก์ด๋ ํ๋ก์ ํธ์ ์นด์นด์ค ๋ก๊ทธ์ธ์ ์ ์ฉํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
build.gradle (Module)
์นด์นด์ค ๋ก๊ทธ์ธ๋ง ์ฌ์ฉํ์ ๋ค ์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ usermgmt๋ง ์ถ๊ฐํ์๋ฉด ๋ฉ๋๋ค
implementation group: 'com.kakao.sdk', name: 'usermgmt', version: '1.30.0'
implementation group: 'com.kakao.sdk', name: 'kakaolink', version: '1.30.5'
implementation "com.kakao.sdk:v2-user:2.5.0" // ์นด์นด์ค ๋ก๊ทธ์ธ
implementation "com.kakao.sdk:v2-talk:2.5.0" // ์น๊ตฌ, ๋ฉ์์ง(์นด์นด์คํก)
implementation "com.kakao.sdk:v2-story:2.5.0" // ์นด์นด์ค์คํ ๋ฆฌ
implementation "com.kakao.sdk:v2-link:2.5.0" // ๋ฉ์์ง(์นด์นด์ค๋งํฌ)
implementation "com.kakao.sdk:v2-navi:2.5.0" // ์นด์นด์ค๋ด๋น
build.gradle (Project)
allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' } // ์นด์นด์ค
}
}
String ๊ฐ ์ถ๊ฐํด์ฃผ๊ธฐ
value / kakao_app_key.xml
์์์ ๋ฐ์ ์นด์นด์ค ๋ค์ดํฐ๋ธ ์ฑํค๋ฅผ ์ถ๊ฐํด์ค์๋ค!
kakao_native_key๋ Redirect URI๋ฅผ ์ํด ํ์ํฉ๋๋ค !
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="kakao_app_key">aaa</string>
<string name="kakao_native_key">kakaoaaa</string>
</resources>
kakao_app_key.xml ํ์ผ์ github์ ์ฌ๋ฆฌ๋ฉด ์๋๋ ํ์ผ์ด๋ฏ๋ก .gitignore์ ์ถ๊ฐํ์ฌ ๊ด๋ฆฌํด์ฃผ์ธ์!
Application Class์ kakaoSdk init ํด์ฃผ๊ธฐ
Application Class๋ ? ์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ ์ฌ์ด์ ๊ณต๋์ผ๋ก ๋ฉค๋ฒ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ํธ๋ฆฌํ ๊ณต์ ํด๋์ค ์ ๋๋ค
Application class๋ฅผ ์์ ๋ฐ์ต๋๋ค.
Application onCreate ํจ์์ kakaosdk๋ฅผ ๋ฑ๋กํด์ค๋๋ค.
class SocketApplication : Application() {
companion object {
var appContext : Context? = null
}
override fun onCreate() {
super.onCreate()
appContext = this
KakaoSdk.init(this,getString(R.string.kakao_app_key))
}
}
Manifest์ KakaoHandlerActivity ์ถ๊ฐํ๊ธฐ
kakao ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ธฐ ์ํ kakao.sdk์ ์กด์ฌํ๋ AuthCodeHandler๋ฅผ ์ถ๊ฐํด์ค๋๋ค.
andorid:scheme์ ๋ค์ด๊ฐ๋ string ๊ฐ์ kakao+ native์ฑํค ์ ๋๋ค.
<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauth" -->
<data
android:host="oauth"
android:scheme="@string/kakao_native_key" />
</intent-filter>
</activity>
์ถ๊ฐ๋ก ์์์ ์์ฑํด์ค ApplicationClass๋ฅผ application name์ ๋ฑ๋กํด์ค๋๋ค.
<application
android:name=".SocketApplication"
....
/>
+) ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐ๋ท์ด ์ฐ๊ฒฐ์ด ๋์ด์ผ ์นด์นด์ค ๋ก๊ทธ์ธ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ Internet permission ๋ ์ถ๊ฐํด์ฃผ์ธ์
<uses-permission android:name="android.permission.INTERNET" />
์ด์ ์ํ๋ ์กํฐ๋นํฐ๋ ํ๋ ๊ทธ๋จผํธ์ ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ์ ๋ login ์ฐฝ์ผ๋ก ๋์ด๊ฐ๋๋ก ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋ชจ๋ ๊ณผ์ ์ด ๋๋ฉ๋๋ค.
์ํ๋ Class์ kakao ๋ก๊ทธ์ธ ์ฝ๋ ๊ตฌํ
isKakaoTalkLoginAvailable์ ํตํด ํด๋น ์ฑ์ ์นด์นด์คํก์ด ์ค์น๋์ด์๋์ง ํ์ธ ํ ์ค์น๋์ด์์ผ๋ฉด ์นด์นด์คํก ๋ก๊ทธ์ธ์ผ๋ก, ์๋ค๋ฉด ์นด์นด์ค ๋ก๊ทธ์ธ ์ธํฐ๋ท ์ฐฝํ๋ฉด์ผ๋ก ์ด๋ํ๊ฒ ํ๋ ์ฝ๋ ์ ๋๋ค.
btnLogin.setOnClickListener {
if (UserApiClient.instance.isKakaoTalkLoginAvailable(this@LoginActivity)) {
UserApiClient.instance.loginWithKakaoTalk(this@LoginActivity, callback = callback)
} else {
UserApiClient.instance.loginWithKakaoAccount(this@LoginActivity, callback = callback)
}
}
callback์ ์นด์นด์ค ๋ก๊ทธ์ธ ํ, ๊ฒฐ๊ณผ์ ๋ํ ์ฝ๋์ ๋๋ค. token๊ณผ error๊ฐ null ์ด ์๋๋ผ๋ฉด me ๋ผ๋ ํด๋น user์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ํจ์๋ฅผ ์ด์ฉํ์ฌ kakaoId๋ฅผ ์ถ์ถํ๊ณ token๊ฐ์ viewModel์๊ฒ ์ ๋ฌํ๋๋ก ๊ตฌํํ์ต๋๋ค.
internal val callback : (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
Timber.e("๋ก๊ทธ์ธ ์คํจ- $error")
} else if (token != null) {
UserApiClient.instance.me { user, error ->
val kakaoId = user!!.id
viewModel?.addKakaoUser(token.accessToken, kakaoId)
}
Timber.d("๋ก๊ทธ์ธ์ฑ๊ณต - ํ ํฐ ${authManager.token}")
}
}
์๋์ ์นด์นด์คํก ๊ณต์๋ฌธ์๋ฅผ ๋ณด์๋ฉด ๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ค ์ ์์ต๋๋ค.
2021.10.27 ์ผ ๊ธฐ์ค, Andorid Studio ๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด์ ์นด์นด์ค ๋ก๊ทธ์ธ Gradle ์ค์ ์ด ์์ ๋ฐฉ๋ฒ๊ณผ ๋ค๋ฅด๊ฒ ์ค์ ํด์ผํ๋ ์ด์๊ฐ ์์ต๋๋ค.
์๋ ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์์ด, ์ค์ ํด์ผํฉ๋๋ค.
'๐ฑAndroid > ๐ฉ๐ปโ๐ป Android ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Github Action์ ์ด์ฉํ์ฌ apk ํ์ผ Slack์ผ๋ก ๋ด๋ณด๋ด๊ธฐ (3) | 2021.05.06 |
---|---|
[Android/Kotlin] ๋ฉํฐ๋ทฐ ํ์ RecyclerView ๊ตฌํํ๊ธฐ (3) | 2021.01.24 |
[Android/Kotlin] RecyclerView Animation ํ์ฉํ๊ธฐ (0) | 2021.01.22 |