nyancoder

WWDC 2021 - Meet MusicKit for Swift 본문

WWDC/WWDC 2021

WWDC 2021 - Meet MusicKit for Swift

nyancoder 2021. 7. 20. 02:43

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10294/

 

  • MusicKit은 Swift를 사용해 앱에서 음악을 접근할 수 있는 새 프레임워크입니다.
  • 새로운 Swift 동시성 구문을 활용하며, SwiftUI와 함께 사용하도록 설계되었습니다.
  • MusicKit 은 Apple Music의 다양한 콘텐츠에 접근할 수 있는 Apple Music API를 제공합니다.
  • Apple Music과 연동되는 앱을 쉽게 만들 수 있습니다.

 

Requesting music content

  • MusicKit은 콘텐츠를 가져오고 음악에 접근하기 위한 새로운 요청 모델을 제공합니다.
  • Apple Music API를 통해서 Apple Music 콘텐츠를 검색하거나, 특정 필터를 기반으로 항목들을 가져올 수 있습니다.
  • 이러한 요청은 가져온 페이지의 다음 페이지를 가져올 수 있도록 구성되어 있습니다.

  • Album의 구성 요소는 세 가지이며 첫 번째는 속성 정보를 담고 있습니다.
  • 속성 정보에는 "title"과 같은 문자열 속성, "isCompilation"과 같은 boolean 속성, 크기 정보 및 관련 색상과 함께 아트웍의 URL에 접근할 수 있는 "artwork"과 같이 Structure 속성입니다.
  • 두 번째 구성 요소는 관계 정보로, 관련 아티스트나 장르 또는 지정된 앨범의 트랙 목록 같은 정보를 제공합니다.
  • 마지막 구성 요소는 연관성 정보로 관련 콘텐츠의 몇 가지 약한 연관성 정보를 제공합니다.
  • 연관성 정보는 관계 정보와 유사하지만 더 일시적 이거나 편집 중심입니다.

  • 예를 들어 MusicKit에서 관계 불러오려면 원하는 항목들을 나열한 다음 with함수를 불러 호출할 수 있습니다.
  • 이 함수는 비동기 함수이므로 "await" 키워드와 함께 호출되어야 합니다.

  • "관련 앨범"같은 연관성 정보를 가져오는 것 또한 거의 동일하며, 직접 접근할 수 있는 항목인 title 같은 항목을 포함한다는 차이점만이 있습니다.

  • 예를 들어 보면, 원하는 검색 결과를 가져올 수 있는 화면을 만들 수 있습니다.
  • 또한 최근에 본 앨범 목록을 표시할 수 있습니다.

  • 앨범을 선택했을 때, 이 앨범에 대한 세부 정보를 표시할 수 있습니다.
  • 이 정보는 SwiftUI의 상태 변수를 업데이트하여 수행됩니다.
  • 재생 버튼을 사용하거나 특정 트랙을 선택하여 이 앨범의 음악을 재생할 수 있습니다.

  • 실제 앨범의 바코드를 이용하여 해당 앨범을 찾을 수 있습니다.

  • 범용 제품 코드(Universal Product Code)인 바코드 정보를 RequestMusicCatalogResourceRequest에 넣어서 정보를 받아올 수 있습니다.

  • Apple Music API가 제공하는 범용 데이터 요청 기능을 통해서 구조화되지 않은 JSON응답을 얻을 수 있습니다.
  • Codable 프로토콜을 준수하기 때문에, JSONDecoder를 사용하여 디코딩할 수 있습니다.

  • 이 응답을 로드하려면 Decodable형식의 구조체를 만들고 동일하게 Decodable형식을 만족하는 Genre타입의 data 멤버 변수를 선언하면 됩니다.

  • 예를 들어 Apple Music 최상위 장르 목록을 얻어오려면 위와 같이 해당 URL에서 응답을 호출한 다음 위에서 만든 구조체를 이용하여 읽어올 수 있습니다.

 

Privacy and user consent

  • 사용자의 청취 기록 또는 음악 라이브러리를 포함하는 데이터를 요청할 때는 사용자의 동의를 받아야 합니다.
  • 이러한 권한 요청은 기기 및 앱별로 이루어집니다.

  • 위의 예에서 사용자에게 권한을 요청하는 팝업을 볼 수 있습니다.
  • 해당 팝업에는 Info.plist에 정의되어있는 설명이 표시됩니다.

  • 위와 같은 코드를 통해 MusicKit에 대한 사용자 동의를 비동기적으로 요청할 수 있습니다.

 

Token management

  • Apple Music API는 기본적으로 앱을 인증하는 개발자 토큰 이 필요합니다.
  • 예전의 개발자 토큰과는 달리 Swift용 MusicKit을 사용하면 개발자 토큰이 자동으로 생성됩니다.
  • 개발자 포털에서 이 MusicKit을 선택하기만 하면 됩니다.

  •  App ID를 등록하는 페이지에서 하단의 App Services 탭을 선택하고 MusicKit 체크박스를 활성화합니다.

  • Apple Music API에는 개인화된 엔드포인트에 대한 사용자 토큰이 필요 하지만, 이 또한 개발자 토큰처럼 자동으로 생성됩니다.

 

Subscription information

  • 사용자가 Apple Music을 구독하고 있는지 확인할 수 있습니다.
  • 확인할 수 있는 정보는 사용자가 콘텐츠를 재생할 수 있는지, iCloud 라이브러리가 활성화되어 있는지, 구독자가 될 수 있는지의 3가지입니다.
  • 위의 정보를 사용하여 앱의 Apple Music 관련 기능이 사용할 수 있는 상태인지를 확인해서 UI를 표시해야 합니다.

  • 예를 들어 위의 커드에서는 MusicSubscription 상태를 활용하여 구독 상태를 파악하고 버튼을 적절히 활성화/비활성화 상태로 표시할 수 있습니다.
  • 비동기 task 블록 내에서 새 구독 업데이트 스트림을 사용할 수 있습니다.

 

Playback

  • MusicKit은 SystemMusicPlayer와 ApplicationMusicPlayer 두 개의 플레이어를 제공합니다.
  • 예를 들어 소셜 미디어 앱은 SystemMusicPlayer를 사용하여 시스템 음악 앱에서 재생 되는 내용을 변경하는 반면 피트니스 앱은 ApplicationMusicPlayer를 사용하여 재생 상태를 시스템 음악 앱과 완전히 독립적으로 유지하고자 할 수 있습니다.
  • SystemMusicPlayer를 사용하는 경우 음악 앱이 현재 재생 중인 앱으로 처리되지만 ApplicationMusicPlayer를 사용하는 경우 해당 앱이 현재 재생 중인 앱으로 표시됩니다.
  • SystemMusicPlayer를 사용하면 앱이 시스템 음악 앱을 원격 제어하는 반면, ApplicationMusicPlayer를 사용하면 앱이 완전히 별도의 재생 순서를 가집니다.
  • 이 두 플레이어 모두 하나 이상의 항목으로 대기열을 설정할 수 있습니다.
  • 그러나 ApplicationMusicPlayer만이 중간에 항목을 삽입하거나, 이전에 추가된 항목을 제거할 수 있습니다.

 

Subscription offers

  • 사용자가 아직 Apple Music 구독자가 아닌 경우 앱 내에서 무료 평가판을 시작하도록 할 수 있습니다.
  • 구독 제안은 사용자에게 표시되는 기본 메시지를 조정하여 구성할 수 있습니다.
  • 또한 상황에 따라 특정 노래, 앨범 또는 재생 목록을 강조 표시할 수도 있습니다.
  • 앱에서 구독 제안 시트를 사용하면 Apple Services Performance Partners Program이라고 하는 제휴 프로그램을 통해 새로운 Apple Music 구독자를 유치하는 데 대한 보상을 받을 수 있습니다.

  • 구독 제안 옵션의 itemID 속성으로는 앨범의 ID를 전달합니다.
  • 이후 canBecomeSubscriber가 true로 설정되면 해당 버튼을 활성화하고 musicSubscriptionOffer를 통해서 해당 옵션을 제안합니다.

 

목차: https://nyancoder.tistory.com/2

 

Comments