Kerangka kerja Spotify iOS memungkinkan aplikasi Anda berinteraksi dengan aplikasi Spotify yang berjalan di latar belakang perangkat pengguna. Kemampuannya mencakup otorisasi, mendapatkan metadata untuk trek dan konteks yang sedang diputar, serta mengeluarkan perintah pemutaran.
Harap Dicatat: Dengan menggunakan alat pengembang Spotify, Anda menyetujui Ketentuan Penggunaan Pengembang kami.
Spotify iOS SDK adalah sekumpulan objek ringan yang terhubung dengan aplikasi Spotify dan memungkinkan Anda mengontrolnya sementara semua beban berat dalam pemutaran dipindahkan ke aplikasi Spotify itu sendiri. Aplikasi Spotify menangani pemutaran, jaringan, cache offline, dan integrasi musik OS, sehingga Anda dapat fokus pada pengalaman pengguna. Berpindah dari aplikasi Anda ke aplikasi Spotify dan sebaliknya adalah pengalaman yang disederhanakan di mana pemutaran dan metadata selalu sinkron.
Fitur Utama
Pengarsipan Bug
Komponen
Bagaimana Cara Kerja Panggilan Jarak Jauh Aplikasi?
Ketentuan Penggunaan
tutorial
Pertanyaan yang Sering Diajukan
Kami menyukai masukan dari komunitas pengembang, jadi jangan ragu untuk melaporkan fitur yang hilang atau bug ke pelacak masalah kami. Pastikan Anda mencari masalah yang ada sebelum membuat masalah baru.
Buka tiket bug | Buka permintaan fitur
Kerangka kerja Spotify iOS memerlukan target penerapan iOS 12 atau lebih tinggi. Arsitektur berikut didukung di SDK:
SPTAppRemoteAlbum
SPTAppRemoteArtist
SPTAppRemoteLibraryState
SPTAppRemotePlaybackRestrictions
SPTAppRemotePlaybackOptions
SPTAppRemotePlayerState
SPTAppRemoteTrack
SPTAppRemoteContentItem
SPTAppRemoteUserCapabilities
SPTAppRemoteImageRepresentable
SPTConfiguration
Titik masuk utama untuk terhubung ke aplikasi Spotify dan mengambil komponen API. Gunakan ini untuk membuat, memantau, dan mengakhiri koneksi.
Kirim perintah terkait pemutaran seperti:
Ambil gambar untuk SPTAppRemoteImageRepresentable
Ambil/berlangganan/setel data terkait pengguna seperti:
SPTAppRemoteUserCapabilities
Ambil konten yang direkomendasikan untuk pengguna.
Saat Anda berinteraksi dengan salah satu App Remote API, Anda meneruskan blok SPTAppRemoteCallback
yang dipanggil dengan item hasil yang diharapkan atau NSError
jika operasi gagal. Pemblokiran dipicu setelah perintah diterima oleh aplikasi Spotify (atau jika koneksi tidak dapat dilakukan).
Berikut ini contoh penggunaan SPTRemotePlayerAPI
untuk melewatkan sebuah lagu:
[appRemote.playerAPI skipToNext: ^( id _Nullable result, NSError * _Nullable error) {
if (error) {
// Operation failed
} else {
// Operation succeeded
}
}];
Kami menyediakan beberapa contoh proyek untuk membantu Anda memulai Kerangka iOS di folder DemoProjects. Lihat Readme di folder DemoProjects untuk informasi lebih lanjut tentang fungsi setiap sampel.
Untuk berkomunikasi dengan aplikasi Spotify, aplikasi Anda perlu mendapatkan izin pengguna untuk mengontrol pemutaran terlebih dahulu dengan menggunakan otorisasi bawaan untuk App Remote. Untuk melakukan itu, Anda perlu meminta tampilan otorisasi saat terhubung ke Spotify. Kerangka kerja ini akan secara otomatis meminta cakupan app-remote-control
dan menampilkan tampilan autentikasi jika pengguna belum menyetujuinya.
Perlu diperhatikan bahwa dengan menggunakan alat pengembang Spotify, Anda menyetujui Ketentuan Penggunaan Pengembang kami.
Tutorial ini memandu Anda langkah demi langkah dalam pembuatan aplikasi sederhana yang menggunakan Spotify iOS SDK untuk memutar trek audio dan berlangganan status pemutar. Ini akan berjalan melalui aliran otorisasi.
Ikuti langkah-langkah berikut untuk memastikan Anda siap memulai coding.
Tambahkan paket SpotifyiOS ke proyek Anda. Anda dapat melakukan ini melalui Swift Package Manager (SPM), atau dengan menambahkan SpotifyiOS.xcframework
ke proyek Xcode Anda secara langsung.
Di info.plist Anda, tambahkan URI pengalihan yang Anda daftarkan di Aplikasi Saya. Anda perlu menambahkan URI pengalihan di bawah "Jenis URL" dan "Skema URL". Pastikan untuk menyetel "pengidentifikasi URL" yang unik juga.
Tambahkan perpustakaan ke file sumber Anda.
Cepat
import SpotifyiOS
Tujuan-c
# import < SpotifyiOS/SpotifyiOS.h >
Untuk dapat menggunakan bagian kontrol pemutaran SDK, pengguna perlu mengotorisasi aplikasi Anda. Jika belum, koneksi akan gagal dengan kesalahan No token provided
. Untuk mengizinkan pengguna mengotorisasi aplikasi Anda, Anda dapat menggunakan alur otorisasi bawaan.
Inisialisasi SPTConfiguration
dengan ID klien Anda dan alihkan URI.
Cepat
let configuration = SPTConfiguration (
clientID : " YOUR_CLIENT_ID " ,
redirectURL : URL ( string : " your_redirect_uri " ) !
)
Tujuan-c
SPTConfiguration *configuration = [[SPTConfiguration alloc ] initWithClientID: @" your_client_id "
redirectURL: [ NSURL URLWithString: @" your_redirect_uri " ]];
Inisialisasi SPTAppRemote
dengan SPTConfiguration
Anda
Cepat
self . appRemote = SPTAppRemote ( configuration : configuration , logLevel : . debug )
Tujuan-c
self.appRemote = [[SPTAppRemote alloc ] initWithConfiguration: configuration logLevel: SPTAppRemoteLogLevelDebug];
Memulai alur autentikasi (untuk cara lain mendeteksi apakah Spotify diinstal, serta mengatribusikan instalasi, silakan lihat Panduan Tautan Konten kami).
Cepat
// Note: A blank string will play the user's last song or pick a random one.
self . appRemote . authorizeAndPlayURI ( " spotify:track:69bp2EbF7Q2rqc5N3ylezZ " ) { spotifyInstalled in
if !spotifyInstalled {
/*
* The Spotify app is not installed.
* Use SKStoreProductViewController with [SPTAppRemote spotifyItunesItemIdentifier] to present the user
* with a way to install the Spotify app.
*/
}
}
Tujuan-c
// Note: A blank string will play the user's last song or pick a random one.
[ self .appRemote authorizeAndPlayURI: @" spotify:track:69bp2EbF7Q2rqc5N3ylezZ " completionHandler: ^( BOOL spotifyInstalled) {
if (!spotifyInstalled) {
/*
* The Spotify app is not installed.
* Use SKStoreProductViewController with [SPTAppRemote spotifyItunesItemIdentifier] to present the user
* with a way to install the Spotify app.
*/
}
}];
Konfigurasikan AppDelegate
Anda untuk menguraikan accessToken di application:openURL:options:
dan atur di SPTAppRemote
connectionParameters.
Tujuan-c
- ( BOOL )application:(UIApplication *)app openURL:( NSURL *)url options:( NSDictionary <UIApplicationOpenURLOptionsKey, id > *)options
{
NSDictionary *params = [ self .appRemote authorizationParametersFromURL: url];
NSString *token = params[SPTAppRemoteAccessTokenKey];
if (token) {
self. appRemote . connectionParameters . accessToken = token;
} else if (params[SPTAppRemoteErrorDescriptionKey]) {
NSLog ( @" %@ " , params[SPTAppRemoteErrorDescriptionKey]);
}
return YES ;
}
Jika Anda menggunakan UIScene maka Anda perlu menggunakan metode yang sesuai dalam delegasi adegan Anda.
Cepat
func scene ( _ scene : UIScene , openURLContexts URLContexts : Set < UIOpenURLContext > ) {
guard let url = URLContexts . first ? . url else {
return
}
let parameters = appRemote . authorizationParameters ( from : url ) ;
if let access_token = parameters ? [ SPTAppRemoteAccessTokenKey ] {
appRemote . connectionParameters . accessToken = access_token
self . accessToken = access_token
} else if let error_description = parameters ? [ SPTAppRemoteErrorDescriptionKey ] {
// Show the error
}
}
Atur delegasi koneksi Anda dan coba sambungkan.
Cepat
self . appRemote . delegate = self
self . appRemote . connect ( )
// MARK: AppRemoteDelegate
func appRemoteDidEstablishConnection ( _ appRemote : SPTAppRemote ) {
// Connection was successful, you can begin issuing commands
}
func appRemote ( _ appRemote : SPTAppRemote , didFailConnectionAttemptWithError error : Error ? ) {
// Connection failed
}
func appRemote ( _ appRemote : SPTAppRemote , didDisconnectWithError error : Error ? ) {
// Connection disconnected
}
Tujuan-c
self.appRemote.delegate = self;
[ self .appRemote connect ];
- ( void )appRemoteDidEstablishConnection:(SPTAppRemote *)appRemote
{
// Connection was successful, you can begin issuing commands
}
- ( void )appRemote:(SPTAppRemote *)appRemote didFailConnectionAttemptWithError:( NSError *)error
{
// Connection failed
}
- ( void )appRemote:(SPTAppRemote *)appRemote didDisconnectWithError:(nullable NSError *)error
{
// Connection disconnected
}
Tetapkan delegasi dan berlangganan status pemain:
Cepat
self . appRemote . playerAPI ? . delegate = self
appRemote . playerAPI ? . subscribe ( toPlayerState : { result , error in
// Handle Errors
} )
// MARK: SPTAppRemotePlayerStateDelegate
func playerStateDidChange ( _ playerState : SPTAppRemotePlayerState ) {
print ( " track name ( playerState . track . name ) " )
}
Tujuan-c
appRemote.playerAPI.delegate = self;
[appRemote.playerAPI subscribeToPlayerState: ^( id _Nullable result, NSError * _Nullable error) {
// Handle Errors
}];
- ( void )playerStateDidChange:( id <SPTAppRemotePlayerState>)playerState
{
NSLog ( @" Track name: %@ " , playerState. track . name );
}
Sebagai rasa hormat, Anda harus selalu memutuskan sambungan App Remote saat aplikasi Anda memasuki keadaan latar belakang. Ini memberi tahu Spotify bahwa aman untuk menonaktifkan streaming aktif. Jika aplikasi Anda tidak memanggil pemutusan koneksi dengan benar, Spotify tidak tahu bahwa aplikasi tersebut seharusnya tidak mempertahankan koneksi, dan hal ini dapat mengakibatkan masalah koneksi di masa mendatang.
Jika Anda ingin aplikasi Anda tersambung kembali secara otomatis setelah kejadian gangguan seperti panggilan masuk atau interaksi Siri, Anda dapat menggunakan callback willResignActive
dan didBecomeActive
untuk memutuskan sambungan dan menyambung kembali dengan aman. Jika Anda tidak ingin menyambung kembali secara langsung, biasanya cukup dengan menutup sambungan di callback didEnterBackground
.
Cepat
func sceneWillResignActive ( _ scene : UIScene ) {
self . appRemote . disconnect ( )
}
func sceneDidBecomeActive ( _ scene : UIScene ) {
self . appRemote . connect ( )
}
Tujuan-c
- ( void )applicationWillResignActive:(UIApplication *)application
{
[ self .appRemote disconnect ];
}
- ( void )applicationDidBecomeActive:(UIApplication *)application
{
[ self .appRemote connect ];
}
// If you're using UIWindowSceneDelegate
- ( void )sceneDidBecomeActive:(UIScene *)scene
{
[ self .appRemote connect ];
}
- ( void )sceneWillResignActive:(UIScene *)scene
{
[ self .appRemote disconnect ];
}
Mengapa musik perlu diputar untuk terhubung dengan SPTAppRemote
?
Musik harus diputar saat Anda terhubung dengan SPTAppRemote
untuk memastikan aplikasi Spotify tidak ditangguhkan di latar belakang. Aplikasi iOS hanya dapat tetap aktif di latar belakang selama beberapa detik kecuali aplikasi tersebut aktif melakukan sesuatu seperti navigasi atau memutar musik.
Apakah thread SpotifyiOS.framework aman?
Tidak, kerangka kerja saat ini diharapkan dipanggil dari thread utama. Ini akan memindahkan sebagian besar pekerjaannya ke thread latar belakang secara internal tetapi panggilan balik ke kode Anda juga akan terjadi di thread utama.
Bagaimana jika saya perlu memberi otorisasi tanpa memulai pemutaran?
Ada metode otorisasi alternatif. Anda dapat menemukan informasi lebih lanjut tentang itu di sini.