Ich freue mich, eine App zu implementieren, die Spotify verbindet. Um Spotify-Dienste nutzen zu können, benötige ich ein Token, das ich mit dem Spotify SDK erhalten kann. Dieses Token ist jedoch für den schnellen Ablauf gedacht, nicht für die langfristige Nutzung. In der Web-API kann ich von meinem Server aus anrufen, um neue Zugangstoken über refresh_token zu erhalten. Ich weiß, dass dies in einem Anrufserver zum Server getan werden muss. Aber ich weiß nicht, wie ich die vom Android Spotify SDK bereitgestellten Informationen verwalten soll, um das refresh_token vom Server zu bekommen. Ich weiß nicht einmal, ob dies über das Spotify SDK erreicht werden kann oder ob ich die gesamte Autorisierung implementieren muss. Ich habe Informationen im Internet gesucht, kann aber keine Informationen zu diesem Thema finden. Hoffe jemand kann helfen.Spotify langfristige Anmeldung mit Android SDK
Antwort
Wenn Sie ein Aktualisierungs-Token benötigen (das Token, das vom SDK bereitgestellt wird, dauert eine Stunde und Sie müssen dann ein anderes anfordern), müssen Sie die Web-API zum Abrufen dieses Tokens verwenden. In diesem Fall würden Sie das SDK nicht für einen Teil des Authentifizierungsprozesses verwenden. Technisch gesehen müssen Sie keine Server-Server-Komponente für die Weitergabe des Spotify-Server-Authentifizierungsschritts verwenden. Es ist nur eine bewährte Methode, das Geheimnis in Ihrer App zu verschlüsseln, aber technisch gesehen gibt es nichts, was Sie daran hindern könnte Alle authentication steps AppSpotify Server mit den entsprechenden Web-API-Anrufe.
Vor ein paar Monaten habe ich eine App entwickelt, die auch Spotifys Dienste nutzt. Da ich Audiomerkmale eines Liedes abfragen wollte, musste ich die Spotify Web API verwenden, da Spotifys Android SDK solche Dinge noch nicht bereitgestellt hat. Als ich die App implementiert habe, habe ich nicht zu viel darüber nachgedacht, sodass ich jedes Mal, wenn ich Abfragen ausführen muss, wieder Zugriff auf das Token bekommen würde. Sie können das Token mit dem folgenden Code erhalten, innerhalb der JSON-Zeichenfolge kommt auch mit einer expenses_in-Eigenschaft, die Ihnen sagt, wie viele Sekunden das Token abläuft, daher sollte es leicht sein, was Sie wollen, mit einer leichten Änderung zu erreichen.
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. Android Spotify SDK Anmeldefehler Unerwartete Token
- 2. Spotify iOS SDK Künstlername
- 3. Wiedergabe von Playlists und Titeln mit Spotify SDK für Android
- 4. Spotify SDK-Genres sind immer leer?
- 5. Liste aller Spotify-Follower mit iOS SDK?
- 6. Langfristige Zweigalternative mit Git?
- 7. Spotify Bibliothek In Android App
- 8. Wie Aktualisieren von Access Token auf Spotify SDK für Android?
- 9. Spotify Integration in Android
- 10. Unbekannter Fehler in Spotify Auth Flow SDK
- 11. GENRE durch das Spotify iOS SDK
- 12. Android Facebook SDK 4.0 Anmeldung ohne Facebook App
- 13. Kann Spotify iOS SDK auf Offline-Tracks zugreifen
- 14. Anmeldung mit Spotify iOS SDK nicht möglich Beispiel für eine einfache Ablaufverfolgung, wenn der Swap-Service definiert wurde
- 15. Fehler beim Installieren der Android App mit dem Spotify SDK, [INSTALL_FAILED_NO_MATCHING_ABIS]
- 16. Spotify Sitzungsmanagement
- 17. Wie automatisch Playlist in Spotify Android App
- 18. Anmeldung mit Facebook auf Android
- 19. Android Anmeldung/Registrierung mit sharedPreference
- 20. Holen Sie sich userId von Spotify iOS SDK
- 21. C# SpinWait für langfristige warten
- 22. Spotify iOS SDK gibt Songs zurück, die nicht existieren? - Swift
- 23. Automatische Anmeldung in Android
- 24. Android Erstellen eines Spotify wie Slider Menü
- 25. Android Facebook Anmeldung onActivityResult
- 26. Floating log sdk auf Android
- 27. Anmeldung mit Facebook sdk gibt Fehler auf onActivityResult
- 28. NullPointerException bei der Anmeldung mit Facebook SDK und ParseFacebookUtils
- 29. Facebook Android SDK 3.0 SSO
- 30. Spotify Login Fehler INVALID_CLIENT: Ungültige Umleitung URI android
Mein Problem ist, dass ein anderes Token anfordert kann nicht mit dem Android SDK (oder wenn es getan werden kann, ich weiß nicht, wie) erfolgen. Um ein anderes Token zu erhalten, muss ich die vom SDK bereitgestellte Aktivität verwenden. Ich kann das nicht im Hintergrund tun, was mein Ziel ist. Meine aktuelle Lösung verwendet das SDK für auth überhaupt nicht und implementiert es über die Web-API. –
Sie können ein neues Token erhalten, ja durch ihre Aktivität oder Webview. Es ist der gleiche Aktionsabsichts-Aufruf, der auf ihrer Seite (Web-Ansicht-Aktivität oder ihre Apps-Aktivität) nur davon abhängt, ob die Spotify-App auf dem Gerät installiert ist. Es sollte jedoch kein Problem bei der Verwendung ihrer Absicht/Aktivität auftreten. Wenn Sie sich nach dem Zwischenspeichern der Anmeldeinformationen angemeldet haben, wird dem Benutzer die Anmeldeaktivität nicht mehr angezeigt. Nur ein Spinner für eine halbe Sekunde und dann bekommst du ein neues Token. Keine zusätzlichen Eingabeaufforderungen, solange Sie keine zusätzlichen Berechtigungen anfordern als beim vorherigen Anmeldeanruf. –
Dies funktioniert, wenn der Benutzer seinen Bildschirm eingeschaltet hat. Ich habe versucht, die Aktivität im Hintergrund aufzurufen und es funktioniert nicht für mich. –