Skip to content

Commit 98cf936

Browse files
committed
[BOOK-275] feat: Cloud Vision API 키를 BuildConfig로 관리
1 parent 8e362f6 commit 98cf936

File tree

4 files changed

+43
-22
lines changed

4 files changed

+43
-22
lines changed

core/ocr/build.gradle.kts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
@file:Suppress("INLINE_FROM_HIGHER_PLATFORM")
22

3+
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
4+
5+
36
plugins {
47
alias(libs.plugins.booket.android.library)
58
alias(libs.plugins.booket.android.retrofit)
@@ -8,13 +11,27 @@ plugins {
811

912
android {
1013
namespace = "com.ninecraft.booket.core.ocr"
14+
15+
defaultConfig {
16+
buildConfigField("String", "CLOUD_VISION_API_KEY", getApiKey("CLOUD_VISION_API_KEY"))
17+
}
18+
19+
buildFeatures {
20+
buildConfig = true
21+
}
1122
}
1223

1324
dependencies {
1425
implementations(
26+
projects.core.common,
27+
1528
libs.logger,
1629
libs.androidx.camera.core,
1730

1831
libs.google.mlkit.text.recognition.korean,
1932
)
2033
}
34+
35+
fun getApiKey(propertyKey: String): String {
36+
return gradleLocalProperties(rootDir, providers).getProperty(propertyKey)
37+
}
Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
11
package com.ninecraft.booket.core.ocr.analyzer
22

3+
import com.ninecraft.booket.core.common.utils.runSuspendCatching
4+
import com.ninecraft.booket.core.ocr.BuildConfig
35
import com.ninecraft.booket.core.ocr.model.AnnotateImageRequest
46
import com.ninecraft.booket.core.ocr.model.CloudVisionRequest
7+
import com.ninecraft.booket.core.ocr.model.CloudVisionResponse
58
import com.ninecraft.booket.core.ocr.model.Feature
69
import com.ninecraft.booket.core.ocr.model.ImageContext
710
import com.ninecraft.booket.core.ocr.model.VisionImage
811
import com.ninecraft.booket.core.ocr.service.CloudVisionService
9-
import com.orhanobut.logger.Logger
1012
import javax.inject.Inject
1113

1214
class CloudOcrRecognizer @Inject constructor(
1315
private val service: CloudVisionService,
1416
) {
15-
suspend fun recognizeText(base64Image: String) {
16-
try {
17-
val request = CloudVisionRequest(
18-
requests = listOf(
19-
AnnotateImageRequest(
20-
image = VisionImage(base64Image),
21-
features = listOf(Feature(type = "TEXT_DETECTION")),
22-
imageContext = ImageContext(languageHints = null),
23-
),
17+
suspend fun recognizeText(base64Image: String): Result<CloudVisionResponse> = runSuspendCatching {
18+
val request = CloudVisionRequest(
19+
requests = listOf(
20+
AnnotateImageRequest(
21+
image = VisionImage(base64Image),
22+
features = listOf(Feature(type = "TEXT_DETECTION")),
23+
imageContext = ImageContext(languageHints = null),
2424
),
25-
)
26-
service.annotate(
27-
key = "", // local properties 에서 key 가져오기
28-
body = request,
29-
)
30-
} catch (e: Exception) {
31-
Logger.e("${e.message}")
32-
}
25+
),
26+
)
27+
28+
service.batchAnnotateImage(
29+
key = BuildConfig.CLOUD_VISION_API_KEY,
30+
body = request,
31+
)
3332
}
3433
}

core/ocr/src/main/kotlin/com/ninecraft/booket/core/ocr/di/CloudVisionNetworkModule.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ninecraft.booket.core.ocr.di
22

3+
import com.ninecraft.booket.core.ocr.BuildConfig
34
import com.ninecraft.booket.core.ocr.service.CloudVisionService
45
import dagger.Module
56
import dagger.Provides
@@ -14,7 +15,7 @@ import retrofit2.converter.kotlinx.serialization.asConverterFactory
1415
import java.util.concurrent.TimeUnit
1516
import javax.inject.Singleton
1617

17-
18+
private const val BASE_URL = "https://vision.googleapis.com/"
1819
private const val MaxTimeoutMillis = 15_000L
1920

2021
private val jsonRule = Json {
@@ -39,7 +40,11 @@ object CloudVisionNetworkModule {
3940
@CloudVisionOkHttp
4041
fun provideOkHttp(): OkHttpClient {
4142
val log = HttpLoggingInterceptor().apply {
42-
level = HttpLoggingInterceptor.Level.BASIC
43+
level = if (BuildConfig.DEBUG) {
44+
HttpLoggingInterceptor.Level.BASIC
45+
} else {
46+
HttpLoggingInterceptor.Level.NONE
47+
}
4348
}
4449
return OkHttpClient.Builder()
4550
.addInterceptor(log)
@@ -61,7 +66,7 @@ object CloudVisionNetworkModule {
6166
@CloudVisionOkHttp okHttpClient: OkHttpClient,
6267
): Retrofit {
6368
return Retrofit.Builder()
64-
.baseUrl("https://vision.googleapis.com/")
69+
.baseUrl(BASE_URL)
6570
.client(okHttpClient)
6671
.addConverterFactory(jsonConverterFactory)
6772
.build()

core/ocr/src/main/kotlin/com/ninecraft/booket/core/ocr/service/CloudVisionService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import retrofit2.http.Query
88

99
interface CloudVisionService {
1010
@POST("v1/images:annotate")
11-
suspend fun annotate(
11+
suspend fun batchAnnotateImage(
1212
@Query("key") key: String,
1313
@Body body: CloudVisionRequest
1414
): CloudVisionResponse

0 commit comments

Comments
 (0)