본문 바로가기

Android/기타

[Android] Retrofit2 재시도 로직 넣기 안드로이드에서 API 콜 한 번 후 실패했을 때 자동으로 재시도하는 로직을 구현해야 할 때가 있다. 다음은 Retrofit2에서 재시도 로직을 넣는 커스텀 콜백을 구현하는 소스이다. import retrofit2.Call; import retrofit2.Callback; public abstract class AutoRetryCallback implements Callback { private final int mRetryLimitCount; private int mRetryCount = 0; public AutoRetryCallback() { this.mRetryLimitCount = 3; } public AutoRetryCallback(int retryLimitCount) { this.mRetryLi..
[Android] 인앱 결제 구현 Flow 정리 Android Billing SDK 라이브러리(2.2.0) 기준 내용입니다. 회사에서 기존에 쓰고 있던 AIDL 라이브러리를 교체할 겸 그리고 잘못 구현된 결제 로직을 다시 바로 잡기 위해 작업한 내용을 정리하고자 한다. 1. BillingClient 생성 및 연결 시도 - Application Context가 필요하기 때문에 Application 단에서 한 번 생성해 줌 - Client가 생성되면 Connect를 시킴 2. 상품 목록 조회 - 결제를 하려면 SkuDetails 객체가 필요하기 때문에 상품 목록 조회 과정은 꼭 필요함(앱 서버와는 관계없이 무조건) - 이 과정에서 결제할 상품에 대한 정보를 얻음 3. 상품 결제 요청 - 2번 과정에서 얻은 SkuDetail 객체로 결제 요청을 함 4. 결..
[Android] Retrofit2 중복 콜 문제 기존의 Volley를 Retrofit2로 교체하고 나서 간혹 API들이 두 번 혹은 세 번까지도 중복 콜이 발생한 경우가 서버 쪽에서 확인되었다. 원인은 바로 OkHttpClient의 retryOnConnectionFailure에 있었다. 이 옵션은 기본값이 true로 되어있는데 이 옵션이 활성화되어 있다면 OkHttpClient가 네트워크 상황이 불안정할 때 Retry를 시도하게 된다. 근데 문제는 Retrofit2에서 API 호출을 한 번만 했음에도 불구하고 그 안에 세팅해준 OkHttpClient 때문에 클라이언트 개발자도 모르게 자동으로 여러 번 API를 동시에 생성할 수 있다는 것이었다.(본인도 서버 개발자가 알려줘서 알게 됨) OkHttpClient의 버그는 아니고 OkHttpClient의 기..
[Android] Firebase Crashlytics 연동하기 기존에 에러 로깅 툴은 Firebase에서 Fabric에서 쓰던 라이브러리로 써봤는데 이번엔 새로운 Firebase Crashlytics를 적용해보기로 했다. fabric에서 쓰던 라이브러리보다 많이 바뀔 수도 있다고 경고를 하긴 하는데 일단 Firebase에서 본격적으로 시작한 거니까 한 번 써 보는 것도 좋을 것 같다는 생각이 들어 적용하게 되었다. (library 이름이 com.crashlytics.sdk.android:crashlytics에서 com.google.firebase:firebase-crashlytics로 변경됨...) 연동방법은 이 링크를 참고하면 된다.(https://firebase.google.com/docs/crashlytics/get-started-new-sdk?hl=en&pl..
[Android] 인앱 결제가 안 될 때 체크해야 할 사항 기존 사내에 있던 프로젝트를 개발 버전과 운영 버전으로 따로 분리시키면서 개발 쪽 플레이스토어 프로젝트를 하나 추가하는 작업을 하게 되었다. 그 과정에서 있었던 이슈 및 처리방안에 대해 간단히 정리하고자 한다. 1. 당시 상황 - 개발 프로젝트는 알파 트랙에만 등록 - 개발용 앱은 DeployGate로 배포 1. 개발 프로젝트에서 결제가 안 되는 이슈 - 테스트 계정(구글 플레이)이 알파 내부 테스트에 등록되어 있는지 확인 - 테스트 계정으로 해당 알파 프로그램에 참여했는지 확인 - 테스트 계정이 결제 테스트용으로 등록되어 있는지 확인 2. 운영 프로젝트에서 결제가 안 되는 이슈 - 실제 결제는 실제 배포 버전보다 낮거나 같은 버전에서만 동작하므로 실제 결제 테스트는 무조건 테스트 계정으로 해서 확인해야..
[Android] Retrofit2 Gson 사용 시 주의사항 회사 신규 프로젝트에 Retrofit2를 사용하고 있던 중에 200 성공 응답을 받고 실패 로직을 타는 경우가 있었다. 분명 콜은 한 번만 들어갔고 다른 이슈 사항이 없었음에도 다시 Retry를 하는 증상이었는데 원인을 분석해보니 EOF Exception과 함께 실패로 처리가 되었던 것이 문제였다. Gson컨버터를 쓰려면 서버 쪽에서 body에 "{}"을 넣어줘서 처리를 하면 해결이 된다. 끝.
[Android] 상수 관리하기 기존 상수 관리에는 2가지 방법이 있다. 1. 클래스 하나를 생성한 후 상수를 넣는 방법 장점 시스템 메모리를 적게 차지 단점 코드상으로 안전 장치가 없음 2. Enum으로 관리하는 방법 단점 그냥 상수보다 시스템 메모리를 약 13배 차지(int의 경우) 런타임 메모리 오버헤드 증가 장점 컴파일, 런타임 단계에서 체크 가능 안드로이드에서는 이러한 두 가지 방법의 장점을 둘 다 이용하기 위해 TypeDef라는 Annotation을 제공하고 있으며 또한 Proguard에서도 Enum 타입에 대한 최적화를 도와준다고 한다. 다만 proguard를 이용하는 방법은 완벽한 최적화를 보장하지 않기 때문에 최대한 TypeDef를 이용하는 것이 좋을 것 같다. TypeDef를 이용하는 방법은 다음과 같다. String..
[Android] 앱 디자인 참고 1. uplab : https://www.uplabs.com/ UI Kits, Icons, Templates, Themes and More - UpLabs www.uplabs.com 2. behance : https://www.behance.net/ 최고의 Behance 오늘의 큐레이터 추천 프로젝트 www.behance.net 3. dribbble : https://dribbble.com/ Dribbble - Discover the World’s Top Designers & Creative Professionals Discover the world’s top designers & creatives Dribbble is the leading destination to find & showcase crea..