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