iyOmSd/Title: Swift

[Swift] WWDC21 Meet Group Activities

냄수 2021. 7. 11. 22:00
반응형

이번에 WWDC를 보면서 기대되는 기능중 하나였어요

 

SharePlay!

페이스타임 할 때 화면공유 기능이죠

모두와 같이 볼 수 있고 그 화면에 접근 할 수도 있죠

 

 

Session

GroupActivity를 하기전에 모든 사람들이 공유할 준비가 되야하고

세션에 들어오면 메시지와 텍스트, 오디오 및 비디오를 통신할 수 있어요

GroupActivity를 통해서 iOS, iPadOS, MacOS에서 작동하는 통합환경을 구축하고있고 WebKit을 사용하는 웹사이트에서도 사용할 수 있다고하네요

 

만약 아직 일어나지 않은 일을 보고 친구들이 웃고있다고 생각해봐라!

스포일러 경고..!

이러한 상황이 나오지 않게  AVFoundation에 완벽하게 통합된 재생 동기화 프로토콜을 구축했다네요

 

누군가가 재생을 누르면 그룹내의 모든 사람이 동시에 재생이 시작되고

좋아하는 장면으로 이동한다면 다른 사람들도 모두 볼 수 있으므로 마치 같은 방에 있는것처럼 완벽하게 동기화 된 순간을 경험 할 수 있다고 소개하고 있어요

 

SharePlay를 이용하면 앱이 사용자와 관련된 시간을 늘릴 수 있다는 장점이 있다고소개하네요

기존사용자는 다른 사용자와함깨 SharePlay를 통해 앱을 같이사용하므로 전파할 수 있다고해요

 

 

GroupActivity개요

GroupActivity는 FaceTime통화에서 SharePlay를 사용해서 사람들과 공유하고 즐길 수 있는 것을 나타내는 객체에요

통화중에 앱으로 이동할 수있고 앱에서 GroupActivity프로토콜을 채택한 경우 SharePlay를 지원한다는 알림이 표시된다고하네요

뒤에서 더 자세히 다룰거지만 prepareForActivation 함수로 공유시작함을 요청해요

이 함수는 FaceTime통화에서 모든사람과 공유하거나 로컬상태로(혼자보기) 유지하는 옵션을 제공해요

 

 

GroupActivity

FaceTime통화시 사용자간 공유환경을 만들 수 있는 Swift Native 프레임워크

AVFoundation과 긴밀하게 통합되어 있어서 공유 비디오 및 오디오 재생환경을 쉽게 만들 수 있음

앱이 공유환경을 정의 하는데 사용

공유오디오, 비디오재생환경 수행하는 경우 컨텐츠의 URL이 저장될 수 있음

사용자 지정 공유환경을 제공할 수도 있음. 예를 들어 같이 그림을 그릴수 있는 경험을 제공한다면 이경우에는 그리는 항목에 대한 정보가 저장됨

 

 

GroupSession

  • representation of the group
  • Access to participants
  • Additional API for syncing data across devices
  • End to end encrypted

공유환경에 참여하는 그룹을 나타냄

그룹에 속한 참가자와 같은 항목에 액세스가능

그룹세션은 대량의 데이터를 교환하기 위한것이아님 AVFoundation에서 재생, 일시중지 또는 탐색명령을 교환하여 콘텐츠를 동기화 상태로 유지하는데 사용함

end-to-end 암호화됨 - 아무도 장치의 교환되는 데이터를 읽지 못한다를 의미함

 

페이스타임 통화중에

SharePlay할 준비가 되어있다면

어플리케이션이 먼저해야할일은 GroupActivity프로토콜을 준수하는 객체를 생성하는것

GroupActivity를 준수하는 객체에는 공유활동에 대한 정보가 포함되어있음

(공유재생환경을 만든경우 재생할 컨텐츠에대한 정보가 표시)

 

 

앱이 activity를 생성한 후에  prepareForActivation()을 호출

그러면 사용자에게 activity를 시작할 것인지 여부를 묻는 메시지가 표시됨 -> 공유할것인지 로컬에서 볼 것인지

(사용자를 놀라게 하고싶지않기때문에 activity시작전 동의를 얻고 싶다! 따라서 이단계는 필수적임)

activity권한 부여후에 앱에서 activity객체에 대한 활성화를 호출해야함 (activity() 호출)

 

 

activity를 호출했다면 어플리케이션은 비동기 스퀀스를 통해 들어오는 GroupSession 클래스의 세션을 반복해야함

이게 무슨말이냐면.. 더 자세한 설명은 다른 세션에 있기때문에 간단하게..

func listenForGroupSession() {
   async {
            for await session in MovieWatchingActivity.sessions() {
           	...
           	player.playbackCoordinator.coordinateWithSession(groupSession)
       }
   }
}

세션을 반복하면서 원하는 동작을 해주는걸 뜻하는말인것 같아요

자세한건 해당 세션을 정리하는 포스팅에서 보도록하구요!

 

이렇구나~~ 넘어가주세요 이번주제는 Meet 이니까 간단하게 개요위주로 설명해요

 

그런다음 세션이 있을 때 공유환경을 위해 어플리케이션에서 GroupSession객체전달

이 단계는 초기앱이든 세션을 수신하는 원격기기에서든 어플리케이션에서 수행하는것과 동일한 단계임

어플리케이션 세션이 제출되었으므로 세션에 참여하기전에 설정을 해야함

무언가 함께 그리는 환경이라면 참여하기전 공유환경에 대한 자산을 로드해야함

하지만 미디어재생환경을 제공한다면 아래와같은 작업이 수반됨

어플리케이션이 AVPlaybackCoordinator를 GroupSession에 연결하여 연결된 AVPlayer가 프레임워크에서 제공하는 통신채널을 통해 컨테츠를 동기화 할 수 있도록함

이러한 동기화지원은 단순히 AVPlayer에만 국한되지 않으며 현재 보유하고있는 다른 사용자 지정 플레이어를 사용할 수 있고 여전히 AVDelegating PlaybackCoordinator를 통해 동기화를 지원함

 

마지막으로 설정이 완료되면 어플리케이션 호출이 GroupSession에 가입됨

join()이 호출되면서 시스템은 여러 기기에서 실행되는 애플리케이션 간에 종단간 암호화된 채널을 설정함

이제 데이터 동기화할 준비가 되어서 사용자 공유환경에 참여할 수 있음

이채널을 사용하여 데이터를 교환하여 사용자의 동기화를 유지할 수 있음

이채널은 또한 AVFoundation에서 사용자가 재생,일시중지,건너뛰기를 누를때 재생상태를 교환하여 재생을 동기화상태로 유지하는데 사용됨

이 채널은 대량의 데이터를 교환하는데 사용할 수 없음 대신 사용자 동기화유지를 위해 정보를 교환하는데 사용해라

사용자환경을 개선하기위해 이벤트를 사용할 수 있음

이벤트를 게시하면 시스템이 사용자에게 이벤트에대해 알리는 알림을 표시함

현재 API에서는 미디어 재생을 위한 이벤트만 게시할 수 있음 (AVPlayer, AVDelegating PlaybackCoordinator사용시 무료로 사용가능?)

AVFoundation과의 긴밀한 통합을 통해 공유미디어 재생환경을 제공함

 

반응형