기본 콘텐츠로 건너뛰기

10월, 2022의 게시물 표시

개발일기#7 crashlytics:18.3.0 에 오류?

원본출처: 티스토리 바로가기 https://github.com/firebase/firebase-android-sdk/issues/4223   Missing class com.google.android.datatransport.runtime.ForcedSender in Crashlytics 18.3.0 · Issue #4223 · firebase/firebase-an Android Studio version: Android Studio Dolphin | 2021.3.1 Patch 1 Firebase Component: Crashlytics Component version: 18.3.0 Describe the problem If a crash occurs within the Android app (e.g. by th... github.com 위에 나와 있는 글을 읽어 보면  firebase에서 오류 감지를 위해서 사용하고 있는 API에 오류가 있는 것처럼 보입니다. crashlytics는 firebase에서 제공하는 API 중에서 앱의 오류를 감지합니다.  playstore 에도 릴리즈 된 앱의 경우는 그 내용이 감지되어 알려 주기는 하지만, firebase의 경우는 조금 더 상세하게 알게 되는 것 같아서 사용하는 중입니다. 위 링크 글에서 보는 것처럼 최종 버전인 것 같은 18.3.0은 사용을 보류하고 18.2.3으로 당분간은 유지를 해지 않나 하는 생각을 하면서 이 글을  정리해 봅니다. 관련이미지 --- 아래 내용은 링크된 글의 번역한 내용입니다. --- 문제 설명 Android 앱 내에서 충돌이 발생하는 경우(예: 앱 내에서 버튼을 누를 때 NullPointerException 발생) 앱을 다시 시작할 때 앱이 로드되지 않고 com.google.android.datatransport.runtime 누락으로 인해 충돌합니다.  이 버전에서 새로 추가된 ForcedSender 클래스입니다. 이것은 c

개발일기 #8 : 나의 앱에도 지문인증을 넣어보자.

원본출처: 티스토리 바로가기 바이오인증 앱을 구현하는 동안 이런 것도 생각을 해 볼 수 있었습니다.  지문인증은 어떻게 구현하는 건가? 그래서 구글에게 물어보았습니다. 어떻게 하는 거냐고...  늘 항상 답을 보여 주기는 하나 긴가 민가 하는 생각이 들 무렵 게시글 하나를 찾았고 그것을 따라 해 보기로 했습니다.    gradle 설정 // bio implementation "androidx.biometric:biometric-ktx:1.2.0-alpha05"  module 수준의 gradle 파일에 추가된 것은 위 한 줄입니다.    Hardware 검증 이번에는 지문 인증을 사용할 수 있는 것인지 확인하는 처리를 해 봅니다.   아래 코드의 함수를 호출하게 되면,  사용이 가능한 상태 (BIOMETRIC_SUCCESS), 지문인식 센서가 없는 경우(BIOMETRIC_ERROR_NO_HARDWARE), 지문인식 센서가 이미 동작하고 있어서 준비가 되지 않은 경우(BIOMETRIC_ERROR_HW_UNAVAILABLE) 지문이 등록되지 않은 경우(BIOMETRIC_ERROR_NONE_ENROLLED)   이런 경우의 오류(또는 상태)를 만나게 됩니다.  지문 등록이 되지 않은 경우는 등록을 하도록 안내하는 페이지로 이동하도록 구성하고, 다른 경우들은 그에 맞게 알림을 주거나 인증 후 동작을 구현하게 됩니다.  여기서는 사용 가능한 상태만 저장하는 것으로 마무리를 합니다. fun checkDeviceHasBiometric() { val biometricManager = BiometricManager.from(this) when (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG or BiometricManager.Authenticators.DEVICE_CREDENTI

개발일기 #? 쉬어가는 페이지... Figma 와 Android Studio 의 UI 연동 이란...

원본출처: 티스토리 바로가기 https://relay.material.io/getting-started Relay Instant Handoff for Android UI. Design UI components in Figma and use them directly in Jetpack Compose projects. relay.material.io Relay 릴레이, 계전기, 교체 구글 번역기가 말해주는 번역된 단어입니다. 알게 된 것은 HOLIX라는 앱에서 jetpack compose 채팅방에 들어가 보다가 workspace 님이 올리신 글을 보고 알게 되었습니다. 찾아서 가 따라 해 보기를 해 보았습니다. 그 동안 고민했던 것들 중에 화면 구성을 어떻게 하면 그나마 쉽게 다이내믹하게 할 수 있을 까에 대한 고민을 해소할 수 있을 것 같은 생각이 듭니다. 그동안의 화면 구성은 그냥 단순하게 Object을 위치하는 것으로 대신하는 중이었습니다. 뭐 아직은 화려하거나 이쁘거나 한 화면 구성을 못해보는 것이 아쉬울 따름 이었지만, Figma라는 것이 온라인으로 화면 디자인을 할 수 있다는 것 정도만 알고 있었지 이것을 UI와 연동할 수 있다는 것을 모르고 있었으니까요. 샘플앱 이런 디자인은 간단한 것이라 그냥 그려도 되겠지만, 연동을 해서 만들어 보면 좋을 것 같다는 생각이 들었습니다. 차근 차근 배워 봐야 할 것 같아요. 이번 이야기는 10/24 에 있었던 Android Dev Summit 2022 에서 발표된 이야기 랍니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

개발일기 #6 메뉴판 구성을 위해서 TabLayout 만들어 보기

원본출처: 티스토리 바로가기 TabRow   앱을 구성하는 부분 중에서 메뉴판 같은 것을 구현하게 되는 경우가 발생합니다. 다른 방법도 있기는 하겠지만, 카테고리별로 TabRow을 구현해서 만들면 같은 종류의 상품을 배열하거나 할 때 도움이 될 것 같습니다.  그래서 오늘은 그걸 만들어 보려고 합니다.    gradle (Module) 파일에 아래 2줄을 추가해 주었습니다. // tab layout 구현 implementation "com.google.accompanist:accompanist-pager:0.20.1" implementation "com.google.accompanist:accompanist-pager-indicators:0.20.1" 이제 코드 구현을 해 보겠습니다.    val pagerState = rememberPagerState(0) 먼저 사용할 탭의 상태를 기억할 변수를 선언 합니다. 괄호 안에 숫자는 시작 시 어디에 위치하게 할 건가를 정하게 됩니다. 인덱스는 0부터 시작됩니다.   구성된 화면은 다음 그림과 같이 될 예정입니다. 구성된 화면 그래서 화면을 구성할 때 상단에 있는 Tab을 나타내는 부분과 그 아래 내용을 보여줄 부분으로 나누어서 설정을 하게 됩니다. (*맨 아래는 BottomNavigation으로 이번 글과는 무관한 구현이라 설명을 생략합니다.)   Column( modifier = Modifier.background(grayWhite) ) { Tabs(pagerState = pagerState) TabsContent(pagerState = pagerState) } 위에 Tabs는 화면 상단에 표시할 탭을 나타내며 아래 TabsContent는 아래 화면을 구성할 내용을 채워 넣을 공간입니다.   @ExperimentalPagerApi @Composable fun Tabs(pagerState

네이버 지식인 ... 지존이되다

원본출처: 티스토리 바로가기 자주 하는 것이 아니라서 오랜 시간이 걸리네요. ㅋ~ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

개발일기 #5-1 연동과 관련된 HTTP 통신은 어떻게 ? (PAYAPP API 연동)

원본출처: 티스토리 바로가기 지난 포스팅에 연속해서 https://billcorea.tistory.com/267 개발일기 #5 PAYAPP 연동을 위한 준비 이번 개발을 시작하면서 준비해야 할 것 중에 하나가 결제처리를 지원하는 PG(Payment GateWay) 연동 이었습니다. 이전 글에서도 적었던 것처럼 일반적인 PG 연동 API 들은 하나 같이 쇼핑몰 앱을 기반( billcorea.tistory.com 구동되는 이야기는 지난 포스팅에 적었습니다. 참고하시면 될 것 같고요. 오늘은 그것들을 구현하기 위해 했던 코드 구현에 대해서 이야기해 보겠습니다. HTTP 통신은 일반적으로 API 통신은 HTTP 을 이용해서 호출하라고 합니다. 이번에 사용했던 PAYAPP의 경우에도 동일합니다. 이런 경우 안드로이드에서는 통신과 관련된 몇 가지 해야 할 부분들이 있습니다. 먼저 manifest 에서의 권한 설정 부분이 필요합니다. <uses-permission android:name="android.permission.INTERNET" /> 인터넷 사용에 대한 권한을 등록합니다. 다음은 통신의 하는 경우 네트워크와 관련해서는 <application ... android:usesCleartextTraffic="true" ... > <activity android:name=".MainActivity" android:exported="true" ... 안드로이드 가이드 발췌 개발자 가이드에서 알려주고 있는 것과 같이 네트워크 트래픽에 대한 설정을 true로 해 주어야 합니다. 그다음 요구되는 사항은 http connect을 맺거나 하는

바탕 화면 이야기...

원본출처: 티스토리 바로가기 바탕화면 이미지 이 꽃은 국화꽃이 형상화된 것 같습니다. 어느 날 퇴근 후에 노트북을 열었더니, 보였습니다. 이미지만 으로도 슬픔과 또 다른 어떤 느낌이 와닿았습니다. 어느 토요일 카카오의 데이터 센터 화재로 인해 몇일이 어떻게 지났는지 모르게 지났습니다 현장에서 대응하시는 분들의 속이 타 들어 가는 것을 다 알지는 못하지만, 나름 같은 IT업으로 먹고살고 있는 지라, 혹시 우리 센터에서도 저런 일이 벌어지면 대응이 잘 될까 하는 생각이 드는 일이기에, 연일 뉴스에 나오는 것처럼 말을 할 수는 없었습니다. 아무튼 오늘도 수고 하였으니, 편안한 밤이 되시길 바라며... 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

개발일기 #5 PAYAPP 연동을 위한 준비

원본출처: 티스토리 바로가기 이번 개발을 시작하면서 준비해야 할 것 중에 하나가 결제처리를 지원하는 PG( Payment GateWay) 연동 이었습니다. 이전 글에서도 적었던 것처럼 일반적인 PG 연동 API 들은 하나 같이 쇼핑몰 앱을 기반(?)으로 구동하는 것을 전제로 구현됩니다. 하지만, 이번에 구현해 보고 싶었던 앱은 결제를 중개해 주는 기능을 구현해 보고자 했습니다. 그래서 찾았다 찾은 것은 PAYAPP 이라는 앱입니다. https://payapp.kr/homepage/about/about.html 페이앱 공식 홈페이지 페이앱 본사, 블로그마켓 카드결제, 수기결제, 블로그결제, SMS결제, 블로그페이, 본사 고객센터 1800-3772 www.payapp.kr * 아직은 이 회사와 아무런 관계가 없음을 미리 말해 둡니다. 단지, 구현해 보고자 했던 방향과 맞는 것 같아서 찾은 것일 뿐입니다 결제를 위한 QRCode 구현해 가는 방향은 이렇게 QRCode 을 보여 주면 고객은 휴대폰의 QRcode 스캐너, 카메라 앱을 이용해서 해당 링크로 넘어갑니다. 그러면 고객의 휴대폰에 다음과 같이 결제을 유도하는 창이 나타납니다. 결제요청페이지 이 페이지를 이용해서 결제는 고객의 휴대폰에서 진행됩니다. 결제가 완료되면 주문이 전달되는 그런 형태의 앱을 구현해 보고 있는 중입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

개발일기 #4 dialog box 쉽게 만들어 보기

원본출처: 티스토리 바로가기 https://github.com/afollestad/material-dialogs   GitHub - afollestad/material-dialogs: 😍 A beautiful, fluid, and extensible dialogs API for Kotlin & Android. 😍 A beautiful, fluid, and extensible dialogs API for Kotlin & Android. - GitHub - afollestad/material-dialogs: 😍 A beautiful, fluid, and extensible dialogs API for Kotlin & Android. github.com 오늘은 앱을 구현하는 동안 간혹 사용하여야 하는 dialog box 구현에 대한 이야기를 해 보겠습니다.  위 링크에서 가져온 자료를 참고하여 구현하는 이야기를 해 볼 예정입니다.    일반적인 dialog 구현해 보기 gradle 설정 먼저 gradle 설정을 해 보겠습니다.  먼저 봐야할 부분은 위 github의 게시글에서 보는 것처럼 dialog box의 여러 가지 형태 중에 어떤 것을 구현할 것인가를 정해야 할 것 같습니다.    일반적인 diaglog box 예시 이런 모양의 일반적인 dialog box의 구현 부터 보겠습니다.    // 다이얼로그 implementation 'com.afollestad.material-dialogs:core:3.3.0' implementation 'com.afollestad.material-dialogs:lifecycle:3.3.0' gradle 파일의 설정은 이 2줄만 가져 오면 됩니다.   Activity 구현   다음은 버튼을 표시하는 MainActivity 의 함수 하나를 보겠습니다.  override fun onBackPres