Авторизационный токен для twitchapi - PullRequest
0 голосов
/ 26 декабря 2018

Я играю с TwitchAPI, используя модернизацию.Я хочу получить данные игры.Исходя из их документов, для получения токенами приложений им необходимо выполнить OAuth-неявный поток кода на начальном этапе.Делая это с модернизацией, я получаю HTML в качестве ответа.Это HTML-код, когда пользователь войдет в систему и авторизует приложение.После входа в систему я получаю свой токен доступа.

Я попробовал Поток учетных данных клиента OAuth .Модифицируя мой вызов для получения токена, я получаю объект JSON со всей необходимой информацией.

@POST("token")
Call<AccessTokenResponse> getData(@HeaderMap Map<String, String> headerMap, @Query("client_id")String clientId, @Query("client_secret") String clientSecret, @Query("grant_type")String grantType);

Этот тип должен использоваться с межсерверными запросами.Но ответ совершенно верный.

Я использую неявный подход, но я борюсь с ответом HTML.Я не знаю, как я могу использовать его и получить токен доступа после авторизации пользователя.Что мне нужно сделать, чтобы правильно получить токен доступа?

Мой код:

@GET("authorize")
Call<String>getDataImplicit(@Query("client_id")String clientId, @Query("redirect_uri") String redirectUri, @Query("response_type") String responseType, @Query("scope")String scopeType, @Query("state")String state);

Мой звонок:

Call<String>getImplicit = HttpConnectionHandler.getInstance().getTwitchGameApi().getDataImplicit("my client id", REDIRECT_URI, "token", "analytics:read:games", "123qwerty");
        getImplicit.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                if(response.code() != 200){
                    ResponseBody responseBody = response.errorBody();
                    try {
                        String str = responseBody.string();
                        Log.e("ERROR", str);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                else{
                    String str = response.body().toString();
                    Log.e("ERROR", "Body: "+str);

                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

            }
        });

1 Ответ

0 голосов
/ 27 декабря 2018

Для этого я изменил поток и не использовал модификацию в части авторизации.Я создал это:

HttpUrl httpUrl = HttpUrl.parse("https://id.twitch.tv/oauth2/authorize");
        HttpUrl builtUrl = httpUrl.newBuilder()
                .addQueryParameter("client_id", "my client ID")
                .addQueryParameter("redirect_uri", REDIRECT_URI)
                .addQueryParameter("response_type", "token")
                .addQueryParameter("scope", "analytics:read:games")
                //.addQueryParameter("state", "asdqwe123")
                .build();
        callback.onSuccess(builtUrl.url());

После создания и намерения и запускаДействие:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(String.valueOf(url)));
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();

Работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...