Programming(199)
-
[Flutter] 때때로 생성자에서 비동기 요청을 하게되면, 비동기 요청이 실행되기 전에 dispose()가 호출될 수도 있다.
문제상황 ListView에 표시되는 ListViewItem은 필요한 데이터를 요청하기 위해 2~3개의 API를 순차적으로 조회해야했다. 문제는 사용자가 리스트를 스크롤할 경우, 요청하는 API의 수가 기하급수적으로 늘어난다는 것. 이러한 문제를 막기 위해서 스케쥴러를 구현하고, VisibilityDetector를 사용해 ListViewItem이 더 이상 화면에서 사라지면 API 요청을 취소하도록 작성했다. ListViewItem이 dispose를 호출할 때 역시 API 요청을 취소하도록 작성했다. 실제로 스크롤을 내리다보면 ListViewItem은 생성자를 호출하는 시점에 API 요청을 스케쥴링을 하고, ListViewItem이 더 이상 렌더링되지 않는 시점에는 스케쥴링한 API 요청을 취소하고 ..
2025.03.18 -
[Python] AIOAPNS를 사용한 APNs 푸시 메시지 전송
왜 FCM을 사용하지 않고 APNs를 사용하게 됐는가? AIOAPNS 패키지를 사용해서 APNs로 푸시 메시지를 발송 기능을 구현해야 할 일이 생겼다. 일반적인 경우 푸시 메시지를 발송할 일이 있다면 FCM을 사용해서 iOS/안드로이드 양쪽으로 푸시 메시지를 발송하게 되는데, 이번에는 FCM 토큰 유효기간으로 인한 의구심이 들었다. 파이어베이스 문서에 명시되어있는 비활성 토큰은 다음과 같다. 270일간 활동이 없으면 만료된 토큰으로 간주한다는 얘기인데, 이 '활동'이 푸시 메시지를 수신한 것을 의미하는지, 아니면 푸시 메시지를 수신한 이후 사용자가 아무런 반응을 보이지 않은 것인지 분명하지 않다. 비활성 등록 토큰은 FCM에 1개월 넘게 연결되지 않은 비활성 기기와 연결된 토큰입니다. 시간이 지날수록 ..
2025.02.24 -
[Python] PyFCM을 사용한 Push Notification 전송시 예외 처리를 사용한 FCM 토큰 관리
https://github.com/olucurious/PyFCM GitHub - olucurious/PyFCM: Python client for FCM - Firebase Cloud Messaging (Android, iOS and Web)Python client for FCM - Firebase Cloud Messaging (Android, iOS and Web) - olucurious/PyFCMgithub.com PyFCM을 사용해서 Push Notification을 전송하도록 했는데, PyFCM은 문서화가 잘 되어있지 않은건지, 아니면 언어 특성상 알아서 잘 쓰면 되는건지 에러 관련해서 처리하는 방법을 찾아볼 수가 없었다. Python을 사용한 Firebase Cloud Message를 찾아보면..
2025.02.18 -
[Flutter] 미세 팁 - 앱스토어에 iOS용 앱을 출시하는 경우, 다양한 기기의 스크린 샷 준비하기
iOS용 앱을 앱스토어에 출시하기 위해서는 다양한 기기의 스크린샷을 캡쳐해야한다. 애석하게도 개중에는 반드시 추가해야하는 스크린샷이 있는데, 앱을 등록하는 시기에 맞춰서 등록해야하는 스크린샷 크기가 미묘하게 변화한다. 예를 들어 이 글을 작성하는 2025년 1월 31일을 기준으로, iPhone 16 Pro Max 화면 사이즈인 6.9인치 디스플레이가 옵션이고 iPhone XS Pro Max 화면 사이즈인 6.5인치 디스플레이가 필수 사양이었다. 만약 아이패드를 지원한다면, 13인치 디스플레이 기준으로 촬영한 스크린샷이 첨부되어야한다. 물론 게임을 비롯해 다양한 업체에서 출시한 앱을 살펴보면, 필수 기기에서 캡쳐한 스크린샷이 동봉되어있긴 하지만 마케팅을 위해 다양한 문구나 이미지가 포함되어있는 것을 볼 수..
2025.01.31 -
[Dart] Completer를 사용한 비동기 제어
[Dart] 메시지를 통해 동작하는 Isolate를 추상화하기Isolate에 대해 알아보자에서 Isolate를 사용할 시 유의해야 할 점과, 포트를 사용해서 Isolate 사이에 여러개의 메시지를 주고받기에 기재되어있는 예제를 살펴봤습니다. 유의할 점 중에는 Isolate 갯zerodice0.tistory.com 이전에 여러가지 동작을 하나의 Isolate에서 처리 가능하도록 작성한 적이 있었다. 이를 통해서 Worker를 1~2개만 생성한 뒤 원하는 작업이 별개의 Isolate에서 동작하도록 작성할 수 있게 됐다. 물론 앱의 성능을 위해서도 Isolate는 1~2개 정도가 실행되는게 가장 적당했는데, 어느 순간 확인해보니 Worker가 4~8개씩 실행되는 경우가 있는게 아닌가. 어디가 문제인지 고민하..
2025.01.15 -
안드로이드 폰의 화면을 미러링해서 컴퓨터에 띄워보자, scrcpy!
GitHub - Genymobile/scrcpy: Display and control your Android deviceDisplay and control your Android device. Contribute to Genymobile/scrcpy development by creating an account on GitHub.github.com 평소에는 디버깅을 위해서 안드로이드 스튜디오의 Running Device 툴을 사용해서, 에뮬레이터를 띄우거나 혹은 USB/Wi-Fi로 연결되어있는 장비의 화면을 띄우곤 했다. 다만 이 경우에는 프레임이 제한되거나 화면 품질이 저하된다던가 하는 문제가 있었다. 그래서 찾다가 발견한 것은 scrcpy. 윈도우나 리눅스를 사용하고 있다면 위의 깃허브 레포지터리를..
2024.11.20