我期待着实现一个连接到Spotify的应用程序。要使用Spotify服务,我需要一个令牌,我可以使用Spotify SDK获得令牌,但是此令牌旨在用于快速过期而不是长期使用。在Web API中,我可以通过我的服务器进行调用,以通过refresh_token获取新的访问令牌。我知道这必须在呼叫服务器到服务器完成。但是,我不知道如何管理Android Spotify SDK提供的信息以从服务器获取refresh_token。我甚至不知道这是否可以通过Spotify SDK来实现,还是必须实施整个授权。我在网上搜索了信息,但是我找不到与此主题相关的信息。希望有人能帮忙。Spotify长期登录Android SDK
1
A
回答
0
基本上,如果您需要刷新令牌(由SDK提供的令牌持续一个小时,然后您必须请求另一个令牌),则需要使用Web API来获取此令牌。在这种情况下,您不会将SDK用于身份验证过程的任何部分。从技术上讲,您不必使用服务器↔服务器组件来传递秘密来进行Spotify服务器认证步骤,这是避免在应用程序中硬编码秘密的最佳实践(安全明智),但从技术上讲,没有什么能够阻止您进行所有authentication stepsapp↔spotify服务器利用相关的网络API调用。
1
几个月前,我开发了一款也使用Spotify服务的应用程序。由于我想查询歌曲的音频功能,因此我不得不使用Spotify的Web API,因为Spotify的Android SDK尚未提供此类功能。当我实现应用程序时,我没有想太多,所以每当我需要做查询时,我都会再次获取访问令牌。你可以使用下面的代码获得令牌,在json字符串内还带有一个expires_in属性,告诉你令牌会过期多少秒,因此应该很容易通过一些细微的修改来实现你想要的。
private String getAccessTokenFromJsonStr(String spotifyJsonStr) throws JSONException {
final String OWM_ACCESS_TOKEN = "access_token";
String accessToken;
try {
JSONObject spotifyJson = new JSONObject(spotifyJsonStr);
accessToken = spotifyJson.getString(OWM_ACCESS_TOKEN);
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage(), e);
e.printStackTrace();
}
return accessToken;
}
private String getSpotifyAccessToken(){
String response;
String accessToken;
try {
String serviceURL = "https://accounts.spotify.com/api/token";
URL myURL = new URL(serviceURL);
HttpsURLConnection myURLConnection = (HttpsURLConnection) myURL.openConnection();
String userCredentials = "YOUR_USER_CREDENTIALS:YOUR_USER_CREDENTIALS";
int flags = Base64.NO_WRAP | Base64.URL_SAFE;
byte[] encodedString = Base64.encode(userCredentials.getBytes(), flags);
String basicAuth = "Basic " + new String(encodedString);
myURLConnection.setRequestProperty("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
System.setProperty("http.agent", "");
HashMap postDataParams = new HashMap<String, String>();
postDataParams.put("grant_type", "client_credentials");
OutputStream os = myURLConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
response = "";
int responseCode=myURLConnection.getResponseCode();
Log.d(LOG_TAG, "response code is " + responseCode);
if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br=new BufferedReader(new InputStreamReader(myURLConnection.getInputStream()));
while ((line=br.readLine()) != null) {
response+=line;
}
}
else {
response="";
String errLine;
String errResponse = "";
BufferedReader br=new BufferedReader(new InputStreamReader(myURLConnection.getErrorStream()));
while ((errLine=br.readLine()) != null) {
errResponse += errLine;
}
Log.d(LOG_TAG, "error response is " + errResponse);
}
Log.d(LOG_TAG, "response is " + response);
} catch (Exception e){
e.printStackTrace();
}
String accessTokenJsonStr = response.toString();
try {
accessToken = getAccessTokenFromJsonStr(accessTokenJsonStr);
return accessToken;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
相关问题
- 1. 登录失败的Spotify Android SDK教程
- 2. Spotify使用iOS SDK的长期令牌
- 3. 从Spotify注销与sdk spotify-android-auth
- 4. Spotify Android SDK有没有Spotify Web-API for Android没有的东西?
- 5. Spotify FB使用预览API登录
- 6. ReactNative iOS Spotify SDK
- 7. Spotify Unity SDK
- 8. Spotify SDK iOS SDK 403错误
- 9. 利用Facebook SDK登录(iOs/Android)登录Facebook @ Web?
- 10. Facebook用户通过Facebook SDK登录后保持登录 - Android
- 11. Android Facebook SDK 4.0登录:用户登录Facebook应用时出错
- 12. 如何使用facebook SDK Xamarin Android登录?
- 13. Android - facebook sdk登录窗口消失
- 14. Facebook的Android SDK中自动登录在
- 15. 在Android应用程序Facebook SDK登录
- 16. 登录Facebook的SDK 4的Android
- 17. Facebook android sdk 3.0登录问题
- 18. Android SDK Facebook登录按钮错误
- 19. 的Android的Youtube验证登录SDK
- 20. Facebook的Android SDK登录对话框
- 21. android-自动登录facebook facebook sdk
- 22. 在spotify android sdk中刷新令牌?
- 23. Spotify Android SDK:播放离线曲目
- 24. Spotify Android SDK搜索曲目号码
- 25. Spotify API身份验证无法登录Facebook和Spotify
- 26. Facebook SDK iOS登录
- 27. Facebook JavaScript SDK登录
- 28. Facebook SDK登录iOS
- 29. Facebook Ios sdk登录
- 30. Facebook的JS SDK和登录的PHP SDK
我的问题是,请求另一个令牌不能与Android SDK来完成(或者,如果这是可以做到的,我不知道如何)。要获得另一个令牌,我必须使用SDK提供的活动。我不能在背景中这样做,这是我的目标。我目前的解决方案根本不使用SDK进行身份验证,并通过Web API实现。 –
您可以通过他们的活动或网页浏览获得新的令牌。只是在他们身边处理(webview活动或其应用程序活动)的动作意图调用取决于Spotify应用程序安装在设备上。但是,使用他们的意图/活动不应该存在问题,因为一旦凭证被缓存,您就已经登录后,用户不再显示登录活动。只需一个微调半秒钟,然后你得到一个新的令牌。只要你没有要求任何额外的权限,就不需要额外的提示,而不必像以前的登录调用那样。 –
这适用于用户开启屏幕的情况。我已经尝试在后台调用Activity,它不适合我。 –