Flutter

[Flutter] Spotify 라이브러리

hamiric 2025. 1. 17. 20:57

Spotify

스포티파이는 수많은 곡을 광고 없이 감상할 수 있는 디지털 음악 서비스 플랫폼이다.

 

Spotify Premium - Spotify (KR)

Spotify Premium은 수많은 곡을 광고 없이 감상할 수 있는 디지털 음악 서비스입니다.

www.spotify.com

 

이번 포스팅에서는 스포티파이에서 제공하는 것들중, 플러터 앱 개발에 유용할만한

Spotify 라이브러리와 Spotify SDK 라이브러리에 대해 알아보고자 한다.

 

Spotify for Developer

스포티파이 관련 api나 라이브러리를 이용하기 위해서는 스포티파이 개발자 페이지에서 Clinet ID 를 받아와야 한다.

계정을 만드는 방법이라던가, 앱을 등록하는것은 여기서는 생략하도록 하겠다.

 

spotify-for-developers

 

developer.spotify.com

 

아래와 같이 Clinet ID가 발급되면 정상적으로 진행된거라고 할 수 있다!

 

 

Spotify 라이브러리

 

spotify | Dart package

An incomplete dart library for interfacing with the Spotify Web API.

pub.dev

 

Spotify 라이브러리는 Spotify Web Api 를 다트(플러터) 프로젝트에서 보다 쉽게 사용하기 위한 라이브러리라고 할 수 있다.

즉, 스포티파이에 등록된 음악 데이터에 대한 접근을 할 때 필요한 라이브러리이다.

 

주의할점은, 해당 라이브러리에서는, 아니 애초에 Spotify Web Api 에서는

음악재생과 같은 스트리밍기능과 가사를 제공해 주지 않는다는 점은 알아두자!

 

사용법

  • 라이브러리 설치

우선, 스포티파이 라이브러리를 설치해준다.

// Terminal
flutter pub add spotify

 

  • 사용하기

해당 라이브러리를 사용하기 위해서는 ClientId 와 ClinetSecret 키가 필요하다.

해당 정보를 입력해 주면, 스포티파이 라이브러리가 제공하는 기능을 사용할 수 있다.

// 사용법
final credentials = SpotifyApiCredentials(clientId, clientSecret);
final spotify = SpotifyApi(credentials);
// 스포티파이가 제공하는 기능들
spotify.search
spotify.playlists
sptify.albums

...

 

여기서는 이중 곡명 검색기능을 사용하는 예제만 소개한다.

다른 기능들은 라이브러리의 예제를 찾아보기 바란다..

// 곡명 검색 (List<Page<dynamic>> 으로 반환됨)
final searchResult = await spotify.search.get('apart').first();


// 각 searchResult의 순서
// 0 : Playlist (apart 라는 이름을 가진 플레이리스트 검색)
// 1 : Album (apart 라는 앨범 검색)
// 2 : Artist (apart 라는 아티스트 검색)
// 3 : Track (apart 라는 곡 검색)
final data = searchResult[3];
for (var item in data.items!) {
  if (item is PlaylistSimple) {
    print(
      'Playlist: \n'
      'id: ${item.id}\n'
      'name: ${item.name}:\n'
      'collaborative: ${item.collaborative}\n'
      'href: ${item.href}\n'
      'trackslink: ${item.tracksLink!.href}\n'
      'owner: ${item.owner}\n'
      'public: ${item.owner}\n'
      'snapshotId: ${item.snapshotId}\n'
      'type: ${item.type}\n'
      'uri: ${item.uri}\n'
      'images: ${item.images!.length}\n'
      '-------------------------------'
    );
  }
  if (item is Artist) {
    print(
      'Artist: \n'
      'id: ${item.id}\n'
      'name: ${item.name}\n'
      'href: ${item.href}\n'
      'type: ${item.type}\n'
      'uri: ${item.uri}\n'
      'popularity: ${item.popularity}\n'
      '-------------------------------'
    );
  }
  if (item is Track) {
    print(
      'Track:\n'
      'id: ${item.id}\n'
      'name: ${item.name}\n'
      'href: ${item.href}\n'
      'type: ${item.type}\n'
      'uri: ${item.uri}\n'
      'isPlayable: ${item.isPlayable}\n'
      'artists: ${item.artists!.length}\n'
      'availableMarkets: ${item.availableMarkets!.length}\n'
      'discNumber: ${item.discNumber}\n'
      'trackNumber: ${item.trackNumber}\n'
      'explicit: ${item.explicit}\n'
      'popularity: ${item.popularity}\n'
      '-------------------------------'
    );
  }
  if (item is AlbumSimple) {
    print(
      'Album:\n'
      'id: ${item.id}\n'
      'name: ${item.name}\n'
      'href: ${item.href}\n'
      'type: ${item.type}\n'
      'uri: ${item.uri}\n'
      'albumType: ${item.albumType}\n'
      'artists: ${item.artists!.length}\n'
      'availableMarkets: ${item.availableMarkets!.length}\n'
      'images: ${item.images!.length}\n'
      'releaseDate: ${item.releaseDate}\n'
      'releaseDatePrecision: ${item.releaseDatePrecision}\n'
      '-------------------------------'
    );
  }
}

 

 

 

Spotify SDK 라이브러리

 

spotify_sdk | Flutter package

A flutter plugin that let's you communicate with the spotify sdk and auth lib

pub.dev

 

Spotify sdk 라이브러리는 Spotify Web Playback SDK 의 모바일(플러터) 버전이라고 할 수 있다.

해당 라이브러리는, 스포티파이의 계정을 가져와 해당 유저의 플레이리스트를 가져온다던지, 음악을 스트리밍 한다던지 등의 기능을 제공한다. 음악 스트리밍 기능을 찾는 거라면, 해당 라이브러리를 사용해야 한다.

 

이때 주의해야 할 것이 두가지 있는데,

하나는 음악 스트리밍 기능은 실제로 사용하는 유저가 스포티파이 프리미엄을 사용하고 있어야 한다는 것과,

다른 하나는 해당 라이브러리를 사용하기 위해서는, 기기에 스포티파이 앱이 설치되어 있어야 한다는 점이다.

 

사용법 ( 안드로이드 )

  • Auto Setting

라이브러리를 사용하기 위한 기본 환경설정을 해주는 명령어이다.

// Terminal
dart run spotify_sdk:android_setup

 

 

하지만 'Android Studio 4.2+' 를 사용하는 사람들은 수동 Setting을 해야 한다고 되어 있다.

아래는 수동 세팅에 관한 내용이다.

 

  • 라이브러리 설치

우선 spotify_sdk 라이브러리를 사용하기 위해 설치를 진행한다.

// Terminal
flutter pub add spotify_sdk

 

  • aar 파일 다운로드

해당 링크에서 가장 최신 버전의 aar 파일을 다운로드 받는다.

필자는 현재 기준으로 가장 최신버전인 spotify-app-remote-release-0.8.0.aar 을 다운로드 받았다.

 

Releases · spotify/android-sdk

Spotify SDK for Android. Contribute to spotify/android-sdk development by creating an account on GitHub.

github.com

 

이후 Android 파일에 

spotify-app-remote 라는 파일을 생성하고,

aar 파일과, build.gradle 파일을 생성 및 위치시킨다.

여기서 build.gradle은 새로 만들어지는 파일이다.

 

이후, build.gradle 파일에 다음과 같이 입력한다.

// android/app/build.gradle

configurations.maybeCreate("default")
artifacts.add("default", file('spotify-app-remote-release-0.8.0.aar'))

 

  • Setting.gradle 수정

android 폴더의 setting.gradle 파일에 다음 코드를 추가한다.

include ':spotify-app-remote'

 

  • app/build.gradle 파일 수정

android/app/build.gradle 파일에 다음 코드를 추가한다.

defaultConfig {
    manifestPlaceholders = [redirectSchemeName: "spotify-sdk", redirectHostName: "auth"]
    ...
}

 

위의 절차를 마치면, spotify_sdk 를 사용하기 위한 최소 조건은 만족한 것이라고 할 수 있다.

 

 

  • 기능 사용

자, 이제 spotify_sdk에서 사용할 수 있는 기능중 하나인 AccessToken을 받아오는 것을 해보려고 한다.

다른 기능들은 spotify_sdk의 예제 프로젝트를 살펴보기 바란다. 프로젝트를 실행해 보는게 훨씬더 이해하기 편했다..

 

GitHub - brim-borium/spotify_sdk: Flutter Package to connect the spotify sdk

Flutter Package to connect the spotify sdk. Contribute to brim-borium/spotify_sdk development by creating an account on GitHub.

github.com

 

아래 이미지는 스포티파이에서 유저의 AccessToken을 받아오는 과정이다.

완벽히 이해할 필요는 없다.

 

access_token을 얻기 위해서 두 번의 요청이 필요하다고 한다.
유저가 로그인을 하면 바로 토큰을 주는 게 아니라 토큰을 얻을 수 있는 code를 리턴한다.

이 code를 가지고 스포티파이 측에 한 번 더 요청을 해야 토큰을 받을 수 있다.

 

다 필요없고, 해당 로직을 수행하는 코드는 다음과 같다.

final accessToken = await SpotifySdk.getAccessToken(
  clientId: ClientId,
  redirectUrl: 'spotify-sdk://auth',
  scope: "app-remote-control,user-modify-playback-state,playlist-read-private",
);

 

이때, 스포티파이 개발자 페이지에 Redirect URls 를 먼저 입력해주자.

여기서 redirectUrl 에 대해 알아야 하는데,

getAccessToken 요청을 보내면, 웹이 열리고, 해당 웹에서 스포티파이 로그인이 진행된다.

로그인이 정상적으로 처리되면, 해당 redirectUrl 에다가 code와 함께 반환하게 되게 된다.

이때, 이 코드를 받고 다시 서버에게 유저 AccessToken를 요청하게 되면, 그제서야 Token을 가져오는 방식인것이다.

(사실 이렇게 이해한게 완전히 맞는지는 모르겠다)

 

아무튼 위의 방식을 이용하여 AccessToken를 가져올 수 있게 된다.

 

 

 

## 엑세스토큰 요청을 했을때 웹페이지가 켜진후 꺼지지 않는 현상

android/app/src/main/AndroidManifest.xml 에서 android:taskAffinity 값을 제거해 주면 된다.

밑의 사진의 코드에서 android:taskAffinity 를 제거하면 정상적으로 처리된다.

 

 

 

'Flutter' 카테고리의 다른 글

라이브러리 탐방  (0) 2025.01.20
플러터 로컬 DB  (0) 2025.01.07
안드로이드 배포파일 만들기  (0) 2024.12.23
파이어베이스 애널리틱스  (0) 2024.12.23
파이어베이스 크래시틱스  (0) 2024.12.23