首页 文章

Spotify Android - 制作授权Web请求

提问于
浏览
0

我正在开发一款实现Spotify API的Android应用程序,以允许用户收听音乐 . 我已经配置了Spotify为Android设备创建的播放器,但它的功能非常有限,因此我不得不通过Spotify的Web API来执行更多高级功能 .

我试图获取用户自己的播放列表列表时遇到了错误 . 我正在使用以下命令:

URL url = new URL("https://api.spotify.com/v1/me/playlists");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

但是,对于我所做的其他Web API请求而不是这个命令,它会抛出错误:

java.io.FileNotFoundException: https://api.spotify.com/v1/me/playlists
                                                                               at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:242)
                                                                               at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
                                                                               at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
                                                                               at com.tmacstudios.spotifyvoice.WebWrapper$override.searchUserPlaylist(WebWrapper.java:257)
                                                                               at com.tmacstudios.spotifyvoice.WebWrapper$override.access$dispatch(WebWrapper.java)
                                                                               at com.tmacstudios.spotifyvoice.WebWrapper.searchUserPlaylist(WebWrapper.java:0)
                                                                               at com.tmacstudios.spotifyvoice.MainActivity$6.run(MainActivity.java:382)
                                                                               at java.lang.Thread.run(Thread.java:818)

我不完全确定为什么我会收到此错误,但我认为这可能与没有必要的授权来提出此请求有关 . 有人可以帮我解决这个问题吗?

1 回答

  • 1

    在研究了文档之后,我能够找到解决问题的方法 . 事实上我得到了错误,因为我没有使用正确的授权 .

    您可以使用以下代码在OnActivityResult中获取授权令牌:

    AuthenticationResponse response = AuthenticationClient.getResponse(resultCode, intent);
                if (response.getType() == AuthenticationResponse.Type.TOKEN) {
    
                    authToken = response.getAccessToken();
                    Log.e("MainActivity","Auth Token: "+authToken.toString());
     ...
    

    然后在发出URL请求时,只需将授权令牌作为标头传递 .

    URL url = new URL("https://api.spotify.com/v1/me/playlists");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestProperty("Authorization", "Bearer " + authToken);
    
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
     ...
    

    另请注意,在最初形成授权请求时,必须将启用的权限作为范围启用 .

相关问题