Introduction
This tutorial will show you some useful functions for managing Google Drive folders with 0 extensions, together with the help of App Inventor.
or (particularly the Web component) and Google Apps Script. You will be able to:
-
Add an editor/viewer to your folder.
-
Check what access (comment, edit, view, etc.) a user has to this folder/
-
Check if the folder is starred or is in the trash of your Drive.
-
Create a new folder inside the folder.
-
Dump this folder into the trash.
-
Edit and get the description of this folder.
-
Get the creation date and the last updated date of this folder.
-
Get the owner's email and name of this folder.
-
Move this folder to another destination folder.
-
Remove an editor or a viewer.
-
Renaming the folder, or picking it up back from the Trash.
-
Star or Unstar this folder.
It's simple, I will provide you a script and blocks and you will copy the script into your Google Apps Script project, but with a twist. We will also edit the manifest of this App Script project. You probably haven't experienced this, but fear not, I will explain and it will be easy as pie.
*You will need a Google account that can at least view the target folder.
Step 1. Setting Up Apps Script.
As usual, create a new Apps Script project. If you haven't, then open Drive, click on the "New" button, hover over "More" and click on Google Apps Script. That creates us a new Apps Script project.
Give it a name by clicking on the title if necessary so we can find it later. Next, copy this script and replace the code already in your project with this new script.
function doPost(e) {
var action = e.parameter.action;
var id = e.parameter.fileId;
var file = DriveApp.getFolderById(id);
if (action == "renameFolder"){
var newFolderName = e.parameter.newName;
file.setName(newFolderName);
return ContentService.createTextOutput("File Name Successfully Changed.");
} else if (action == "checkAccess") {
var address = e.parameter.email;
var permission = file.getAccess(address);
if (permission == DriveApp.Permission.VIEW) {
return ContentService.createTextOutput("You can only view this folder.");
} else if (permission == DriveApp.Permission.COMMENT) {
return ContentService.createTextOutput("You can only comment or view this folder.");
} else if (permission == DriveApp.Permission.EDIT) {
return ContentService.createTextOutput("You can view, edit or comment this folder.");
} else if (permission == DriveApp.Permission.OWNER) {
return ContentService.createTextOutput("You are the owner of this folder.");
} else if (permission == DriveApp.Permission.ORGANIZER) {
return ContentService.createTextOutput("You are the organizer of this folder, and can organize files inside this folder.");
} else if (permission == DriveApp.Permission.FILE_ORGANIZER) {
return ContentService.createTextOutput("You are the file organizer of this folder, and can edit, trash, and move content within a shared drive.");
} else {
return ContentService.createTextOutput("You do not have any permissions.");
}
} else if (action == "getOwner") {
var owner = file.getOwner();
var ownerEmail = owner.getEmail();
var ownerName = owner.getName();
var output = ownerEmail + "," + ownerName;
return ContentService.createTextOutput(output);
} else if (action == "isStarred") {
var star = file.isStarred().toString();
return ContentService.createTextOutput(star);
} else if (action == "isTrashed") {
var trash = file.isTrashed().toString();
return ContentService.createTextOutput(trash);
} else if (action == "newFolder") {
var name = e.parameter.folderName;
file.createFolder(name);
return ContentService.createTextOutput("Folder created.");
} else if (action == "addEditor") {
var address = e.parameter.email;
file.addEditor(address);
return ContentService.createTextOutput("Editor added.");
} else if (action == "addViewer") {
var address = e.parameter.email;
file.addViewer(address);
return ContentService.createTextOutput("Viewer added.");
} else if (action == "getDateCreated") {
var date = file.getDateCreated();
var milliseconds = date.getTime().toString();
return ContentService.createTextOutput(milliseconds);
} else if (action == "getLastUpdated") {
var date = file.getLastUpdated();
var milliseconds = date.getTime().toString();
return ContentService.createTextOutput(milliseconds);
} else if (action == "move") {
var destinationId = e.parameter.destinationFolderId;
var destinationFolder = DriveApp.getFolderById(destinationId);
file.moveTo(destinationFolder);
return ContentService.createTextOutput("Moved to destination.");
} else if (action == "getDescription") {
var description = file.getDescription();
return ContentService.createTextOutput(description);
} else if (action == "editDescription") {
var description = e.parameter.newDescription;
file.setDescription(description);
return ContentService.createTextOutput("Edited description");
} else if (action == "moveToTrash"){
file.setTrashed(true);
return ContentService.createTextOutput("Moved to your trash.");
} else if (action == "restoreFromTrash") {
file.setTrashed(false);
return ContentService.createTextOutput("Restored from your trash.");
} else if (action == "star"){
file.setStarred(true);
return ContentService.createTextOutput("Starred this folder.");
} else if (action == "unstar") {
file.setStarred(false);
return ContentService.createTextOutput("Unstarred this folder.");
} else if (action == "removeEditor") {
var address = e.parameter.email;
file.removeEditor(address);
return ContentService.createTextOutput("Removed the editor with the address " + address + ".");
} else if (action == "removeViewer") {
var address = e.parameter.email;
file.removeViewer(address);
return ContentService.createTextOutput("Removed the viewer with the address " + address + ".");
}
}
Done. Now, click on this little disk to save your script.
Good. Now, click on the wheel (settings) icon on the left navigation bar.
You will be redirected to the settings of this project. Enable "Show 'appsscript.json' manifest file in editor".
Go back to the editor by clicking on the code icon on the left panel.
On the left control menu back in the script editor, you will see "appsscript.json" showing on top of "Code.gs". Code.gs
is the Google Apps Script script that we code with normally, while appsscript.json
is the manifest file of this apps script.
Android apps have an AndroidManifest.xml
to define elements of this Android app, as you already know. This JSON file is the equivalent. Click on it.
You will see code in the manifest editor. Yours might be different, but mine is this.
{
"timeZone": "Asia/Hong_Kong",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
According to the official Google documentation,
Scripts that use this method require authorization with one or more of the following scopes:
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.readonly
If you are an editor or the owner of the folder, use the first link. The first link includes read and write permission. Else, use the second link. It only includes read permission.
We will have to add an element in this manifest file that will tell Google what OAuth Scopes (or if you do not understand, permissions) we will use. So, we will add another element in the manifest.
"oauthScopes": [
"https://www.googleapis.com/auth/drive"
]
Replace this link if you do not need to edit the folder.
For me, the whole manifest would become:
{
"timeZone": "Asia/Hong_Kong",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/drive"
]
}
Click on that Save button again in the manifest editor. Now, the web app is ready to be deployed! To deploy the script, click on , select "New deployment", click on the icon in the popup, and select "Web app".
Make sure you are executing as you and anyone has access to this script. Then click Deploy.
If it asks you to authorize access, click here.
The web app might ask you to authorize access. If so, click on , then a new popup would show up for you to log in to.
Click on your account in the popup.
It will show that "Google hasn't verified this app". Don't worry, this script is totally safe. Click on Advanced
and
and
and the popup would close. Back in Apps Script, after it finished
, it would show the deployment ID and the deployment URL. We only need the URL, so click on for the URL and head back to App Inventor.
If it doesn't, click here.
In Apps Script, after it finished
, it would show the deployment ID and the deployment URL. We only need the URL, so click on for the URL and head back to App Inventor.
Step 2. Programming Blocks In App Inventor.
Modify these blocks and check which parts you need and which parts you don't. This is only a demo app.
(click image to expand)
There are two things you definitely need to change:
-
the variable
appsScriptUrl
: replace it with the apps script URL that you have just deployed. -
the variable
folderId
: replace it with the folder ID of your Drive folder. To get it, open the folder in Drive, and copy the text after the URLhttps://drive.google.com/drive/folders/
. For example, if the URL to your folder ishttps://drive.google.com/drive/folders/1A7zfTHkNvm46wTuVElVWqU_IrLH0Fl5
(link modified), the folder ID would be1A7zfTHkNvm46wTuVElVWqU_IrLH0Fl5
.
Downloads
AIA: GoogleDrive.aia (13.3 KB)
Tests
Tested on Android 11 on Xiaomi 11 Lite.
Some Notes
-
Editors can only change permissions (add/remove editors or viewers) if the owner has enabled
Editors can change permissions and share
in the "Share folder" dialog. -
Only editors or the owner can edit and write to the folder.
-
Only suggestors, editors, viewers or the owner can read the folder.
-
Removing viewers or editors doesn't block users from accessing the
Folder
if they belong to a class of users who have general accessโfor example, if theFolder
is shared with the user's entire domain, or if theFolder
is in a shared drive that the user can access. -
If you use the
RemoveViewer
function to an editor, it will have zero effect.
Done.
If you liked this, please leave a like in this tutorial, I would genuinely appreciate it because I spent a lot of time and effort in this, thanks and done.