Как справиться с ошибкой 401 Spotify веб API (обертка) на Android - PullRequest
0 голосов
/ 12 мая 2019

У меня проблемы с обновлением токена доступа 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 - просто получить метаданные от некоторых исполнителей и музыки. Меня не интересует доступ к данным пользователя, поэтому я даже не знаю, зачем мне запрашивать авторизацию

Любой обходной путь приветствуется!

...