본문 바로가기

전체보기

(211)
[AOS] Paging3 적용하기 페이징은 뉴스기사나 이커머스와 같이 많은 양의 데이터를 유저에게 원활하게 보여주기 위해 사용합니다. 장점 1. 중복 로딩 방지 2. 현재 데이터 페이지 넘버를 변수로 관리 3. 리스트 스크롤 특정 시점에 맞춰 데이터 로드 4. 로딩이나 에러등의 상태 관리의 용이하고 새로 고침이나 재시도 기능을 제공 5. 새로 고침된 데이터 변경시 'notifyItemChanged(position: Int)' 메소드등 호출 하지 않아도 자연 스럽게 변경 Paging3로 마이그레이션 하면서 겪은 내용 및 작업들을 공유하겠습니다. ※저는 MVVM 패턴과 Clean Architecture 구조에서 작업 했습니다. 구조 PaingSource나 RemoteMediator에서 PagingConfig 정보를 토대로 Pager를 통해 ..
[AOS] Splash Screen Api 적용기 ( api 12 ), 하위 버전 호환까지 수정 이력 - 22.12.20 : 최초 작성 - 22.12.27 : 지정한 Splash Screen 끝나고 아이콘 잔상이 남아 보이는 문제 평소 퍼블릭한 작업이 끝나고 남는 시간에는 리팩토링을 하는데, 최근 어느정도 코드가 자리 잡아서 성능 개선도 병행해서 진행하고자 합니다. 그래서 Screen Api가 추가 됐단 얘기를 들은지 한참 지났지만 이제라도 대응해보려고 합니다! Splash Screen Api 많은 앱들이 구동에 필요한 정보들을 호출하거나 아이덴티티를 보여주는 용도로 스플래시 화면을 구현해 사용하고 있었는데 구글에서 Splash Api를 만들어서 12버전 이상의 디바이스부턴 강제하도록 했습니다. 대응하지 않은 앱들은 아이콘 모양의 스플래시와 앱에서 추가한 화면인 스플래시도 보여주기 때문에 유저..
[AOS] TextView 글자별로 줄바꿈 하기 Textview에 표현하는 글이 디바이스 크기나 앱 환경에 따라 한줄이거나, 두줄로 나뉠수 있는 경우 어떻게 보여질지 많은 고민을 하게 됩니다. 그 글의 특성에 맞게 적당하게 알아서 보여지면 좋겠지만 그렇지 않습니다. 적절하게 대응해야합니다. Textview는 줄바꿈을 할때 기본적으로 단어 단위로 끊습니다. var message = "긴 글을 보여주게 될 경우 단어 별로 끊기기때문에매우 어색해 보일수 있는데" binding.tvContent.text = message 극단적인 예로 위 코드를 실행하면 아래 사진처럼 노출되는데 '끊기기때문에매우'를 한 단어로 구분하기 때문에 첫번째 줄에 많은 여백이 발생해 조금 어색해 보일 수 있습니다. 하지만 문장의 공백을 '\u00A0' 문자로 치환하여 출력하면 아래 ..
[AOS] Webview에 html 코드 로드 하기 ( with. loadData 사용시 안될때 ) 기존에 html 코드를 webview로드할땐 'loadData'만 사용했었습니다. webview.loadData(htmString, "text/html", null) 하지만 일부 페이지에서 작동하지 않아 검색해 보니 html의 일부만 로드해야할 경우엔 'loadDataWithBaseURL'을 사용하라고 하더라구요 예로 로만 되어 있는 코드가 있습니다. 그래서 아래 코드로 구현하니 문제 없이 노출되는걸 확인할 수 있었습니다. webview.loadDataWithBaseURL(null, htmlString, "text/html", "UTF-8",null) 보다 자세한 내용은 공식 문서를 확인해주세요. 공식문서 : loadData ,loadDataWithBaseURL
애드핏 광고 Fill-Rate 이슈 일지 2편 일전에 애드핏 광고 Fill-Rate 저하로 인한 광고 수익 박살로 초조한 날들을 보냈습니다. 제가 처했던 상황과 카카오 애드핏의 대처 등을 저와 같은 상황을 겪으신분들에게 도움이 되고자 포스팅 했습니다. 애드핏 광고 Fill-Rate 이슈 일지 저는 개인앱에 애드핏, 애드몹등의 광고를 붙여서 광고 수익을 창출하고 있습니다. 그중에 애드핏을 메인으로 사용하고 있었는데 어느 순간 Fill-Rate가 떨어지기 시작하더니 10퍼센트를 웃돌던게 superwony.tistory.com 결과 먼저 공유해드리자면 동일한 문제가 발생하여 다른 광고사들 연동을 준비하고 있습니다. 이전에도 자체 미디에이션?처럼 애드핏이 실패할 경우 애드몹을 호출하는등의 3개 광고사를 연동해서 운영했습니다. 지금 진행중인 방향인 애드몹 미..
애드핏 광고 Fill-Rate 이슈 일지 저는 개인앱에 애드핏, 애드몹등의 광고를 붙여서 광고 수익을 창출하고 있습니다. 그중에 애드핏을 메인으로 사용하고 있었는데 어느 순간 Fill-Rate가 떨어지기 시작하더니 10퍼센트를 웃돌던게 0퍼센트까지 떨어진적이 있습니다. 애드핏이 광고를 노출 못해도 자체 미디에이션 기능으로 인해 다른 광고를 노출하고 있었지만 CPC, CPM등이 달랐기 때문에 수익에는 큰 문제가 있었습니다. 그래서 부랴부랴 카카오에 문의 했습니다. 아니..10프로 정도 떨어진게 아니고 80프로 가까이 떨어졌는데.. 물론 메뉴얼대로 하셨겠지만 조급한 저와 달라 마음이 많이 조급했습니다.. ( 내돈 ㅠㅠ 내도오온!! ) 구글 애널리틱스를 연동해서 광고 로드 실패시 원인을 추적하고 있어서 '302( 광고 부족 ) 에러코드가 발생한다' ..
[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이 있었을 경우 발생해 다른 이름으로 변경해줬습니다.