OAuth 2.0 на Android - PullRequest
       6

OAuth 2.0 на Android

0 голосов
/ 28 мая 2018

Я хотел бы создать простое приложение для проверки возможностей недавно запущенного API библиотеки фотографий Google (https://developers.google.com/photos/library/guides/get-started). Однако при попытке получить список альбомов я столкнулся с ошибкой 401. Я включил API библиотеки фотографийв консоли API и в моем приложении я запросил доступ к этой области с помощью следующего кода:

    val GOOGLE_PHOTOS_SCOPE = Scope("https://www.googleapis.com/auth/photoslibrary.readonly")
    if (!GoogleSignIn.hasPermissions(
                    GoogleSignIn.getLastSignedInAccount(this),
                    GOOGLE_PHOTOS_SCOPE)) {
        GoogleSignIn.requestPermissions(
                this,
                1,
                GoogleSignIn.getLastSignedInAccount(this),
                GOOGLE_PHOTOS_SCOPE)
    } else {
        Log.d(TAG, "Permission granted")

        (application as QuizApp).photosLibraryApi.getAlbumList().enqueue(
                object: retrofit2.Callback<ResponseBody> {
                    override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) {
                        Log.e(TAG, "FAIL ${t.toString()}", t)
                    }

                    override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
                        Log.d(TAG, "Success ${response.toString()}")
                    }

                }
        )
    }

Я предполагаю, что мне нужно каким-то образом предоставить мои client_id и project_id из файла credentials.json, но у меня естьПонятия не имею, как это сделать. Кто-нибудь делал это раньше? Любые советы, как лучше всего использовать Google OAuth2.0?

1 Ответ

0 голосов
/ 17 августа 2018

После входа в систему с учетной записью Google (а это асинхронная операция, поэтому вам необходим прослушиватель - см. Документацию по входу в Google), вы можете получить код авторизации.Этот код необходимо обменять на токен доступа, и этот токен затем передается в качестве параметра всем вызовам API Google Фото.Я просто использовал библиотеку, такую ​​как OKHTTP (на Android), чтобы создать запрос API для получения этого маркера доступа, и да, там вам нужен ваш клиентский ключ.Примечание: код JAVA, но вы, конечно, можете сделать то же самое в Kotlin с другим синтаксисом.

OkHttpClient client = new OkHttpClient();
        RequestBody requestBody = new FormEncodingBuilder()
                .add("grant_type", "authorization_code")
                .add("client_id", CLIENT_AUTH_KEY_WEB)
                .add("client_secret", CLIENT_SECRET)
                .add("redirect_uri", "")
                .add("code", ACTUAL AUTHORISATION CODE AFTER LOGIN)
                .build();
        final Request request = new Request.Builder()
                .url("https://www.googleapis.com/oauth2/v4/token")
                .post(requestBody)
                .build();

После этого (и вам нужно включить прослушиватели для успеха или неудачи - см. Документы OKHTTP), затем выможно использовать токен доступа для получения доступа к API.Конечно, он также должен работать с RetroFit, как я вижу, вы используете, но у меня нет опыта работы с этой библиотекой.

...