본문 바로가기

Android

(17)
[Android] Compose 도입 ( 마이그레이션 ) Kotlin DSL로 작성되었습니다. build.gradle ( app level ) android{ .... buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.4.3" } } 컴포즈 버전을 선택하실땐 공식문서를 확인하셔서 사용중인 코틀린 버전과 호환되는 버전을 선택하시고 너무 오래된 버전을 사용중이시라면 이번 기회에 올리는 것을 추천드립니다. Dependencies const val composeVersion = "1.4.3" const val composeUi = "androidx.compose.ui:ui" const val composeGraphics = "androidx.compose.ui:ui..
[Android] 구글 로그인 연동 '구글 로그인 연동' 자주 하지 않지만 프로젝트 시작하면 많이 찾게되는 키워드.. 그래서 헷갈릴때가 많아 다시 한번 정리 합니다! 구글 로그인은 크게 2가지로 구분 됩니다. 파베를 이용한 연동 vs Google Cloud Api를 연동 서버가 없는 경우 파베를 이용하면 회원 관리도 직접할 수 있는 어드민 기능을 제공하고 연동 방식도 조금 더 간단합니다. Google Cloud Api 연동은 서버가 따로 있을 경우 이용하는 방식으로 클라이언트에서 구글 idToken을 발급받아 서버로 전송하면, 서버에선 전달 받은 idToken으로 유저의 정보를 얻고 그걸 토대로 각 서비스의 AccessToken을 발급해줍니다. = AccessToken : 서비스 ( 앱 ) 이용시 필요한 유저 인증 정보 해당 포스팅은 Cl..
[Android] 특정 위치로 스크롤 하기 ScrollView하위 뷰중 특정 뷰로 스크롤 되도록 하는 기능을 구현했습니다. 먼저 제가 작업한 뷰의 구조는 아래 사진과 같습니다. 타이틀과 백버튼이 있는 Top 영역과 그 아래 컨텐츠를 담고 있는 ScrollView 로 이루어진 간단한 엑티비티 입니다. 방식은 간단하게 특정 뷰가 화면내 어떤 위치에 위치하고 있는지 좌표를 구하고 그 좌표 만큼 스크롤 합니다. view.getLocationOnScreen(outLocation: IntArray) 특정뷰 상단이 스크롤뷰 상단에 걸리도록 private fun scrollToView(view: View){ var statusBarHeight = CommonViewUtil.getStatusBarHeight(context = this) val viewLocati..
[Android] 룰렛 구현하기 최근에 [점메추] 앱에서 메뉴를 추천하기 위한 방식중 하나로 개발을 했는데 아쉽게 실 버전엔 포함되지 못했습니다. 결과 화면 개발 방식 라이브러리도 있지만 커스텀하기 용이한 점과 개발 해보고 싶었던 마음이 있어 캔버스에 직접 그리는 방식으로 했습니다. Roulette.kt 룰렛을 한 화면에서만 사용하지만 관리가 용이해 커스텀 뷰로 만들었습니다. @SuppressLint("DrawAllocation") override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) if (canvas == null) return val rectLeft = left + paddingLeft + Constant.DEFAULT_PADDING val rectRight = right - ..
점메추 개인정보 처리 방침 1. WONY (이하 "http://superwony.tistory.com/")는 이용자의 개인정보를 매우 중요하게 생각하며 각별히 주의를 기울여 처리하고 있습니다. 다음과 같은 목적외에는 사용하지 않습니다. - 카메라로 찍은 사진의 링크를 앱내 저장해서 식물의 사진이나 일기의 사진을 보여주는 용도로만 사용합니다. 2. 정보 주체의 권리, 의무 및 그 행사방법 이용자는 개인정보 주체로서 다음과 같은 권리를 행사할 수 있습니다. ① 정보주체는 ('사이트URL'이하'사이트명) 에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다. 1) 개인정보 열람요구 2) 오류 등이 있을 경우 정정 요구 3) 삭제요구 4) 처리정지 요구 3. 처리하는 개인정보의 항목 작성 ① 은(는) 다음의 개인..
[AOS] Room으로 이미지 백업 기능 구현 후기 식물일기 앱은 사용자간 상호 작용이 없기 때문에 로컬 디비만 활용하여 운영하고 있는데 백업 기능을 간간히 요청해주셨었습니다. 별도 서버를 두거나 파베를 이용하여 구현하면 간단한 기능이지만 수익이 나지 않는 앱에 투자하기란 쉽지 않았기 때문에 로컬 백업 기능을 먼저 시도해봤습니다. 식물일기 디비 현황 - Room 사용 - 이미지 사용시 앱 내부 저장소에 크롭된 이미지를 저장하고 그 경로를 디비에 String값으로 담는다 ( 식물 이미지, 일기 작성시 이미지 ) - 그 외엔 모두 텍스트 데이터 백업 기능 요구사항 - 디바이스 변경시 데이터 옮길수 있을것 - 앱을 지웠다 깔아도 데이터 옮길수 있을것 진행 순서 - 디비 구조 마이그레이션 - 디비 파일로 만들기 - 파일된 디비 읽어들이기 디비 구조 마이그레이션 ..
[AOS] Databinding 사용시 x is public, should be declared in a file named 에러 xml은 언더바 표기법 사용하여 생성합니다. ( ex: activity_main.xml ) 데이터 바인딩 라이브러리를 사용하면 xml을 Binding 클래스를 자동 생성해주는데, 생성된 이름은 카멜 표기법을 사용합니다. ( ex: ActivityMainBinding ) 어차피 똑같은 파일명이 아닌 이상 겹칠일 없다고 생각하고 작업후 빌드를 했는데 아래와 같은 에러가 발생했습니다. 'x is public, should be declared in a file named x.java' 분석 결과 비슷한 파일명의 xml이 있을때 발생했습니다. 저는 activitymain.xml과 activity_main.xml이 있었을 경우 발생해 다른 이름으로 변경해줬습니다.
[AOS] 데이터 보안 양식 제출 요 근래 '데이터 보안 양식 제출 하세요'란 메일을 구글로부터 받았습니다. ( 아래 사진 참조 ) 2월부터 앱 스토어 등록정보에 '데이터 보안 섹션'이 표시되는데 해당 내용을 4월까지 승인 받지 않으면 4월 이후에 앱 업데이트가 거부될 수 있다고 합니다. 시간적 여유는 있지만 최근 UGC 정책 위반으로 고생한걸 생각하면 빠르게 대응하는게 뒤탈이 없습니다. ( ugc 정책 위반 대응은 포스팅을 참고해주세요. ) AOS - UGC 정책 위반 해결하기 작년 말(21.11월)부터 저를 포함한 많은 개발자들이 'UGC 정책 위반'으로 인한 리젝으로 업데이트시 고통을 겪고 있습니다. 대부분의 사람들이 '기존에는 괜찮았는데 갑자기 왜 리젝이지?' 라며 의 superwony.tistory.com 데이터 보안 제출 시작..