I've been having some troubles with Google Authorization and I've never worked with any "Google credentials-involved" process before.
My problem takes place after I've created the credential reader (which I assume means that I could access my Google credential's JSON file correctly), just in the line where I instantiate a new Trusted Transport from the GoogleNetHTTPTransport
. There, the Exception error throws:
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)
I've been investigating but couldn't still find a decent and clear explanation of how these Transports work or why the KeyStore
is involved in this process.
My code is part of an AsyncTask
I'm using to fetch data from a Google Sheet, for which I'm currently trying to get access. Here I leave you authorize() method that will retrieve me a Credential
to pass to my 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;
}
Thanks in advance, I'm just starting with Google developing and I'm very interested in learning about all its possibilities. I also take any suggestions to my coding.
Here is answer that helped me solve this issue https://stackoverflow.com/a/39249969/8853293 You have to replace
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
with
HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With