iOSDC Japan 2020: Background Notificationで新聞紙面の大きい画像の自動ダウンロードを実現する

https://fortee.jp/iosdc-japan-2020/proposal/6bb15eb4-09f9-4fb9-b451-ae8fbd530790

정기적으로 발송되는 콘텐츠가 있는 서비스에서는 자동 다운로드 기능이 유저에게 굉장히 좋은 UX가 됩니다.
유저가 평소에도 안정되어있는 통신 환경에 있지는 않고, 큰 콘텐츠를 가져오는데 부하도 발생합니다.
예를 들어, 신문 기사 이미지는 사이즈가 큰 2장 이상의 이미지로 구성되어 있어 다운로드에는 시간도 통신량도 꽤 필요합니다.
용량이 큰 콘텐츠를 자동으로 다운로드하기 위해 사전에 해둘 일들은 유저가 앱을 계속적으로 사용할 수 있도록 하기 위해서 굉장히 중요한 역할입니다.

iOS에서는 백그라운드에서 콘텐츠를 다운로드하기 위해 여러 API가 존재하고 있습니다.
하지만 백그라운드에서 Task를 작동시킬 타이밍, 시간은 OS에 따라 제한되고 유저가 조정할 수 있는 곳도 제한되고 있습니다.
각각의 API가 갖고 있는 제약을 이해하고, 콘텐츠의 성질에 따라 적절한 선택을 할 필요가 있습니다.

이번 발표에서는 큰 영상 콘텐츠를 대상으로한 자동 다운로드 기능에 대해 설명합니다.
기능을 만들어나가는 과정에서 직면했던 문제의 해결방법이나 앱이나 서버를 포함한 전체적인 아키텍쳐를 설명하는 것과 함께 일본경제신문(닛케이 신문)의 뷰어에서의 운용사례를 소개합니다.

대규모 서비스 운용을 통해 얻은 안정된 자동 다운로드를 성공시키기 위한 해결방법을 소개합니다.

定期的に配信されるコンテンツがあるサービスでは、自動ダウンロードの機能がより良いユーザー体験を提供します。
ユーザーは常に安定した通信環境にいるとは限らず、大きいコンテンツの取得には通信的な負荷もかかります。
例えば、新聞紙面の画像はサイズが大きい複数枚の画像で構成されており、ダウンロードには多くの通信量や実行時間が必要となります。
あらかじめ大きいコンテンツを自動でダウンロードしておく仕組みは、ユーザーがアプリを継続的に利用するにあたり非常に重要な役割を担います。

iOSではバックグラウンドでコンテンツをダウンロードするためのAPIが複数用意されています。
しかし、バックグラウンドでタスクを動かすタイミングや時間はOSによって制御されており、ユーザーが調整できる箇所は限られています。
それぞれのAPIが抱える制約を理解し、コンテンツの性質に応じて適切な選択をしなければなりません。

本セッションでは、大きい画像コンテンツを対象にした自動ダウンロード機能について説明します。
実装の過程で直面した問題への対策やアプリやサーバーサイドを含めた全体のアーキテクチャを解説するとともに、日本経済新聞 紙面ビューアーにおける新聞紙面画像での運用事例を紹介します。
大規模サービスにおける運用を通じて得られた安定して自動ダウンロードを成功させるための課題の解決方法を説明します。

Background Mode

  • 화면에 보여지지 않는 순간에도 무언가의 동작을 할 수 있다.
  • Power, Performance, Privacy 의 제한이 존재한다

활용 가능한 API

  • Background App Refresh Task (iOS 13.0 ~) : OS가 판단해서 실행
  • Background Transfer Service (iOS 7~)
  • ✍️ Background Noficiation : 채택 !

✍️ Background Noficiation

선정이유
– 현재 서포트하고 있는 OS 버전의 영향이 없다.
– Celluar + WiFi 모두 사용이 가능하다


주의사항
– 통신 환경에 의해 다운로드를 실패하는 경우에는 서버에서 성공할 때 까지 보낸다 (?)
– 유저가 의도적으로 어플을 완전히 종료한 경우에는 자동 다운로드가 실행되지 않으니 미리 알려주어야 한다.


동작 확인, 디버그
– Xcode 11.4 부터 시뮬레이터에서 동작 확인이 가능하다.
– 시뮬레이터 뿐만아니라 충전 중인 실제 기기에서의 동작 확인도 필요하다 !


서버사이드에서 발생되는 문제

– 순간적으로 리퀘스트가 폭발적으로 증가하는 경우가 있다.
– 캐시를 활용하면 극복할 수 있다 !


iPhone 단말에 따라 성공률이 꽤나 다르다
– iPhoneX 까지는 Cellular에서 안정적으로 실행되었지만 특히 6s에서 불안정 … (3일동안 그냥 실행되지 않는 경우도 있었다)
– 배터리 잔량, 배터리 온도 등의 문제가 다양하기 때문에 직접적으로 개발자가 핸들링하는 것은 불가능 …..!
– LocationAPI를 활용하면 대신 Background에서 일으키는 것이 가능하다.



안정된 상태에서 Background Notificaiton을 일으키기 위해서는 !
애초에 Crash가 발생되지 않도록, OS에서 우선순위를 지킬 수 있도록 좋은 퀄리티를 유지해야 한다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중