안드로이드 애플리케이션 개발에서는 다양한 Third Party Library를 활용하여 기능을 향상시키고 개발 시간을 단축합니다. 이러한 라이브러리들은 종종 API 키를 필요로 하는데, 이는 서비스 제공자와 애플리케이션 간의 인증을 위해 사용됩니다. 하지만 이 API 키가 노출될 경우, 보안 위험이 발생할 수 있습니다. 불법적인 접근, 데이터 유출, 비용 상승 등 다양한 문제가 생길 수 있기 때문에, API 키를 안전하게 관리하고 보호하는 것이 중요합니다.
네아로(네이버 아이디 로그인), 카아로(카카오 아이디 로그인)과 같이 메신저 로그인을 연동할 때도 위와 같은 상황이 동일하게 적용되기 때문에 API 키 관리를 중요하게 생각해야합니다.
이를 위해 개발자는 코드 내에서 직접적으로 키를 노출하지 않고 관리해야 합니다.
이 블로그 포스트에서는 local.properties와 build.gradle.kts를 통해서 구현하는 방법에 대해 설명하고자 합니다.
local.properties
project root에 local.properties 파일이 존재합니다. 이 파일은 기본적으로 .gitignore에 추가되어 있기 때문에 git에 포함되지 않도록 되어있습니다. 실수로 .gitignore에서 제거하지 않도록 조심해야 합니다.
아래와 같이 kakao developers에서 발급한 api key를 추가해줍니다.
// local.properties
KAKAO_API_KEY="{NATIVE_API_KEY}" // String으로 들어가서 "" 필요
KAKAO_REDIRECT_URI=kakao{NATIVE_API_KEY} // "" 불필요
ex)
KAKAO_API_KEY="123456789"
KAKAO_REDIRECT_URI=kakao123456789
build.gradle.kts
gradleLocalProperties() 함수를 통해서 local.properties에 추가한 KAKAO_API_KEY를 가져오고 BuildConfig.KAKAP_API_KEY 형태로 접근 할 수 있도록 합니다.
만약 AndroidManifest.xml에서 사용하려면 addManifestPlaceholders() 함수를 사용해서 추가해야 합니다.
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
android {
defaultConfig {
...
buildConfigField("String", "KAKAO_API_KEY", gradleLocalProperties(rootDir, providers).getProperty("KAKAO_API_KEY"))
addManifestPlaceholders(mapOf("KAKAO_REDIRECT_URI" to gradleLocalProperties(rootDir).getProperty("KAKAO_REDIRECT_URI")))
}
}
여기까지 하고 build를 하는 순간 이런 에러를 만나게 될 수 있습니다.
Caused by: java.lang.RuntimeException: com.android.builder.errors.EvalIssueException: defaultConfig contains custom BuildConfig fields, but the feature is disabled.
gradle.properties
위 처럼 에러를 만나게 되면 gradle.properties에 아래 코드를 추가하면 됩니다.
android.defaults.buildfeatures.buildconfig=true
사용하기
Application class를 상속받은 클래스에서 onCreate에서 사용할 때는 BuildConfig 클래스로 접근하여 사용합니다.
class MyAppApplication : Application() {
override fun onCreate() {
super.onCreate()
KakaoSdk.init(this, BuildConfig.KAKAO_API_KEY)
}
}
AndroidManifest.xml에서는 이렇게 사용합니다.
<activity
android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
android:exported="true">
<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="${KAKAO_REDIRECT_URI}" />
</intent-filter>
</activity>
블로그 글에 대해 궁금한 점이 있다면 아래 카카오톡 오픈채팅에 들어와서 질문해주세요
'개발 > 안드로이드' 카테고리의 다른 글
(Android) Dynamic App Icon (0) | 2024.02.21 |
---|