How can I create a file in google drive "appDataFolder"?
I created google developer console settings which is necessary for creating file and accessing "appDataFolder".
google developer console
Android Studio output error messages as below.
W/System.err: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code": 403,
"errors": [
{
"domain": "global",
"message": "The granted scopes do not allow use of the Application Data folder.",
"reason": "insufficientScopes"
}
],
"message": "The granted scopes do not allow use of the Application Data folder."
}
W/System.err: at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:432)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.example.test1.MainActivity$3.run(MainActivity.java:131)
at java.lang.Thread.run(Thread.java:923)
Source code is
File body = new File();
body.setName(FILE_TITLE);//fileContent.getName());
body.setMimeType("text/plain");
body.setParents(Collections.singletonList("appDataFolder"));
File file = service.files().create(body, content)
.setFields("id")
.execute();
If the following line is commented out in the source code, my app can create a file in google drive
top folder not "appDataFolder".
body.setParents(Collections.singletonList("appDataFolder"));
Android Studio 4.1.2
enter image description here
Best regards.
Thanks in advance.
While from the looks of your developer console image you apear to have include a large number of scopes. The issue here is not with your settings in google developer console but rather with the scopes you have authorized your user with.
When you run your application the user is asked to consent to your accessing some of their data, this is the scope of authorization for your application. It defines what the user has granted your application access to do.
If your code only requests read only access then and you try to write to it then your going to see an insufficientScopes error message.
You need to check what scope is required of the method you are using and then make sure when you authorize your user that you are requesting that scope.
My guess is you have something like this
private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE_METADATA_READONLY);
YOu need to include this scope https://www.googleapis.com/auth/drive.appdata which is probably something like DriveScopes.DRIVE_APPDATA
Remember once the scopes have been changed in your application you will need to reauthorize the user. If your storing the consent then it needs to be removed in order to request authorization again.
Related
I am creating a new Speechclient from the Google Cloud Speech library with the system environment variable GOOGLE_APPLICATION_CREDENTIALS set to the path of my Cloud Platform service account JSON file. I am getting the following error:
INFO:
Failed to detect whether we are running on Google Compute Engine.
Exception in thread "main" com.google.cloud.storage.StorageException: Anonymous caller does not have storage.buckets.get access to the Google Cloud Storage bucket.
at com.google.cloud.storage.spi.v1.HttpStorageRpc.translate(HttpStorageRpc.java:229)
at com.google.cloud.storage.spi.v1.HttpStorageRpc.get(HttpStorageRpc.java:406)
at com.google.cloud.storage.StorageImpl$4.call(StorageImpl.java:217)
at com.google.cloud.storage.StorageImpl$4.call(StorageImpl.java:214)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
at com.google.cloud.storage.StorageImpl.get(StorageImpl.java:213)
at Main.listOfObjects(Main.java:47)
at Main.getListOfObjects(Main.java:63)
at Main.runListOfAudioFiles(Main.java:68)
at Main.main(Main.java:179)
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
{
"code" : 401,
"errors" : [ {
"domain" : "global",
"location" : "Authorization",
"locationType" : "header",
"message" : "Anonymous caller does not have storage.buckets.get access to the Google Cloud Storage bucket.",
"reason" : "required"
} ],
"message" : "Anonymous caller does not have storage.buckets.get access to the Google Cloud Storage bucket."
][1]
I have logged in to my GCP project in the command line with gcloud init. That did not have any effect, I am still getting the same above error.
I attempted to authorize the project with explicit credentials as suggested here but I got the following error:
INFO:
Failed to detect whether we are running on Google Compute Engine.
Failed to create the client due to: java.io.IOException: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
I am running on IntelliJ Idea with the Cloud Code plugin.
I am not sure how to proceed from here, any help would be appreciated, thanks!
I tried a simple Java command-line application that makes requests to the Google Apps Script Execution API. Something like this: https://developers.google.com/apps-script/guides/rest/quickstart/java#prerequisites. But it doesn't work.
Google Apps Script Editor:
function createForm() {
var form = FormApp.create('New Form');
}
Java Error:
Credentials saved to /home/palmaslab/.credentials/script-java-quickstart.json
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at org.gradle.AppsScriptApiQuickstart.main(AppsScriptApiQuickstart.java:188)
API returning an HTTP 401 response when calling the API. These error could indicate any of:
Token expiry, token revocation, token not authorized for needed scope, request not authorized correctly with OAuth 2.0 protocol. You may also check Forms Service for more information regarding forms services
Here's a related issue of 401: Unauthorized: Google apps script and execution API: latest version of script throws error
Seems you have to authorize previously the scopes.
Maybe it could help you:
Manual authorization scopes for Sheets, Docs, and Forms
I have been developing a Java language application.
Now i am trying to show the logged in user photograph as part of the user data, but i dont seem to get it right.
Through UserService i am getting the user id, and with the user id and my application api key, i am trying to build the image url to load it into my application.
But it isnt working.
The url i am building is : https://www.googleapis.com/plus/v1/people/{USER_ID}?fields=image&key={API_KEY}
But i keep getting the same error :
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "accessNotConfigured",
"message": "Access Not Configured. Please use Google Developers Console to activate the API for your project."
}
],
"code": 403,
"message": "Access Not Configured. Please use Google Developers Console to activate the API for your project."
}
}
I have enabled as well the following API in Google Developers Console:
Drive API
Drive SDK
Google Cloud SQL
Google Compute Engine
Google Picker API
Google+ API
Can anyone lend me a hand on this?. Sorry if i waste your time with something obvious.
Check that you're using the right value for the API key. They're under Public API access in the Credentials section of the developer console and should look like something like this: AIzaSyC2WWuM97gdij5k5uRduLFeL3LuURBvFpo - make sure it's of that form, and associated with the project you have enabled the API for.
I am trying to make the sample works so here is the code :
Sample Code
The documentation for the installation is there:
Installation documentation
I had a little problem on the step:
Click on "API Access", and then on "Create an OAuth 2.0 Client
ID...". Enter a product name and click "Next".
The UI of the console has been upgraded probably so I use those data for the authentication in the console:
Then I run the program and it brings me to the webpage to allow the app and then i got the following error message in the console:
403 Forbidden
{
"code" : 403,
"errors" : [ {
"message" : "you are not allowed to make this api call"
} ],
"message" : "you are not allowed to make this api call"
}
My queue.xml ACL is set with the email i used to authenticate
Why don't you use the native TaskQueue-API from the GAE Java SDK? You don't need to set up credentials, connection, ... .
You can see an example on the GAE Docs - here a Pull Queue, but you can also use a Push Queue if you want (an example is also in the GAE Docs).
Which one of the examples do you want to launch on the google app engine? On your posted link are many examples available :) . Tell me if you really want to use the Google-API to access the TaskQueues.
I am using Scribe-Java to connect to Google plus using OAuth2. I am able to authenticate my application and obtain user's permission, but when I try to access anything other than userinfo, I am getting this Exception.
403
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "accessNotConfigured","message": "Access Not Configured"
}
],
"code": 403,
"message": "Access Not Configured"
}
}
I have set the scope of my application as https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.profile and to access user's profile I am using this url:
https://www.googleapis.com/plus/v1/people/{userid}/activities/public
Can you tell me what I am doing wrong? Is there some other scope that I need to use here to access the Profile?
1) Visit the Google APIs console:
http://code.google.com/apis/console
2) Go to the 'Services' page.
3) Enable the Google+ API by switching it to On
I got the same error in PHP using HybridAuth:
I had to activate the following in the Google Developers Console in APIs & Auth -> APIs
Contacts API
Google+ API
See also the discussion at http://hybridauth.sourceforge.net/userguide/IDProvider_info_Google.html