У меня проблемы с обновлением токена доступа Spotify, на самом деле нет ни малейшего представления, как это сделать. Я использую веб-API с Android-оберткой
Мои реализации:
//spotify WEB API Wrapper
implementation 'com.github.kaaes:spotify-web-api-android:0.4.1'
// spotify auth library
implementation 'com.spotify.android:auth:1.1.0'
Код активности с экраном согласия пользователя, который отправляет пользователя на веб-страницу для предоставления доступа к его учетной записи
public class OAuthSpotify extends AppCompatActivity {
public static final String CLIENT_ID = "123456789";
public static final int AUTH_TOKEN_REQUEST_CODE = 0x10;
private final OkHttpClient mOkHttpClient = new OkHttpClient();
private String mAccessToken;
private Call mCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_oauth_spotify);
final AuthenticationRequest request = getAuthenticationRequest();
AuthenticationClient.openLoginActivity(this, AUTH_TOKEN_REQUEST_CODE, request);
new AuthenticationRequest.Builder(CLIENT_ID, AuthenticationResponse.Type.TOKEN, getRedirectUri().toString())
.setShowDialog(true)
.setScopes(new String[]{"user-read-email"})
.setCampaign("your-campaign-token")
.build();
}
@Override
protected void onDestroy() {
cancelCall();
super.onDestroy();
}
@SuppressWarnings("unused") public void getUserProfile() {
final Request request = new Request.Builder()
.url("https://api.spotify.com/v1/me")
.addHeader("Authorization", "Bearer " + mAccessToken)
.build();
cancelCall();
mCall = mOkHttpClient.newCall(request);
mCall.enqueue(new Callback() {
@Override public void onFailure(Request request, IOException e) {
Log.d(App.myFuckingUniqueTAG + "OAuthSpotify", "onFailure: " + "Failed to fetchArtURL data: " + e);
}
@Override
public void onResponse(com.squareup.okhttp.Response response) throws IOException {
try {
final JSONObject jsonObject = new JSONObject(response.body().string());
Log.d(App.myFuckingUniqueTAG + "OAuthSpotify", "onResponse: " + jsonObject.toString(3));
} catch (JSONException e) {
Log.d(App.myFuckingUniqueTAG + "OAuthSpotify", "onResponse: " + "Failed to fetchArtURL data: " + e);
}
}
});
}
private AuthenticationRequest getAuthenticationRequest() {
return new AuthenticationRequest.Builder(CLIENT_ID, AuthenticationResponse.Type.TOKEN, getRedirectUri().toString())
.setShowDialog(true)
.setScopes(new String[]{"user-read-email"})
.setCampaign("your-campaign-token")
.build();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(App.myFuckingUniqueTAG + "OAuthSpotify", "onActivityResult: ");
super.onActivityResult(requestCode, resultCode, data);
final AuthenticationResponse response = AuthenticationClient.getResponse(resultCode, data);
if (AUTH_TOKEN_REQUEST_CODE == requestCode) {
mAccessToken = response.getAccessToken();
Prefs.putString(c.spotify_access_token, mAccessToken);
App.spotify_access_token = mAccessToken;
finish();
// getUserProfile();
// tryAccess();
}
}
private void cancelCall() {
if (mCall != null) {
mCall.cancel();
}
}
private Uri getRedirectUri() {
return new Uri.Builder()
.scheme(getString(R.string.com_spotify_sdk_redirect_scheme))
.authority(getString(R.string.com_spotify_sdk_redirect_host))
.build();
}
}
Все работает нормально, проблема в том, что токен у меня истекает через 1 час, а затем я должен запросить у пользователя aprovval для доступа к его учетной записи снова и снова.
Мне известно, что существует способ запросить новый токен без одобрения пользователя, используя второй токен, возвращенный при первом вызове, но я не могу выполнить эту процедуру, используя текущие библиотеки, гораздо реже, используя веб-API напрямую. Я на самом деле совершенно заблудился здесь.
Моя цель с помощью API Spotify - просто получить метаданные от некоторых исполнителей и музыки. Меня не интересует доступ к данным пользователя, поэтому я даже не знаю, зачем мне запрашивать авторизацию
Любой обходной путь приветствуется!