본문 바로가기

전체 글200

[Android] xml 다이얼로그 내부 스크롤뷰 고찰 항상 스크롤 뷰는 헷갈린다.다이얼로그 내에 있는 스크롤 뷰에 대해 알아보겠다. sv_cont 부분이 스크롤이 되는 부분이고 안에 있는 내용들은 주어지는 데이터 값에 따라 view.visible, gone 처리가 된다.문제는 스크롤 뷰가 잘 작동하려면 높이가 0dp 되어야한다는 점이고, 스크롤이 되게 하고자 다음과 같이 스크롤 뷰를 정의했다. android:paddingBottom="26dp" android:fillViewport="true" app:layout_constraintTop_toBottomOf="@+id/btn_close" app:layout_constraintBottom_toBottomOf="parent" app:layout_c.. 2025. 4. 1.
[Android] jetpack compose : State Hoisting(상태 호이스팅) ✅ State Hoisting(상태 호이스팅)이란?컴포저블 함수 내부에서 상태를 직접 관리하는 대신, 상위 컴포저블로 상태를 끌어올려(State Lift) 관리하는 패턴을 의미합니다.📌 왜 State Hoisting을 사용할까?재사용성 증가: 상태를 특정 컴포넌트에 묶지 않고, 상위에서 관리하면 여러 하위 컴포넌트에서 공유 가능단방향 데이터 흐름 유지: 데이터 흐름이 예측 가능하고 유지보수 쉬워짐컴포저블의 책임 분리: UI 컴포저블은 UI만 담당하고, 상태 관리는 상위에서 담당🚀 예제: State Hoisting 적용 전 vs 후❌ 상태를 내부에서 관리하는 잘못된 예시@Composablefun Counter() { var count by remember { mutableStateOf(0) } /.. 2025. 3. 7.
[Android] 정기 결제 A to Z 정기 결제란 즉 구독 서비스를 결제하는 것이다.출시한 지 어연. 벌써 6개월이 지나간다. 아직 다운로드 수가 많지는 않지만, 점차 늘어나는 것을 보면 신기하다. 1. Google Play Console에 정기 상품 등록을 해야한다. 2. 로컬 빌드는 테스트 결제만 할 수 있다. (실결제가 안됨)실결제 테스트를 하기 위해서는 공개 테스트 버전으로 앱을 올린 후, 다운을 받아야 한다. 공개 테스트 버전으로 앱을 올린다는 것은 release 파일을 올리는 것임으로!!!server.url을 설정해줬던 것을 테스트 환경 Url로 바꿔주도록 하자. 3. 실결제 테스트는 공개 테스트 앱 버전으로 다운받아서 진행한다.로컬 빌드 과정에서는 테스트 결제로만 bottom_sheet가 뜬다.결제를 할 경우 서버에서 구글로부터.. 2025. 2. 12.
[Android] 안드로이드 정기 결제 구독 토큰 변화 실제 토큰 값 로그 찍어보면서 확인한 내용을 토대로 글 작성하는 글. 정기 구독 서비스를 앱 내에서 신청해본 적이 별로 않아서 헷갈렸다.그럼에도 오류가 난다면? 대표적인 구독 상용 서비스인 버블을 결제해보도록 하겠다. 구매 토큰 변화가 중요한 이유는 토큰 값을 기준으로 사용자의 결제 상태를 알 수 있기 때문이다.구독 신청, 구독 취소, 재갱신 등 구독 정보가 어떻게 바뀌었는 지 구글로부터 알 수 있는 key이다. 현재 playStore에 로그인된 계정의 정기 결제 구매 토큰을 가져오는 것이기 때문에, 결제 당시 계정이 아니라면 오류가 날 것이다.구매 당시 계정으로 로그인이 되어있어야 한다!왠만해서는 구매 당시 계정으로 되어있겠지만, 지금 테스트를 여러 계정으로 돌려서 하다보니 왜 오류가 나는 지 처음에 .. 2025. 2. 9.
[Kotlin] 문법 정리 1탄 (Array, List) ✅ 1. Array vs IntArray 차이📌 ArrayArray는 객체 배열이라 각 요소가 참조형(Reference Type)null을 저장 가능생성할 때 arrayOf() 또는 Array(size) { initializer } 사용 val arr1: Array = arrayOf(1, 2, 3) // Arrayval arr2 = Array(5) { it * 2 } // [0, 2, 4, 6, 8]val arr3: Array = arrayOf(1, 2, null, 4) // null 가능 📌 IntArrayIntArray는 기본형(int) 배열이라 메모리 효율이 좋음null을 저장할 수 없음intArrayOf() 또는 IntArray(size) { initializer } 사용val intArr1:.. 2025. 2. 7.
[Android] SMS Retriever 못 받아오는 오류 운영에서 해시 키 인식이 안되었던 이유안드로이드 버전 12 이하 까지는 작동이 됨버전 13 이상부터는 RECEIVER_NOT_EXPORTED 필터를 걸게 되어 메세지를 내용을 받아오지 못했음RECEIVER_EXPORTED 로 변경외부에서 브로드 캐스트 리시버 실행 필터 → 시스템 이벤트(SMS 수신)을 할 수 있음 Dev에서 해시 키 인식이 안되었던 이유메세지 해시 값이 로컬 키파일에 의한 해시 값으로 변경되어 있었음keystore에 의한 해시 값으로 변경 (기존 문서 dev 해시 값과 동일) 2024. 12. 19.