tl; dr: рабочий фрагмент внизу этого ответа!
Вы делаете это
play({
playerInstance: new Spotify.Player({ name: "..." }),
spotify_uri: 'spotify:track:7xGfFoTpQ2E7fRF5lN10tr',
});
за пределами следующего.
window.onSpotifyWebPlaybackSDKReady = () => {
// You can now initialize Spotify.Player and use the SDK
};
Это означает, что play
вызывается сразу, не дожидаясь загрузки Spotify Web Playback SDK.Как говорится в комментарии, Spotify.Player
можно использовать сразу после вызова onSpotifyWebPlaybackSDKReady
.
Другая проблема заключается в том, что вы фактически никогда не создавали устройство Spotify Connect.Что необходимо для использования веб-API Spotify для управления этим конкретным устройством.Это работает путем вызова connect
для экземпляра Spotify.Player
.Чтобы узнать, когда connect
завершено и проигрыватель готов к воспроизведению песен, вам нужно сначала определить слушателя, как показано ниже.
player.addListener('ready', ({ device_id }) => {
console.log('Ready with Device ID', device_id);
});
Таким образом, вам действительно нужно два разных API Spotify длядостичь своей цели.Сначала вам нужен Spotify Web Playback SDK для создания устройства Spotify Connect (документы Spotify называют его проигрывателем).После этого вы можете управлять этим точным устройством Spotify Connect с помощью веб-API Spotify.
Следующий фрагмент будет воспроизводить песню.
ПРЕДУПРЕЖДЕНИЕ: Это будет воспроизводить музыку в вашем браузере безлюбые элементы управления!
Для этого фрагмента необходим токен доступа, который можно получить здесь , нажав зеленую кнопку с надписью Get Your Web Playback SDK Access Token
.Затем токен необходимо скопировать в строку 11 фрагмента, заменив <YOUR_ACCESS_TOKEN_HERE>
.
index.html
<!-- Load the Spotify Web Playback SDK -->
<script src="https://sdk.scdn.co/spotify-player.js"></script>
<script>
// Called when the Spotify Web Playback SDK is ready to use
window.onSpotifyWebPlaybackSDKReady = () => {
// Define the Spotify Connect device, getOAuthToken has an actual token
// hardcoded for the sake of simplicity
var player = new Spotify.Player({
name: 'A Spotify Web SDK Player',
getOAuthToken: callback => {
callback('<YOUR_ACCESS_TOKEN_HERE>');
},
volume: 0.1
});
// Called when connected to the player created beforehand successfully
player.addListener('ready', ({ device_id }) => {
console.log('Ready with Device ID', device_id);
const play = ({
spotify_uri,
playerInstance: {
_options: {
getOAuthToken,
id
}
}
}) => {
getOAuthToken(access_token => {
fetch(`https://api.spotify.com/v1/me/player/play?device_id=${id}`, {
method: 'PUT',
body: JSON.stringify({ uris: [spotify_uri] }),
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${access_token}`
},
});
});
};
play({
playerInstance: player,
spotify_uri: 'spotify:track:7xGfFoTpQ2E7fRF5lN10tr',
});
});
// Connect to the player created beforehand, this is equivalent to
// creating a new device which will be visible for Spotify Connect
player.connect();
};
</script>