pinkred's mobile program

pinkred mobile programer

Archive for 12월 2016

[Android] Facebook – Keyframes

leave a comment »

페이스북의 ‘좋아요’ 를 누르고 있으면  이모티콘들이 열심히 움직이고 있다. 이를 구현하자고 하는 이슈가 있어서 찾아본 결과.

https://code.facebook.com/posts/354469174916519/keyframes-delivering-scalable-high-quality-animations-to-mobile-clients/

멋지게 페이스북에서 오픈소스로 제공하고 있다. 감탄..

  1. github에서 제공하는 After Effects Plugin 을 설치한다.
  2. After Effects를 이용하여 애니메이션을 만든다.(제약 사항있음)
  3. Plugin을 사용하여 데이터를 JSON 포맷으로 변형하여 받는다.
  4. 데이터를 Keyframes 라이브러리를 이용하여 호출하면 애니메이션이 됩니다.

Android, iOS, JS를 지원합니다. 처음 접했을때는 버전이 낮았는데 지금은 1.0 버전으로 정식 릴리즈 되었습니다. 물론 내부적으로는 현재 지원되지 않는 기능들을 몇가지 필요로 하여 추가적으로 코드를 수정하여 지원되도록 했습니다. 추가 하기도 어렵지 않고 소스코드도 복잡하지 않아서 지원하지 않는 기능들을 쉽게 추가할 수 있습니다.

처음에는 많은 고민이 있었는데 이렇게 쉽게 라이브러리로 제공되니 Facebook 너무 고맙네요.

Written by pinkredmobile

2016/12/29 at 11:44 am

[Android] Volley -> Retrofit2

leave a comment »

계속계속 시도해 보면서 문제점과 이슈들이 계속 발생해서 미루고 있었는데 드디어 바꿀수 있는 기회가 와서 바꾸어 보았다.

기존 구조는 OkHttp3 + Volley + JSON 구조로 되어 있어 특별히 문제가 되지는 않았지만 이제는 Volley를 놔주고 싶은 마음은 굴뚝 같았다. 특히나 네트워크 아파치 라이브러리를 더 이상 지원하지는 안드로이드 이슈와 더이상 업데이트가 되지 않는 Volley를 계속 가져갈수는 없었다. 하지만 구관이 명관인것은 확실했다.

현재 구조상의 가장 큰 이슈는 Retrofit2에서는 공식적으로 JSON 파서를 지원하지 않았다. GSON등등 여러가지 파서는 지원했지만 정작 기본적인 JSON 파서를 지원하지 않아서 다른 파서를 사용하여 POJO방식으로 변경시 너무나 많은 코드 수정으로 감당할 수가 없었습니다.

여러가지 방법으로 접근해 보려는 시도는 해보았으나..

Volley + GSON으로 시작하여 진행하는 방식 기존의 JSON 을 GSON Json으로 대체하여 비교적 비슷하게 가려고 했으나 JSON에 데이터가  null 인 경우 예외처리가 추가 되어야 하는 이슈가 있었는데 기존 JSON에서는 그냥 null값을 받았는데 이러한 부분에서 에러가 발생하여 일일이 null체크를 해주어야 하다보니 일이 너무 많아져서 포기했다.

그러다가 Retrofit2에서 JSON을 지원하는 커스텀 Converter를 찾게 되어서 다시금 희망이 생기고 Volley를 걷어내고 Retrofit2로 교채를 진행하기로 하였다.

대부분 같은 생각이 있는지 비슷한 과정을 진행한 회사의 블로그를 찾아서 도움을 받았다.

기존의 Volley 의 Queue에서 Cancel을 하는 부분이 가장 큰 이슈였는데 Retrofit2에서는 Cancel을 하기 위해서는 Call을 따로 저장해서 구현해야하는 불편한 이슈가 있었다.

처음에는 Annotation Tag를 넣어서 저장하려고 하였으나 현재 앱에서 사용되는 cancel방식이 서로  다르게 동작되어서 Tag를 직접 Class에서 직접 넣는 방식으로 수정하였다.

 

ExecutorCallbackCall executorCallbackCall = (ExecutorCallbackCall) mMobileService.requestServer(URL);
executorCallbackCall.setTag(tag);
executorCallbackCall.enqueue(callback);

 

어떻게든 내부적으로 쉽게 하려고 했으나 방법 못찾음. ㅜㅜ 기존의 Volley와 비슷한 방식으로 처리되어서 쉽기는 하나 아쉽기도 합니다. 추후 된되다면  Annotation에 Path를 변수로 넣듯이 Tag도 그렇게 할수 있으면 추후에 관리가 조금더 쉽게 될수 있지 않으려나 생각됩니다.

 

Written by pinkredmobile

2016/12/19 at 10:46 am