"Missing offline content" error message on phone device

I have this message "missing offline content" on the bottom of the Menu Tab, with more details follow: "This app can be used offline but some files are unavailable" above the user name.

This message has been around for several days but since I still can use the app and see updates from other users so I've been ignoring it. 

However Im trying to find way to fix it now. Reinstalling the app or bring it back to "Recovery Mode" and try to sync does not help at all. 

Anyone has any idea how to deal with this? 

Much thanks! 

Solved Solved
0 8 2,172
1 ACCEPTED SOLUTION

Update: I contact Support Chat and got the advice to un-check the offline usage. That solves the error message for now. 

View solution in original post

8 REPLIES 8

Hello
Check your drive, you will see a .txt file, there you will see the information in question

Hi 

I saw a file called "empty.txt" and it's a 0 byte file...

What am I supposed to find? 

 

Something like this

LeviP_0-1685455233939.pngLeviP_1-1685455304248.png

 

I think my problem is similar to JpChapron's post yesterday, I only have the file call "empty.txt" and it's totally empty inside :((((

Update: I contact Support Chat and got the advice to un-check the offline usage. That solves the error message for now. 

Do we know when then to use the function of Store content for Offline use?  I as well had the problem across multiple devices and the change worked.  But now to understand what use case for Offline Use.

 

I was unable to find an easy solution, so I worked 2 hours trying to find loose URL connections... here are the steps I took to fix up my missing files notice message:

Find the columns that have image paths (can use Data tab in Appsheet to find an Image type column or find paths in your Excel sheets etc.)

Once I found the image columns, I then went to the path of where I stored the images (which is in Google Drive)

I used this function script in Google Excel (Extensions > Apps Script) to get a list of all the images in that folder in Google Drive (need to share the folder first)

function listFilesInFolder() {
  var folderId = "xxxxxxxxxxxxxxxxxxxx"; // Replace with your folder ID
  var folder = DriveApp.getFolderById(folderId);
  var files = folder.getFiles();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Clear the sheet and set headers
  sheet.clear();
  sheet.appendRow(["File Name", "File URL"]);

  // Loop through files in the folder
  while (files.hasNext()) {
    var file = files.next();
    sheet.appendRow([file.getName(), file.getUrl()]);
  }
}
 
Once I was able to get that list, I then need to just get the file names from my Excel database by using =REGEXEXTRACT(A1, "[^/]+$") if you have folder_name/file.jpg and it will return file.jpg which I will use to compare the list I used in the function to the list I created with regexextract.
 
I found the ones that were missing, either removed the file path from my database or find the file somewhere else.
 
Very tedious but I finally see a lovely message saying "Offline Ready".... Oh I can sleep at last!!

Hey, I used this another script, I guess much more practical:

/**
* This function checks the existence of images in Google Drive based on paths
* stored in a Google Sheet.
*/
function checkImageExistence() {
// ID of the Google Sheet containing image paths
const spreadsheetId = 'YOUR_SPREADSHEET_ID'; // Replace with your actual spreadsheet ID
// ID of the Google Drive folder containing the images
const folderId = 'YOUR_FOLDER_ID'; // Replace with your actual folder ID

// Get the Google Sheet
const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
// Get all sheets in the file
const sheets = spreadsheet.getSheets();

// Get the root Google Drive folder
const rootFolder = DriveApp.getFolderById(folderId);

// Create a new spreadsheet for the report
const newSpreadsheet = SpreadsheetApp.create('Image Existence Report');
const reportSheet = newSpreadsheet.getActiveSheet();

// Write headers to the report sheet
reportSheet.appendRow(['Image Path', 'Existence']);

// Iterate through all sheets and extract image paths
sheets.forEach(sheet => {
const data = sheet.getDataRange().getValues();
data.forEach(row => {
row.forEach(cell => {
const value = cell.toString().trim();
// Check if the cell contains an image path (ends with .jpg or .png)
if (value.toLowerCase().endsWith('.jpg') || value.toLowerCase().endsWith('.png')) {
// Check for the existence of the file in Google Drive (including subfolders)
const exists = checkFileInSubfolders(rootFolder, value);
// Write the path and status to the report sheet
reportSheet.appendRow([value, exists ? 'Exists' : 'Does not exist']);
}
});
});
});
}

/**
* Checks if a file exists within a folder and its subfolders.
*
* @PARAM {Folder} folder - The folder to start the search from.
* @PARAM {string} filePath - The path to the file relative to the folder.
* @return {boolean} True if the file exists, false otherwise.
*/
function checkFileInSubfolders(folder, filePath) {
try {
// Split the path into parts (folders and filename)
const pathParts = filePath.split('/');
let currentFolder = folder;

// Iterate through the path parts (except the last one, which is the filename)
for (let i = 0; i < pathParts.length - 1; i++) {
const folderName = pathParts[i];
// Find the subfolder
currentFolder = currentFolder.getFoldersByName(folderName).next();
}

// Find the file in the last folder
currentFolder.getFilesByName(pathParts[pathParts.length - 1]).next();
return true; // File exists
} catch (e) {
return false; // File does not exist or folder not found
}
}