- Spotify アプリを閉じる (kill)
- 再生API
PUT /sessions/:id/state
をstate: PLAY
で叩く active device not found
になるGET /users/me/devices
を叩く- 空
- Spotify アプリを開く
GET /users/me/devices
を叩く- アプリを開いたデバイスが存在する
- 再度、再生API
PUT /sessions/:id/state
をstate: PLAY
で叩く active device not found
になる- なにかしら曲を再生する
- 曲を止める
- 再生API
PUT /sessions/:id/state
をstate: PLAY
で叩く - 正しく再生される
アプリをkillして開くと、active deviceにはなるが、再生準備は出来ていない扱いになるっぽい。
(なら8のタイミングでactive deviceにしないでくれ〜)
再生API PUT /sessions/:id/state
で叩いているSpotify API PUT https://api.spotify.com/v1/me/player/play
で明示的に device_id
をクエリパラメータに含めることで、9のタイミングで表示されるようになる。
操作の流れとしては、
- Relaymの再生ボタンを押す
active device not found
エラーになる- Spotifyのアプリを開いてもらう
- Relaymに戻ってくる
- デバイスを選択する
- 再度Relaymの再生ボタンを押す
- 再生が始まる
が良さそう
- Spotify アプリを開く
- なにかしら曲を再生する
- 曲を止める
- 再生API
PUT /sessions/:id/state
をstate: PLAY
で叩く - 正しく再生される
- Spotify アプリで再生を止める
- アプリをバックグラウンドに移行する
- 1分ほど待つ
GET /users/me/devices
を叩く- 先程まで再生していたデバイスが存在する
- 再度、再生API
PUT /sessions/:id/state
をstate: PLAY
で叩く - Spotify APIが500 で
Server Error
が返ってくる GET /users/me/devices
を叩く- 先程まで再生していたデバイスが消える
- Spotify アプリをフォアグラウンドにする
- ここで自動で再生が開始される (11のAPIの処理が行われる)
10までは一緒
11'. Spotify アプリをフォアグラウンドにする
12'. 再度、再生API PUT /sessions/:id/state
を state: PLAY
で叩く
13'. active device not found
になる
14'. なにかしら曲を再生する
15'. 曲を止める
16'. 再生API PUT /sessions/:id/state
を state: PLAY
で叩く
17'. 正しく再生される
アプリを一定時間バックグラウンドにするとデバイスがinactiveになるが、デバイス取得APIはキャッシュされていてそのままactiveの状態を返してしまっているっぽい。
Server Error
として500を返してくる- 素直に
active device not found
を返してくれと思う。
- 素直に
サーバ側だけで対応するのは難しい。
Server Error
はサーバサイドでactive device not found
エラーと同様のものとして扱うPUT /sessions/:id/state
でactive device not found
になったときは、ユーザにSpotify アプリを開いてもらうダイアログを出す。アプリを開けば自動で再生が始めるので、あまりユーザの負担にならない。