Каков набор необходимых разрешений на стороне сервера для загрузки листа Google с Google Диска в моем приложении для Android - PullRequest
0 голосов
/ 22 ноября 2018

Моя конкретная проблема -

, когда я звоню

driveService.files().export(fileId, "text/csv").executeMediaAndDownloadTo(outputStream);

Из моего приложения я получаю

11-22 00:35:02.489 : com.google.api.client.http.HttpResponseException: 401 Unauthorized
11-22 00:35:02.490 : {
11-22 00:35:02.491 :  "error": {
11-22 00:35:02.491 :   "errors": [
11-22 00:35:02.491 :    {
11-22 00:35:02.491 :     "domain": "global",
11-22 00:35:02.491 :     "reason": "authError",
11-22 00:35:02.491 :     "message": "Invalid Credentials",
11-22 00:35:02.492 :     "locationType": "header",
11-22 00:35:02.492 :     "location": "Authorization"
11-22 00:35:02.492 :    }
11-22 00:35:02.492 :   ],
11-22 00:35:02.492 :   "code": 401,
11-22 00:35:02.492 :   "message": "Invalid Credentials"
11-22 00:35:02.493 :  }
11-22 00:35:02.493 : }

, когда я использую Проводник API в Services / Drive API v3/ drive.files.export Я получаю нужные данные.

Мои вопросы:

  1. Как я могу решить эту проблему.

  2. Когда я получаю учетную запись Google при входе в систему ... разве этого недостаточно, чтобы знать введенный мной пароль / пароль и зарегистрированный на смартфоне ... Я прав?

  3. Какой минимальный набор разрешений мне нужно установить на стороне сервера, чтобы иметь разрешения

  4. Как проверить, какая проблема связана с определенными разрешениями?не разрешается загружать лист Google с диска Google?

Большое спасибо за любой ответ.

Мои фрагменты кода Java, связанные с этой проблемой (вход в систему)

На стороне сервера

Мои учетные данные для приложения:

  • Веб-клиент
  • Клиент Android

Я использую идентификатор клиента «веб-клиента». Если я использую clientId клиента Android, я не получаю API библиотеки библиотеки idToken

:

  • Google Drive API Авторизация запросов с использованием Oauth 2.0 - на drive.files.export
  • Google Sheet API

В приложении для Android

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(this.googleClientId)
            .requestEmail()
            .build();

    ...

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

    ...
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
    ...

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        validateGoogleUser(data);
    }
}

...
    Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(this.dataIntent);
...
    GoogleSignInAccount account = task.getResult(ApiException.class);
...
    // It returns my account with id / idToken / mail / names / ... more


    And then... I continue

В методеЯ пытаюсь скачать это код

        //TODO: move this to a service and to a dao
        final HttpTransport HTTP_TRANSPORT  = AndroidHttp.newCompatibleTransport();;
        GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);



        Drive driveService = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(applicationName)
                .build();
        String fileId = idSheet;
        //TODO: Check how to check progress and limit size of download or cancel the operation after n seconds
        OutputStream outputStream = new ByteArrayOutputStream();
        driveService.files().export(fileId, "text/csv")
                .executeMediaAndDownloadTo(outputStream);

ПРИМЕЧАНИЕ: я не использую - GoogleIdTokenVerifier.verify

, и я не знаю, что это такое ... так как я уже получил свой аккаунтИнформация.

1 Ответ

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

Я нашел решение проблемы.Права на стороне сервера были в порядке.Но в этом проекте я раздвоил комбинацию входа в Google и подключения к Google Drive, мне нужно скачать или использовать файлы Google Drive из моего приложения для Android

https://github.com/jguastav/android-GoogleDriveSample

...