New Bug Encountered: Images not syncing

We have an inspection app. Each row on inspection tabel have 4 photos collumns (2 of them required).

We fill the inspection form, take the photos (see below), but when it syncs, SOMETIMES the photos just doesnt sync. The image path doesnt sync into the collumn (see audit log below) and the image doesn’t upload to the cloud (Google Drive).

The photo goes to the device’s gallery.

What is bugging me is that it happens for some photos (like 40%), not all of them. Its happening with at least 2 different devices and I haven’t found any pattern on it.

Hi @hcquadros! Thank you for bringing this to our attention. We’ll have someone follow up when we have a bit more information for you.

1 Like

Hi @hcquadros,
Can you please let me know which users are facing this issue (Either here or email support@appsheet.com), as well as your app’s name?
Are they all using Android device?

1 Like

I have the same problem and I think it is because sync/offline behavior…I was using a full offline behavior without automatics syncs or wifi/lte use…had saved all my data and images and later…maybe 6 hours later, I was in my house or in my job with good internet connection and press sync…all data is ok but images are not sent to my s3 file storage and my SQL database have empty strings “” in url column…today I have changed the sync/behavior to don’t need to press sync and send a little portion of data automatically…the app is better than before!

Hello!

Apps owner: 1016406

Apps: Lifting Gear Inspection and Controle documentos

Users:
hugo.quadros@aquaload.com.br
and levi.ventura@aquaload.com.br

Yes, all of them using Android devices.

Thanks for the details @hcquadros, @jader_james,
Seems like the issue might happen when trying to sync an image in an app that wasn’t synced recently.
This is most likely to affect apps without sync on start or offline apps.
We’re working on a fix and will let you know as soon as it’s ready.

2 Likes

Ok following

Hi @hcquadros @jader_james,
We’ve just release update 13.6 to the Android app with the fix for this issue. This update is in a rollout, so it might take a few days until it’s visible to everyone.
Please let me know if you’re still seeing any issues with the new version.

1 Like

the problem continues, maybe in a little scale, but some of the images is not syncing

Hi @jader_james, Could you please provide me with some more details?
In particular:

  • Which platform are you trying to upload the images from (Android, iOS or browser)?
  • Is the image column marked as required? Or is it possible the user just left it empty?
  • Could you point me to a specific log in the app’s audit log where the image value is empty although you know that an image was added to the form?

Hello, @Gil!

  • Android devices
  • Happens on required fields
  • See below the app form with images on the required fields, and afterwards the log detail indicating the empty field (""). The image also doesn’t upload to the data source (Google Drive). Currently, we are retrieving it from the device’s gallery.


Hi @hcquadros,
We think we finally found the cause of this issue and have a fix on the way. Would you mind if I take a look in your audit logs to verify we are talking about the same issue?
To enable me to do that can you please go to https://www.appsheet.com/account/account#_tab_acctConfig and set the “Allow AppSheet staff to access my apps for support and maintenance?” checkbox?
Also, I’ll need you to point me to a recent audit log that is missing the image. If you can provide me the app name and timestamp of the log that would be very helpful.

Hello @Gil,

It has not happened recently. I’ll keep monitoring. But we’ve noticed a different kind of photo related issue.

The image (jpg file) is uploaded to the data source (Google Drive), the correct file address and name is added to the row (Google Sheets), but the image doesn’t show on the app, it just shows an exclamation.

Note: In the initial issue, the photo doesnt sync to the data source or sheet. This one differs ont that.

Is it possible to be server caching issue?

App names, image and log below for the photo issue. I’ve also checked the “Allow AppSheet staff […]” checkbox.

App name 1: AnchorPointInspectionApp-703578
App name 2: LiftingGearInspection-702918

Properties:
{
“TableName”: “Inspecoes”,
“apiLevel”: “2”,
“appStartTime”: “2020-03-17T13:54:47.666Z”,
“appTemplateVersion”: “1.000209”,
“build”: “1652bc386c40300ff27e-1584384632775-7b47d53ea4”,
“checkCache”: “true”,
“clientId”: “7d29c399-a318-4b23-a3b5-682095e2f95f”,
“dataStamp”: “2020-03-17T15:47:49.156Z”,
“isPreview”: “false”,
“lastSyncTime”: “2020-03-17T11:10:47.5508951Z”,
“localVersion”: “1.000209”,
“locale”: “pt-BR”,
“mechanism”: “Form”,
“requestId”: “46907764”,
“requestStartTime”: “2020-03-17T17:07:30.407Z”,
“timestamp”: “2020-03-17T13:38:51.518Z”,
“tzOffset”: “180”,
“viewName”: “Inspecoes_Form”,
“RowSize”: 480,
“AppTemplateName”: “5fcb0032-5656-48b4-bee7-7ac9aedd9865”,
“Operation”: “Add row”,
“RecordType”: “Stop”,
“ReturnedFromCache”: false,
“Performance”: “{“Version”:1,“Time”:“00:00:30.6726386”,“PerformanceTimingRoot”:{“Mid”:1,“Params”:{“ParamList”:[{“Pid”:13,“Value”:“Inspecoes”}]},“Timer”:{“Time”:“00:00:30.6726386”},“Children”:[{“Mid”:3,“Timer”:{“Time”:“00:00:30.6672110”},“Children”:[{“Mid”:100,“Timer”:{“Time”:“00:00:30.6653641”},“Children”:[{“Mid”:108,“Timer”:{“Time”:“00:00:30.6652984”},“Children”:[{“Mid”:101,“Timer”:{“Time”:“00:00:30.1756673”},“Children”:[{“Mid”:111,“Timer”:{“Time”:“00:00:28.4826025”},“Children”:[{“Mid”:224,“Params”:{“ParamList”:[{“Pid”:1,“Value”:“Foto_1”}]},“Timer”:{“Time”:“00:00:26.5119714”},“Children”:[{“Mid”:227,“Timer”:{“Time”:“00:00:00.2624810”}},{“Mid”:225,“Timer”:{“Time”:“00:00:02.1860068”},“Children”:},{“Mid”:226,“Timer”:{“Time”:“00:00:24.0632755”},“Children”:[{“Mid”:228,“Timer”:{“Time”:“00:00:22.6057261”},“Children”:[{“Mid”:97,“Params”:{“ParamList”:[{“Pid”:17,“Value”:“Fotos/SSA20-0205.3Rev.1/EST_III-13/EST_III-13 14 03-17-2020 10-37-44.Foto_1.170728.jpg”}]},“Timer”:{“Time”:“00:00:22.6056530”}}]},{“Mid”:268,“Timer”:{“Time”:“00:00:01.4574420”}}]}]},{“Mid”:224,“Params”:{“ParamList”:[{“Pid”:1,“Value”:“Foto_3”}]},“Timer”:{“Time”:“00:00:27.7608320”},“Children”:[{“Mid”:227,“Timer”:{“Time”:“00:00:00.2601058”}},{“Mid”:225,“Timer”:{“Time”:“00:00:02.1880496”},“Children”:[{“Mid”:32,“Params”:{“ParamList”:},“Timer”:{“Time”:“00:00:02.1877558”},“Children”:[{“Mid”:32,“Params”:{“ParamList”:[{“Pid”:13,“Value”:“Torres”}]},“Timer”:{“Time”:“00:00:02.1877192”},“Children”:[{“Mid”:241,“Timer”:{“Time”:“00:00:00.3995230”},“Children”:[{“Mid”:32,“Params”:{“ParamList”:},“Timer”:{“Time”:“00:00:00.3265602”},“Children”:[{“Mid”:32,“Params”:{“ParamList”:[{“Pid”:13,“Value”:“OS_READ”}]},“Timer”:{“Time”:“00:00:00.3265309”},“Children”:[{“Mid”:33,“Params”:{“ParamList”:[{“Pid”:9,“Value”:“23”}]},“Timer”:{“Time”:“00:00:00.3262876”},“Children”:[{“Mid”:133,“Timer”:{“Time”:“00:00:00.3250658”},“Children”:[{“Mid”:95,“Timer”:{“Time”:“00:00:00.1735395”},“Children”:[{“Mid”:94,“Timer”:{“Time”:“00:00:00.1734614”}}]},{“Mid”:238,“Timer”:{“Time”:“00:00:00.1513365”},“Children”:[{“Mid”:240,“Timer”:{“Time”:“00:00:00.1504072”}}]}]}]}]}]},{“Mid”:32,“Params”:{“ParamList”:},“Timer”:{“Time”:“00:00:00.0644560”},“Children”:[{“Mid”:32,“Params”:{“ParamList”:[{“Pid”:13,“Value”:“Logs”}]},“Timer”:{“Time”:“00:00:00.0644214”},“Children”:[{“Mid”:33,“Params”:{“ParamList”:[{“Pid”:9,“Value”:“291”}]},“Timer”:{“Time”:“00:00:00.0641446”},“Children”:[{“Mid”:30,“Params”:{“ParamList”:[{“Pid”:12,“Value”:“Present”},{“Pid”:11,“Value”:“AnchorPointInspectionApp-703578:1.000209:LogsDocId=1yw_L5xnJLZgsXF-qD-dReMSlshkwovwXI-FD2BxAE5cLogs-1016406”}]},“Timer”:{“Time”:“00:00:00.0620790”}}]}]}]}]},{“Mid”:33,“Params”:{“ParamList”:[{“Pid”:9,“Value”:“74”}]},“Timer”:{“Time”:“00:00:01.7879038”},“Children”:[{“Mid”:133,“Timer”:{“Time”:“00:00:01.0876462”},“Children”:[{“Mid”:95,“Timer”:{“Time”:“00:00:00.7701871”},“Children”:[{“Mid”:94,“Timer”:{“Time”:“00:00:00.7701018”}}]},{“Mid”:238,“Timer”:{“Time”:“00:00:00.3173149”},“Children”:[{“Mid”:240,“Timer”:{“Time”:“00:00:00.3164228”}}]}]},{“Mid”:35,“Timer”:{“Time”:“00:00:00.6984636”},“Children”:[{“Mid”:22,“Timer”:{“Time”:“00:00:00.6984066”},“Children”:[{“Mid”:32,“Params”:{“ParamList”:},“Timer”:{“Time”:“00:00:00.6976409”},“Children”:[{“Mid”:32,“Params”:{“ParamList”:[{“Pid”:13,“Value”:“Parques”}]},“Timer”:{“Time”:“00:00:00.6976098”},“Children”:[{“Mid”:33,“Params”:{“ParamList”:[{“Pid”:9,“Value”:“14”}]},“Timer”:{“Time”:“00:00:00.6973488”},“Children”:[{“Mid”:133,“Timer”:{“Time”:“00:00:00.6966652”},“Children”:[{“Mid”:95,“Timer”:{“Time”:“00:00:00.3243206”},“Children”:[{“Mid”:94,“Timer”:{“Time”:“00:00:00.3242389”}}]},{“Mid”:238,“Timer”:{“Time”:“00:00:00.3721754”},“Children”:[{“Mid”:240,“Timer”:{“Time”:“00:00:00.3719988”}}]}]}]}]}]}]}]}]}]}]}]},{“Mid”:226,“Timer”:{“Time”:“00:00:25.3122383”},“Children”:[{“Mid”:228,“Timer”:{“Time”:“00:00:24.0662706”},“Children”:[{“Mid”:97,“Params”:{“ParamList”:[{“Pid”:17,“Value”:“Fotos/SSA20-0205.3Rev.1/EST_III-13/EST_III-13 14 03-17-2020 10-37-44.Foto_3.170728.jpg”}]},“Timer”:{“Time”:“00:00:24.0661972”}}]},{“Mid”:268,“Timer”:{“Time”:“00:00:01.2458699”}}]}]},{“Mid”:224,“Params”:{“ParamList”:[{“Pid”:1,“Value”:“Foto_2”}]},“Timer”:{“Time”:“00:00:28.4821243”},“Children”:[{“Mid”:227,“Timer”:{“Time”:“00:00:00.2609071”}},{“Mid”:225,“Timer”:{“Time”:“00:00:02.1875237”},“Children”:},{“Mid”:226,“Timer”:{“Time”:“00:00:26.0334725”},“Children”:[{“Mid”:228,“Timer”:{“Time”:“00:00:24.0630189”},“Children”:[{“Mid”:97,“Params”:{“ParamList”:[{“Pid”:17,“Value”:“Fotos/SSA20-0205.3Rev.1/EST_III-13/EST_III-13 14 03-17-2020 10-37-44.Foto_2.170728.jpg”}]},“Timer”:{“Time”:“00:00:24.0629454”}}]},{“Mid”:268,“Timer”:{“Time”:“00:00:01.9703476”}}]}]}]},{“Mid”:21,“Timer”:{“Time”:“00:00:01.6910595”},“Children”:[{“Mid”:25,“Timer”:{“Time”:“00:00:00.0594042”}},{“Mid”:53,“Timer”:{“Time”:“00:00:01.5719409”},“Children”:[{“Mid”:95,“Timer”:{“Time”:“00:00:00.3481314”},“Children”:[{“Mid”:94,“Timer”:{“Time”:“00:00:00.3480388”}}]},{“Mid”:75,“Timer”:{“Time”:“00:00:01.2237091”},“Children”:[{“Mid”:71,“Timer”:{“Time”:“00:00:00.4921560”}},{“Mid”:74,“Timer”:{“Time”:“00:00:00.4032074”}},{“Mid”:93,“Timer”:{“Time”:“00:00:00.3279733”}}]}]},{“Mid”:34,“Timer”:{“Time”:“00:00:00.0594612”}}]}]}]}]}]}]},“IsEmpty”:false}”,
“Result”: “Success”
}

Hi @hcquadros,
A few questions:

  1. Which device are you using (Android, iOS or browser)?
  2. Does the image appear after the app syncs?
  3. If not, could you please point me to a specific row that shows this behavior?

Hi @Gil!

  1. Android
  2. No
  3. AnchorPointInspectionApp-703578, table Inspecoes, row 2306

I have edited it (getting the photo from Google Drive, and uploading it again), but the original row value is on the log above and the photo is still on the Data Source. The data matches.

What I’ve noticed just now is that it is duplicated on Google Drive. A jpg file with 0 KB (damaged file) and the functional one, both with exactly same name. I guess the app was fetching the damaged one and couldn’t open.

Perhaps a connectivity fluctuation during upload resulted in the damaged file?

Couldn’t find in Google drive settings a way to always replace files with same name.

Thanks @hcquadros,
That’s weird, not sure how is it possible to end up with 2 files with the same name. How often do you see image failures like that?
Is it always the case that you see see 2 files with one of them being 0 KB?
When this happens, does the sync shows any error to the user?

This doesn’t seem to be related to the phone’s connectivity. At the point the files is saved into your Drive, the image should have been already uploaded.

The symptom (the image not appearing the the app - just an exclamation) doesn’t happens frequently. I’d say that happens in like 1-2% of the rows. That’s the first time I’ve noticed it has 2 files. I’m not sure if that’s always the cause. I’ll keep checking.

Doesn’t appear any error message to the user. Usually we use the app completely offline and sync afterwards.

Do you use Delta Sync?

Yes. That might be causing this?

It has to do with bringing in backend info… I find that ANYTIME you are manually messing with images/folders/data, which is usually during dev, things get weird with that setting enabled… I leave it OFF during dev, and turn it on after the app is up and running out of beta… it’s an efficiency gain.