- 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻
https://developer.apple.com/videos/play/wwdc2013/204/
관련내용
- 멀티테스킹,
- 백그라운드 테스킹
👍요약
- 백그라운드에서 멀티테스킹하는 방법은 크게 3가지로,
- bacground fetch,
- remote notification,
- background urlsession이 있다.
- 이들이 가능하게되려면, 설정-백그라운드 실행이 켜져있어야하고, 앱을 switcher에서 삭제하지않아야한다.
- 또한, xcode에서 Capability - background mode 에서 설정해야한다.
- background fetch는 배터리성능 및 등 이유로, 연속적으로실행되지않는다. 사용방법은, iOS13 부터 deprecated 되었다.
- news, socil networking feeds
- remote notification은 서버 -> 👍APS ( Apple push service ) -> device 로이루어진다.
- APS 에서 device로 push할때, 앱은 백그라운드에서 실행되어질수있따.
- silent push는 제한된주기를 가지며, 너무잦으면 딜레이생긴다.
- Instant messaging, read thislater
Background
- 앱이 백그라운드상태에들어가면, 백그라운드작업을시작한다.
- iOS7부터는 배터리성능을위해서, 사용자가 잠그면, 앱들도 잠자게되게했다. 일시적으로 잠깐씩 앱을wake하여 수행하고, 또는 사용자가 다른앱을키기위해 핸드폰을키면 그때도 수행한다. 즉 해야할작업의양은 같고, 나뉘어지면서수행될뿐이다.

요약하자면, 더이상 앱은 디바이스를 awake하지않고,
앱의백그라운드작업은 연속적이지않게된다.

apple swicher에서, remove되면 앱백그라운드실행도 종료하게된다.
사용자들은 앱이 백그라운드에있을때 refresh되도록할지말지 앱-설정-백그라운드에서 설정할수이ㅏㅆㄷ.
New Multitasking APIs
- Backgroudn Fetch
- 백그라운드상태에서도 실행되도록하는 주기적인 방법이다.
- Remote Notifications
- notification을 받으면 launch할기회를준다, 즉 silent push notification상태에서 앱을 백그라운드에서 wake하도록하게해준다.
- 사용자를 귀찮게하지않으면서 앱내에서작업을처리하도록해준다?
- background Transfer Service
- 백그라운드상태에서도 지속적으로 업로드,다운로드하게해준다
Background Fetch
- 이제는 유저가 앱을다시사용하기전에도 컨텐트를 업데이트할수있다.
하는방법
- Info.plist 에서 UIBackgorundModes 를 fetch하거나,
- Capability’s 에서 가능하게한다.
- 그다음 Minimu bakground Fetch interval을 설정한다.
- 그리고, 구현하면 AppleDelegate의 completionHandler 에서호출된다?
- ⚠️iOS13부터는 depracated.

백그라운드에 갔을때, Minum backgorund fetch interval의 값이 되기전까지는 실행되지않느다.
(파랑색이 백그라운드에서 실행되는경우, 검은색이 실행되지않는, minum구간 )

만약 값을지정하지않는다면, default minium을 사용하라.
- default minimum 은 never
- 이는 절대 백그라운드에서 실행되지않도록 한다는뜻이다.
실제 Example

그다음 minimum interval 설정.
- App Delegate - didfinishLaunchingWithOptions에서.
- 만약 UIApplicationBackgorundFetchIntervalMinimum으로 설정하면, iOS가 최적으로결정해준다.

- 그다음, Aple Delegate 구현한다. - performFetchWithCompletinoHandler
- 실제로,실행할 API 메소드를 사용한다.
- 성공할경우, 안할경우 completionHandler를 사용한다.
- completionHandler가 delegate메서드 매개변수이름.
(아래가 사용할 API )


background fetch 테스트하는 방법
- shceme을 새로만드는걸 추천한다.
- 그리고, run - options - Backrogund Fetch 클릭한다.

글고 실행하면, 포그라운드로실행되지않고, 홈화면에있다.
대신 백그라운드ㅏㄱ잘실행이되면, 로그창에뜬다.

Resume test
- Debug - simulate Background fetch 를 실행하면, 다시 백그라운드에서실행이되고, 로그창에뜨ㅏㄴㄷ.


사용자의패턴에따라 예측하수있따.
- 아침에는 특정앱을쓰고, 저녁에는 뭘쓰고,

iOS 6까지는,
서버에서 애플서버에 푸시하고, 애플이 디바이스에 푸시한다.
디바이스는 notification banner를 받는다.
그러고, 유저가 슬라이드해서 알림을본다면, 그떄, 메세지를 서버에서다시가져오도로고하고, 업데이트하여보여준다.

하지만! iOS7에서는 바꿔서, 앱으로 바로 깨우게하여, 앱이가져와 이미준비되있는상태가되고 난후, 디바이스에 알림을보낸다!

또한, silent notification으로, 사용자에게 알리지않고, 백그라운드에서 앱을 실행할수도있따!

사용학위해서는,
BackgroundMode 에서 remote-notification을 설정하고,
content-available 1로하라?
그러면, delegate- didReceiveRemoteNotification에서 받게된다.
notification을 silent로하고싶다면, aps { } 에서 alert를 생략한다.
- Apple push Servie 로, 서버가 APS에 푸시를 보내고, APS가 디바이스에 push를 보내는듯?
하지만, silent push는 제한된주기다?
- 왜냐, 사용자는알지못하니, 너무 무분별한 push로부터 사용자를지켜주기위해.
- 그러므로, 주기가적절하다면 바로보내진다.
그러므로, 주기가너무빠르다면, APS에 저장되어진다. 나중에전달하기위해.
- 중요한것은 없애지는않는다는것! 지연시킬뿐!

그래서, 딱히 우리가할건없고, 그냥 보내기만하면된다. APS가 알아서 적절한 시간으로 보내줄것이다.
2 api
Background fetch, remote notifiction.
- Background fetch는 덜중요한,
- notification은 중요한,

Background Transfer Service
URLSession background
- URLSession을 이용하여, background에서도 다운로드,업로드할수있도록하게해준다.
- background에서 완료될경우, 호출되고호출된다.

'WWDC' 카테고리의 다른 글
WWDC 18 - Behind the Scenes of the Xcode Build Process (0) | 2021.06.27 |
---|---|
WWDC 15 - Optimizing Swift Performance (0) | 2021.06.27 |
WWDC 16 - What's New in UICollectionView in iOS 10 (0) | 2021.06.26 |
WWDC 19 - Advance in App Background Execution (0) | 2021.06.26 |
WWDC 18 - Introducing Network.framework: A modern alternative to Sockets (0) | 2021.06.26 |