ํ์ฌ์์ ์ด๋ฒ์
โ๐ป์ง๋ ๊ธฐ๋ฐโ๐ป์ ๋ฐ๋ ค๊ฒฌ ์ ์ค ๋ฐ ์ปค๋ฎค๋ํฐ๋ฅผ
๊ฐ๋ฐํด์ผ ํ๋ ์ํฉ์ด ์์ต๋๋ค.
ํ์ฌ ์ ํฌ ์ฑ์ ์ํฉ์
๋ฐํ
๋ค๋น๊ฒ์ด์
, ๋ง์ดํ์ด์ง, ์นด๋ฉ๋ผ ํ๋ฉด์ ์ ์ธํ
ํ๋ฉด์ ๋ชจ๋ ์ปดํฌ์ฆ๋ก ์ ํ์ด ์๋ฃ๋ ์ํ์ด๊ณ
๋ฐํ
๋ค๋น๊ฒ์ด์
์ '๋๋ค' ํญ์ด ์ถ๊ฐ๋๋ ์ํฉ์์
ํด๋น ํ๋ฉด๋ ์ปดํฌ์ฆ๋ก ๊ฐ๋ฐ๋๋ฉด
์ถํ ์ปดํฌ์ฆ ํตํฉ์ ํธ๋ฆฌํ ์ํฉ์ธ๋ฐ
๊ตฌ๊ธ๋งต ์ปดํฌ์ฆ์ ๋ํ ์๋ฃ๊ฐ ๋ณ๋ก ์๊ณ
์์ด๋ ๊ธฐ์ด์ ์ธ ์ฌ์ฉ๋ฒ ๋ฐ์ ์์ด์
๊ธฐ์ ์ ํ์ํ ์คํ์ ๋ง๊ฒ ๊ฒํ ๋ฅผ ํด๋ณด์๋๋ฐ์.
๊ฒํ ํ๋ ๊ณผ์ ์์ ๋ฐ๊ฒฌํ
์ฌ์ฉ๋ฒ๊ณผ ์ฃผ์ํ ์ ๋ฑ์
๊ณต์ ํด ๋ณด๊ฒ ์ต๋๋ค.
// Compose - map
implementation "com.google.android.gms:play-services-maps:$rootProject.googleMapVersion"
implementation "com.google.android.gms:play-services-location:$rootProject.googleLocation"
implementation "com.google.maps.android:maps-compose:$rootProject.composeMapVersion"
// (Optional)
implementation "com.google.maps.android:maps-compose-utils:$rootProject.composeMapVersion"
MAPS_API_KEY=YOUR_API_KEY
๊ฐ ์ ์ฅ๋ ๊ณณ์ ์
ํ
plugins {
...
id(libs.plugins.secret.gradle.plugin.get().pluginId)
}
android {
...
}
dependencies {
...
implementation(libs.bundles.compose.map)
}
secrets {
// To add your Maps API key to this project:
// 1. Add this line to your local.properties file, where YOUR_API_KEY is your API key:
// MAPS_API_KEY=YOUR_API_KEY
defaultPropertiesFileName = "local.properties"
}
CameraPositionState
- ์ง๋์ ์นด๋ฉ๋ผ ์ํ๋ฅผ ๋ด๋น
// ์ด๊ธฐ ์ค์ val cameraPositionState = rememberCameraPositionState() val cameraPositionState = rememberCameraPositionState { this.position = CameraPosition.fromLatLngZoom(LatLng target, float zoomLevel) } // ์นด๋ฉ๋ผ ์ ์ด LaunchedEffect(key) { cameraPositionState.position = CameraPosition.fromLatLngZoom(latlng, zoom) }
MapProperties
- ์ง๋์ Property ๋ฅผ ์ค์ ๋ด๋น
- ์ง๋ UI์์ ๋ด ์์น๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ์ค์ ์ฌ๋ถ ๋ฐ ์ค ์ค์ ๋ฑ๋ฑ
val properties by remember { mutableStateOf( MapProperties( isMyLocationEnabled = true, minZoomPreference = getMinZoomLevelWithin3KM(windowWidthSize) ) ) }
MapUiSettings
- ์ง๋์ UI ์ค์ ๋ด๋น
- ์ง๋์์ ์ค ํ์ ์ฌ๋ถ, ๋ด ์์น ํ์ ์ฌ๋ถ, ์คํฌ๋กค ๊ฐ๋ฅ ์ฌ๋ถ ๋ฑ ์ค์ ๋ด๋น
val uiSettings by remember { mutableStateOf( MapUiSettings( myLocationButtonEnabled = true, zoomControlsEnabled = false, rotationGesturesEnabled = false ) ) }
์์ ์์๋ฅผ ๋ฐํ์ผ๋ก
GoogleMap ์ปดํฌ์ ๋ธ ํจ์๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋ฉ๋๋ค.
๐ ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ด ์์ต๋๋ค.
๊ตฌ๊ธ๋งต์์ ํ์ฌ ๋ด ์์น๋ฅผ ๋ฐ์ ์ ์๊ฒ ์ค์ ์๋
๋ง์ฝ ๊ถํ์ ๋ฐ์ง ์์ ์ํ์์
MapProperties์ MapUiSettings ๋ก ๋ด ์์น ์ถ์
ํ์ฉ ๊ฐ๋ฅ ์ค์ ์
๐ SecurityException ๋ฐ์ ํฉ๋๋ค.
ํฐ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โ ์์น ๊ถํ์ ๊ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ํ์ฉ์ด ๋๋์ง ํ์ธ
โ ์์น ๊ถํ ์ํ์ ๋ฐ๋ผ ์ ์ ํ UI ๊ตฌ์ฑ
์์ ๊ตฌ์ฑ์ ์ฝ๋๋ก ๋ณด๋ฉด
๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ง์ปค๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋
์๋(latitude)์ ๊ฒฝ๋(longitude)๊ฐ ํ์ ํฉ๋๋ค.
GoogleMapCompose ์์๋ ์๋ ๊ฒฝ๋๋ฅผ
MarkerState๋ก ๊ฐ์ธ์ ์ฌ์ฉ ํฉ๋๋ค.
์ฝ๋๋ฅผ ๋ณด๋ฉด MarkerState ์์ฒด๋
Wrapper ํด๋์ค์ด๊ณ
position์ด ์๋๊ฒฝ๋(LatLng) ๋ฅผ ์ํ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ค ๋ง์ปค๋ฅผ ๋ง๋ ๋ค โก๏ธ MarkerState ๊ฐ ์์ด์ผ ํ๋ค๋ผ๊ณ ์ดํดํ์๋ฉด ์ข์ต๋๋ค.
๊ทธ๋์ ๋ง์ปค๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ๋
GoogleMap ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ณ
contents ๋๋ค์์ Marker๋ฅผ ์์ฑํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๊ธฐํ์์๋ ๋น์ฐํ(?!) ๊ธฐ๋ณธ ๋ง์ปค๋ง ์ฌ์ฉํ๊ฒ ๊ธฐํํ์ง ์๊ณ
์ปค์คํ
ํ ๋์์ธ์ ๋ง์ปค๋ฅผ ๊ธฐํ ํ์
จ์ต๋๋ค.
๊ธฐํ์์๋ ๋ง์ปค ๋์์ธ์ด
โ๐ป์ด๋ฏธ์งโ๐ป์ โ๐ปํ
์คํธโ๐ป๊ฐ
๋ค์ด๊ฐ ์กฐํฉ์ ๋ง์ปค์์ต๋๋ค.
์ด๋ฏธ์ง๋
์ฐ๋ฆฌ ์๋ฒ์ ์ฌ๋ฆฐ ์ด๋ฏธ์ง or ๊ณต๊ณต API ์ ๋ฑ๋ก๋ ์ด๋ฏธ์ง๋ฅผ
๋ฐ์์ค๋ ์คํ์ด์์ต๋๋ค.
ํด๋น ๊ธฐํ์ Custom Marker ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด
์ด๋ค ์ค๊ณ๋ค๊ณผ ํ
ํฌ๋์ด ํ์ ํ๋์ง ์ค๋ช
ํด๋ณด๊ฒ ์ต๋๋ค.
์์ ๊ธฐํ์ ๋ณด์๋ฉด
Marker๋ ์ด๋ฏธ์ง๋ฅผ ์๋ฒ์์ ๋ฐ์
Rendering ํด์ผํ๋ ์ํฉ์
๋๋ค.
ํ์ฌ ์ ํฌ ํ์ฌ๋
Remote Image ์ฌ์ฉ ์
Coil Library ๋ฅผ ์ฌ์ฉํ๋๋ฐ์.
content์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํด์
Rendering ์ ์งํํ๋ฉด
๐จ๋คํธ์ํฌ ์ด๋ฏธ์ง๊ฐ ํญ์ ์คํจ๋ก ๋ณด์์ต๋๋ค.๐จ
๐๐ป ๋ฑ๋ก๋ ์ด์
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ
๐ ์ด๋ฏธ์ง ๋ก๋ ์ ์คํจํ ๋ฐ์ดํฐ๋ง Recomposition
๐ key ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ (8์ ์ดํ ์ถ๊ฐ๋ ๋ฐฉ๋ฒ)
์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ๋ณด๊ฒ ์ต๋๋ค.
๐๐ป๐๐ป๐๐ป๐๐ป๐๐ป๐๐ป๐๐ป๐๐ป๐๐ป๐๐ป๐๐ป
๋ก์ง์ ์ฒ๋ฆฌํ๋ ViewModel ์์๋
๋ค์๊ณผ ๊ฐ์ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ต๋๋ค.
- ์ด๋ฏธ์ง ๋ก๋๋ฅผ ์คํจํ ๋ฐ์ดํฐ > UI์์ ๋ฐ๋ผ๋ณด๋ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ(retryCount++)
- ์ฑ๊ณตํ ๋ฐ์ดํฐ > UI์์ ๋ฐ๋ผ๋ณด๋ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ(isLoadedImage = true)
- ์์ Recomposition ์ ์ ๋ฐํ๋ ์ํ ๋ณ๊ฒฝ ๋ก์ง์ ์ง๋๊ฐ ์์ง์ผ ๋ ์ทจ์๊ฐ ๊ฐ๋ฅํ ๋ก์ง์ด์ผ ํจ
- ์ทจ์๋ cooperative ํ๊ฒ ์๋ํด์ผ ํจ
UI์ Screen ์์๋
- VM ์์ ํธ์ถํ ๋ง์ปค ๋ฐ์ดํฐ ๊ทธ๋ฆฌ๊ธฐ
- ์ด๋ฏธ์ง ํ๋ฆฌ๋ก๋
- ์์น ์ด๋์ ๋ฐ๋ฅธ ๋ง์ปค api ํธ์ถ ๋ฐ ์ด๋ฏธ์ง ๋ก๋ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ์ ์ก
- ์ด๋ ์ ์ด์ ์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ทจ์
์ ์ฝ๋๋ ๋ง์ปค๊ฐ ์์ง์ธ ํ์ VM์ ๋ง์ปค๋ค์ ํธ์ถํ๋ Request ๋ฅผ ์์ฒญํ๋ ๋ก์ง์ ๋๋ค.
โ๐ป์ถ๊ฐ๋กโ๐ป
์ ์ฝ๋๋ VM์ผ๋ก๋ถํฐ ๋ง์ปค ๋ฐ์ดํฐ๊ฐ ๋ด๋ ค์ฌ ๋ preload ํ๋ ์ฝ๋์ ๋๋ค,
์ ์ฝ๋๋ ๋ง์ปค๋ฅผ ๋ฐ์์์ GoogleMap์ Rendering ํ๋ ์ฝ๋์ ๋๋ค.
ํ์ ๋ฒ์ ์ ํธํ์ฑ์ ๊ณ ๋ คํ์ฌ filter ์กฐ๊ฑด์ isUndefinedCategory.not() ์ ์กฐ๊ฑด์ผ๋ก ๋ช ์ํฉ๋๋ค.
์์ดํ
๋ง๋ค CustomMarker๋ฅผ ๊ทธ๋ ค์ค๋๋ค. > ์ด ๋, coil ์ SubcomposeAsyncImage๋ฅผ ์ฌ์ฉ ํ์ต๋๋ค.
๋ง์ง๋ง ์์ดํ ์ ๊ทธ๋ฆฐ ํ image ๋ก๋์ ์ฑ๊ณตํ ๋ฐ์ดํฐ์ ์คํจํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅํ์ฌ vm์ ์ ์ก ํฉ๋๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ
๐ ์ด๋ฏธ์ง ๋ก๋ ์ ์คํจํ ๋ฐ์ดํฐ๋ง Recomposition ๋ก
ํด๊ฒฐํ ๋ฐฉ๋ฒ ์
๋๋ค.
์์ ๋ฐฉ๋ฒ๋ค๋ก ์ฒ๋ฆฌํ๊ธฐ๊น์ง
๋ง์ ๊ณ ๋ ค์ ๋ณตํฉ์ ์ธ ์ดํด๊ฐ ํ์ ํ์ต๋๋ค.
์์ ๋ฐฉ๋ฒ์ผ๋ก ์ฑ์ ์๋น์ค ํ
์ง์์ ์ผ๋ก ๊ฐ์ ํ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผ ํ์์ต๋๋ค.
๊ทธ๋์ ํผ์ฒ ๊ฐ๋ฐ์ด ๋๋๊ณ ์ฐจ๋ถํ ์กฐ๊ธ์ฉ
๋ถ์์ ์์ ํ์๋๋ฐ์.
์ด๋ฏธ์ง ๋ก๋๊ฐ ์คํจ๊ฐ ๋์๊ณ
๊ทธ ์ดํ์ ์ํ๊ฐ ๋ณํํ์ง ์์๊ธฐ ๋๋ฌธ์
๊ทธ๋ฌ๋ฉด ๋ก๋๋ฅผ ์คํจํ ๋ฐ์ดํฐ์ ํํด์
Recomposition์ ์ ๋ํ์ฌ ํด๊ฒฐ์ ํ๋๋ฐ
Recomposition์ ๊ด์ ์ผ๋ก ๊ณ์ ์๊ฐํด๋ณด๋
๊ด์ ์ ํด๋น ์ปดํฌ๋ํธ์์
์ข ๋ ๋ํ์ ๊ตฌ๊ธ๋งต์ผ๋ก ์๊ฐํด๋ณด๋
ํด๋น ๊ตฌ๊ธ๋งต์์ Recomposition์ด ๋ฐ์ํ์ฌ
์ปดํฌ๋ํธ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฑ ๋ถ๋ฌ์ค๊ธฐ๋ ์ ์
๋ฆฌ์ปดํฌ์ง์
์ด ๋๊ณ
๊ทธ๋ฌ๋ฉด ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๋ ๋ก์ง์ด
์ทจ์ ๋๋ค๊ณ ์๊ฐ์ด ๋ค์์ต๋๋ค.
์๋๋ฉด ์ค์ ๋ก coil ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด
ImageLoader App Package ๐ Cancelled - https://์ด๋ฏธ์ง์ฃผ์
๋ก ์ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋์ ์๊ฐ์ ์ ๋ฐ๋๋ก
Recomposition์ ๋ฑ ํ ๋ฒ๋ง ๋ณด์ฅํ๋ฉด ์ด๋จ๊น
๋ผ๋ ์๊ฐ์ ํ๊ณ
์ด๋ฅผ key๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ ํด๋ดค์ต๋๋ค.
์ ์ฝ๋์์ key๋ฅผ ์ด์ฉํจ์ผ๋ก์
๊ตฌ๊ธ๋งต contents์์ ์ฌ์ฉํ๋
CircleMarkerComponent๋ฅผ ์ฌ๋ฌ๋ฒ ์คํํ๋ ๊ฒ์ด ์๋
markerItem.id๊ฐ ํค๊ฐ ๋์ด โ๐ปํ ๋ฒ๋ง ์คํ์ ํ๊ณ โ๐ป
ํด๋น AsyncPainter๋ฅผ statefull ํ ๊ตฌ์กฐ๋ก ๊ฐ์ ธ ๊ฐ๋ฉด์
AsyncPainter๊ฐ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋
MarkerComposable ์ Recomposition์ ํ๋ฉด
์ด๋ฏธ์ง ๋ก๋๋ ์ทจ์๊ฐ ์ ๋๊ณ
์ด๋ฏธ์ง ๋ก๋ ์ํ or ๋ง์ปค ์์ดํ
์ด ๋ณํํ ๋๋ง
MarkerUI๋ฅผ ์ํ์ ๋ง์ถฐ์ ๊ทธ๋ฆด ์ ์๊ฒ ๋ฉ๋๋ค.
Compose Google Map ์์
Gesture ๋ฅผ ํ์
ํ๊ธฐ ์ํด์๋
CameraPositionState ๊ฐ์ฒด๋ฅผ ์ด์ฉํฉ๋๋ค.
๋ค๋ง ํ์
ํ ์ ์๋ ๋ฐฉ๋ฒ์ด
์ ์ฝ๋์ ๊ฐ์ด ํ์ ์ ์
๋๋ค.
์ด์ ์นด๋ฉ๋ผ๊ฐ ์ด๋ํ ๋๋ง๋ค
Gesture ๋ฅผ ํ์
ํ ์ ์๋
Effect API ๋ฅผ ์ค๊ณ ํ์ต๋๋ค.
์ ๊ฐ ํ์ํ ์ ๋ณด๋ zoom-in, zoom-out, moving ์ด ํ์ํ๊ณ
"API ์์ ์ ๊ณตํ๋ ์ํ + ์ํ๋ฅผ ๋ด๋ถ์์ ์ ์ฅํ์ฌ ๋น๊ต + ๊ฐ ๋น๊ต"
MapGestureToken ์ ์์ฑ ํ์ต๋๋ค.
๐ ์ ์ด Google-Map์์
์ ์ค์ฒ๋ฅผ ๋ถ๋ฅํ๋ ๋ถ๋ถ์
๋๋ค.
์์ ๊ฐ์ด ์ ์ค์ฒ๋ฅผ ๋ถ๋ฅํ ๋ชฉ์ ์
API ํธ์ถ ์ต์ํ ์
๋๋ค.
zoom-in ํ ๋๋ ์ด๋ฏธ ํด๋น ๋ฐ๊ฒฝ์
๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฏ๋ก
๋ค์ ๋ก๋ํ ์ด์ ๊ฐ ์์ต๋๋ค.
์์๊ฐ์ด ํธ๋ํนํจ์ผ๋ก์
๋ฐ์ดํฐ ๋ก๋์ ๋ ๋๋ง์
์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก
๋์ํ๊ฒ ๋ง๋ค์์ต๋๋ค.
ํด๋น ๊ธฐํ์์ ํ์ฌ ์์น๋ฅผ ๋ฐ์์ค๋ ๊ณณ์
์ด 3๊ตฐ๋ฐ ์
๋๋ค.
์์ ๋ก์ง์ ๋ง๋ค๊ธฐ ์ํด์
์๊ฐํด๋ด์ผ ํ ์ ๋ค์ด ์์ต๋๋ค.
์ฐ์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ณณ์ด ๋ง์ผ๋
โ
๋ก์ง์ ํ๋๋ก ํต์ผํด์ผ ํฉ๋๋ค.
๋ํ ํ์ฌ ์์น๋ฅผ ๋ฐ์์ค๋ ๋ก์ง์
UI๊ฐ ์๋ ViewModel์์ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ฐ
โ
์ด ๋, ํ
์คํธ๋ฅผ ํธํ ์์ฑํ๊ธฐ ์ํด
์์ฑ์ Inject ํด์ฃผ๋ ๊ตฌ์กฐ๋ก ๋ง๋ญ๋๋ค.
ํ์ฌ ์์น๋ฅผ ๊ฐ์ ธ์ค๋ ํด๋์ค์
๋ณ๊ฒฝ์ ๊ณ ๋ คํ์ฌ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ์ฃผ์
ํ๋ ๊ฒ์ด ์๋
โ
์ถ์ํ์ ์์กดํ๊ฒ bindingํ์ฌ ์ฃผ์
ํฉ๋๋ค.
์์ ์ฝ๋๋ ํ์ฌ ์์น๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋์
๋๋ค.
์๋ ๊ฒฝ๋๋ฅผ ์คํธ๋ฆผ ํํ์ ๋ฐ์ดํฐ๋ก ์ ๋ฌํฉ๋๋ค.(flow)
์ ์ฝ๋๋ DI ๋ชจ๋์
๋๋ค.
์ฑ ์ ์ฒด์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์๋
ํด๋น ํ๋ฉด์ ViewModel ์๋ช
์ฃผ๊ธฐ๋ก
๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๋ํ, ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ
์ถ์ํ์ ์์กดํ ์ ์๊ฒ @binds ํฉ๋๋ค.
์ ์ฝ๋๋ ์์์ ์ค๊ณํ interface ๋ฅผ
ViewModel ์์ constructor Inject ํ์ฌ
UI์์ ์ฌ์ฉํ๋
currentPositionAtOnce ๋ฅผ ์
๋ฐ์ดํธ ํฉ๋๋ค.
์ด๋ก์จ ํ์ฌ ์์น๋ฅผ ๋ฐ์์ค๋ ๋ก์ง์
์ ๋ถ ๋ดค์ต๋๋ค.
๋ค์์ผ๋ก๋ ์์ ๊ด๋ จํด์
์ ์ ๊ฐ GPS ์์น๋ฅผ ์์คํ
์ ์ผ๋ก off ํ์ฌ
๋ฐ์ํ ํธ๋ฌ๋ธ ์ํ
์ ๋ํด
์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ง๋ ์ฑ์ ์ถ์ํ๊ณ ์ผ๋ง ์ง๋์ง ์์
๋ค์๊ณผ ๊ฐ์ ์๋ฌ ๋ฉ์ธ์ง๊ฐ
Sentry ์ ์ข
์ข
๋ฐ์ ํ์ต๋๋ค.
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์๋ฌ ๋ฐ์๋์ด ์ฆ๊ฐํ์ฌ
์ด๋ ์ปดํฌ์ฆ ์ด์๊ฐ ์๋๊ฑธ๋ก ์๊ฐํ๊ณ
๋๋
ํ ๋ ์ฝ๋(b1.a)๋ฅผ
progarud mapper๋ฅผ ํตํด์
ํ์
ํด๋ณด๋ '๋๋ค ํญ' ๋ถ๋ถ์ด์์ต๋๋ค.
์ด์ ๋๋คํญ์ ๊ฐ๋ฐํ๋ฉด์ ๋ฐ์ํ๋ ์๋ฌ ์ผ์ด์ค๋ฅผ
์๊ฐํ๋ฉด์ ์ฌํ์ ํด๋ณด์๋๋
๋์ผํ ์ค๋ฅ ์ฌํ์ ์ฑ๊ณตํ์์ต๋๋ค.
๐ ์๋ฌ ๋ด์ฉ
- ์ ์ ๊ฐ ๋งต์ ์ง์ ํ์ ๋ ์ต์ด๋ก ์์น๋ฅผ ๋ฐ์์ค๊ณ > ํด๋น ์์น๋ก ์ด๋์์ผ์ผ ํจ
- ์ด ๋ ํ์ฌ ์์น๋ฅผ ๋ฐ์์ฌ ๋ GPS ์ค์ ์ด ์ ๋์ด ์์ด์ ์๋ฌ ๋ฐ์
๐ซ ํด๊ฒฐ ํ๋ก์ธ์ค
- ์์น ๊ถํ์ ์ํ๋ก ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
- GPS ๊ถํ ์ค์๊ฐ์ผ๋ก ํธ๋ํน (on, off)
- ๊ถํ์ด ์์ ๋ GPS๋ฅผ ์์คํ ์ ์ผ๋ก ์์ฒญํ์ฌ on, off ํ ์ ์๊ฒ ์ฒ๋ฆฌ
- ํด๊ฒฐ ๊ฒฐ๊ณผ
์ ์ ๊ฐ ์์คํ
์ ์ผ๋ก '์์น' ๋ฅผ
offํ ๊ฒฝ์ฐ ๊ถํ ์์ฒญ์ ์ํด
ํธ๋ํน์ด ๊ฐ๋ฅํด์ผ ํ์ต๋๋ค.
์ด๋ GPS Listener๋ฅผ ํตํด
์ค์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์๋๋ฐ
ํ์ฌ Deprecated ๋์ด
GNSS Listener๋ก ํ์ธํด์ผ ํฉ๋๋ค.
๐ก GNSS ๋
Global Navigation Satellite System ์ ์ฝ์ด์ด๋ฉฐ
๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด GPS ๋ ๋ฏธ๊ตญ ์์ฑ์ธ๋ฐ
๋ฏธ๊ตญ ์ธ์ ์ค๊ตญ, ๋ฌ์์ ์ ๋ฝ ๋ฑ ์์ฑ์ ๋์ฐ๋ฉด์
์ด๋ฅผ ํตํฉํ๋ ๋ช ์นญ์ผ๋ก GNSS ๊ฐ ์๊ฒผ์ต๋๋ค.
์ ์ฝ๋๋ GNSS Callback ์
Flow๋ก ๋ณํํ ๋ก์ง์
๋๋ค.
flow ๋ก ๋ณํ๋ ๋ก์ง์
์๋์ LaunchedEffect ์์
observing ํ๋ ๋ก์ง์ผ๋ก
์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ ์ค๋ช
ํ GNSS ๋ฐ SettingClient API๋ฅผ ํตํด
์ฌ์ฉ์๊ฐ '์์น' ๋ฅผ ์์คํ
์ ์ผ๋ก on,off ํ์ ๋
ํธ๋ํนํ์ฌ ์ํ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง
๊ณต์ ํ์ต๋๋ค.
์ปดํฌ์ฆ ๊ตฌ๊ธ๋งต์ ๊ฒํ ํ๊ณ ์ค์ ๋ก ์ฌ์ฉํ๋ฉด์
๋ถ์์ ํ๊ฑฐ๋ ๋ฏธ ๊ตฌํ๋ ๋ถ๋ถ๋ค์
์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง์ ์ต๋ํ ์ด์ ์ ๋ง์ถฐ์
๊ณต์ ํด๋ดค์ต๋๋ค.
๋๋คํญ์ ํต์ฌ ๊ธฐ๋ฅ์ด๋ผ
์์ผ๋ก๋ ๋ง์ ํ์ฅ๊ณผ ์์ ์ด
์ด๋ค์ง ๊ฒ ๊ฐ์ต๋๋ค. (๋๊ทผ๋๊ทผ ๐คฃ)
๊ทธ๋ฆฌ๊ณ ํด๋น ๊ธฐ๋ฅ์ด ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ๋์ด
๊ตฌ์กฐ์ ์ธ ์ธก๋ฉด์ผ๋ก ๊น๋ํ์ง ์์๋ฐ
๋ ์ปค์ง๊ธฐ ์ ์ ๊ตฌ์กฐ์ ์ผ๋ก
๋ฆฌํฉํ ๋ง๋ ์งํํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
(ํด์ผํ ์ผ์ด ์ฐ๋๋ฏธ๋ผ์ ์ข์ต๋๋ค ๐คฎ)
์ด์ ๋ง์ผ์ ๋ฐฐํฌ๋๊ณ ์ด์๋๊ณ ์๋
์ปดํฌ์ฆ ๊ตฌ๊ธ๋งต ์คํ ํ์ผ์ ์ฌ๋ฆฌ๋ฉด์
ํฌ์คํ
์ ๋ง์น๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค ๐๐ปโโ๏ธ