«JKS не найден» при попытке GoogleNetHTTPTransport

У меня были некоторые проблемы с авторизацией Google, и я никогда раньше не работал с какими-либо процессами, связанными с учетными данными Google.

Моя проблема возникает после того, как я создал средство чтения учетных данных (что, как я полагаю, означает, что я могу правильно получить доступ к файлу JSON моих учетных данных Google), как раз в строке, где я создаю экземпляр нового доверенного транспорта из файла GoogleNetHTTPTransport. Там ошибка исключения выдает:

W/System.err: java.security.KeyStoreException: JKS not found
    at java.security.KeyStore.getInstance(KeyStore.java:649)
    at com.google.api.client.util.SecurityUtils.getJavaKeyStore(SecurityUtils.java:53)
    at com.google.api.client.googleapis.GoogleUtils.getCertificateTrustStore(GoogleUtils.java:74)
    at com.google.api.client.googleapis.javanet.GoogleNetHttpTransport.newTrustedTransport(GoogleNetHttpTransport.java:55)
    at com.example.juans.hasapp.getDataFromSheet.authorize(getDataFromSheet.java:70)

Я исследовал, но все еще не мог найти достойного и четкого объяснения того, как работают эти Транспорты или почему KeyStore участвует в этом процессе.

Мой код является частью AsyncTask, который я использую для извлечения данных из таблицы Google, к которой я сейчас пытаюсь получить доступ. Здесь я оставляю вам метод authorize(), который доставит мне Credential для передачи моему SheetsService.

private Credential authorize(Context context) {
    Resources resources = context.getResources();
    InputStream jsonInput = resources.openRawResource(R.raw.credential_info);
    Reader credentialReader = null;
    try {
        credentialReader = new InputStreamReader(jsonInput);
        Log.v("GoogleAut", "credential reader created");
    } catch (NullPointerException n){
        Log.v("ERROR GoogleAut", "filePath came out empty, no info provided");
    }

    GoogleClientSecrets clientSecrets = null;
    try {
        clientSecrets = GoogleClientSecrets
                .load(JacksonFactory.getDefaultInstance(),credentialReader);
    } catch (IOException e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut","IOException error occurred");
    }

    List<String> scopes = Arrays.asList(SheetsScopes.SPREADSHEETS);

    GoogleAuthorizationCodeFlow flow = null;
    try {
        flow = new GoogleAuthorizationCodeFlow
                .Builder(GoogleNetHttpTransport.newTrustedTransport()
                , JacksonFactory.getDefaultInstance()
                ,clientSecrets
                ,scopes)
                .setDataStoreFactory(new MemoryDataStoreFactory())
                .setAccessType("offline")
                .build();
    } catch (IOException e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut","IOException error occurred");
    } catch (GeneralSecurityException e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut","GeneralSecurityException error occurred");
    }

    try {
        return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver())
                .authorize("user");
    } catch (Exception e) {
        e.printStackTrace();
        Log.v("ERROR GoogleAut", "Unidentified error");
    }
    return null;
}

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


person Juanse Hevia    schedule 24.05.2018    source источник
comment
Отвечает ли это на ваш вопрос? GoogleNetHttpTransport.newTrustedTransport() возвращает значение Null   -  person Josh Correia    schedule 29.07.2020


Ответы (1)


Вот ответ, который помог мне решить эту проблему https://stackoverflow.com/a/39249969/8853293.

HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

с

HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport()
person Michał Kopaczewski    schedule 20.09.2018