PWA on IOS and offline storage - ios

We looking to develop an "App" which would have the ability to record the details of a damaged car for assessors. The idea is that a small number of assessors would have company iPads. Then when car is damaged and returned to the car yard they can visit take photos, enter some details and then upload them into the main system later. Some of the car yards may be in areas that do not have internet coverage, so offline capability is required.
Our initial thoughts were to develop an IOS App for installation on a small number of company iPads. The App could access the camera to take photos and then when the device has internet access upload the photos to the main system. However this solution could prove too costly (regarding development costs) for the customer.
I have read about PWAs and caching data, but the caching seems to be for offline read access.
If we installed chrome on an iPad and then installed a PWA then presumably
The PWA could store pictures up to 128GB * 6% = 7.68GB?
If stored using the File System API then (as long as there is plenty
of space on the system) the data will be persisted (my understanding is there is no time limit)? Or would a different type of storage be more suitable.
The offline data is obviously important (may be required in court) so are there any other concerns around persistence & stability before the images are uploaded to the main system?
Note we would prefer to use iPads (as the customer would prefer these) but we could consider other platforms.
At this stage I am really trying to find out if a PWA accessing the offline storage is likely to be feasible, practical and stable on the platform?

Firstly, iOS restricts third party web browsers (or any app that displays web pages) to using its own engine - installing Chrome on an iPad will not enable access to any web APIs that iOS/Safari doesn't already support.
So in particular:
File System API is not available on iOS, even if you're using Chrome
Cache API has a storage limitation per website of 50MB
IndexedDB has a storage limitation per website of 500MB or half the device's free space (whichever is smaller)
PWAs and their cached data are automatically wiped from devices if not used for a few weeks
the "navigator.storage" API for requiring durable data is not support on iOS, even if you're using Chrome or Firefox.

My first thought would be that if you are only going to support iPads and indefinite offline storage is a requirement, you are probably best of with a native application. Keep in mind that for this kind of application you would need the Apple Enterprise Program, which is more expensive than the regular Developer Program.
However, if you do want to use a PWA, your best bet for local storage would be the IndexedDB. As per the comment by skybondsor, browsers do indeed limit and possibly evict data after a while, according to ADM webdocs.
But reading your question, I get the sense that you do not really need persistent local storage, but rather a method ensuring that your data will eventually end up on the server. You can accomplish this by exploiting the Background Sync methodology. This allows your application to delay the upload to when a stable internet connection is available.

Related

How much data can I store in IndexDB from a mobile phone using a PWA

I have a PWA designed in Ionic and we are using it to take pictures. However the requirements is that it needs to work offline so we are storing these pictures in IndexDB.
However I have been unable to track down how much storage we will have access to in IndexDB and am concerned it will only be around 50MB or so. The the customer potentially wants to store 100 images or more offline and when it gets back to wifi it will start sending up to a remote API.
Is there any information on storage capability for indexDB when a PWA is run on a mobile device either IOS or Android?
I have seen some posts that but mainly talk about storage of the javascript files where this is actual data captured while the app is running.
NOTE: Individual images will be no more than 2-3MB each in size.

Calculate cellular data usage per application

How to get data consumption of individual iOS application (i.e. if a device has 10 applications which consumes data, I want to know how much data each application consumes)
Short answer: you can't.
Long answer: all iOS applications are executed in a sandboxed environment, limiting the access that you have to data from another applications to avoid malicious behavior. The only way that you could obtain this information is if iOS had a public API that provided that information (it doesn't) or if the other applications published their information somewhere reachable from your application.

Is it possible to get a unique identifier for an ios device from a browser, in a controlled environment?

This is (a very simplified version of) the scenario with which I am faced:
I have an existing web application which manages jobs. We are now purchasing a number of ios devices (iphones and ipads) and I need the web application to know which specific device (regardless of the user) is updating information through the web application (as well as getting the GPS co-ordinates, but I think I have that covered with the geolocation API).
I have control of all the devices, they will all come to me before being distributed and will return to me periodically, so I can modify/restrict etc., but I can't jailbreak.
I have no experience of ios, but if there is a way to do this without needing an app, that would be the best choice.
You can use HTML5 storage to create and save a GUID the first time user accesses your website and send it with subsequent requests.

is localStorage on iPad Safari guaranteed to be persistent?

I've seen differences of opinion across the web on this. It has been said that starting with iOS 5.1, local data storage for HTML5 content on the iPad is no longer guaranteed to be persistent, however on Apple's current Safari developer pages (https://developer.apple.com/technologies/safari/html5.html), offline persistence is suggested to be guaranteed.
Does anyone have any recent experience with this subject and able to comment on how reliable the database features of HTML5 are with Safari on iPad?
This will probably be enough information:
The w3c spec of localStorage is:
The second storage mechanism (note: localStorage) is designed for storage that spans multiple windows, and lasts beyond the current session. In particular, Web applications may wish to store megabytes of user data, such as entire user-authored documents or a user's mailbox, on the client side for performance reasons.
And on the Apple page:
Safari supports the latest HTML5 offline data storage features. Your application can store its information on the local machine using either a simple key/value-based data store, or a robust SQL database. The data is stored locally and persists across launches of Safari so your application doesn’t need a network connection to access the data, improving startup time and overall performance.
And searching Google (and Yahoo! because of some anti-google freaks) gives me:
In iOS 5.1 Apple have moved the location of localStorage files into a Caches folder which is subject to occasional clean up, at the behest of the OS, typically if space is short. It is likely that Apple have done this to stop localStorage being backed up to iCloud.
localStorage not accessible in IOS-6 Safari
I am not able to access localStorage in Safari (IPad with IOS-6).
For example, the following code is working fine in Windows on all browsers and on (iPad with iOS-5) but not in iOS-6:
localStorage.setItem("var","5");
alert(localStorage.getItem("var"));
Answer:
I was able to fix the issue by turning off private browsing on the iPad. I came across the solution from the reference : https://github.com/cloudhead/less.js/issues/312#issuecomment-2994845
Yes, Apple cleans up localstorage when the device is low on storage space. (I actually tested this and confirm it with a certainty).

Stuck at making decision between native app or web app

I'm currently graduating at a small company which makes and sells accounting software.
My task during my graduation is to make a Mobile application which supports some functionality of this software.
For instance: making a report on site and uploading it to the server,logging hours worked, retrieving sales information etc..
I'm currently doing research on which platform I should deploy but I'm getting confused in what shape my application should be made.
I can't make a choice what I should recommend, Web app or Native app?
I need help making a recommendation:
Security is important. (we deal with confidential information)
Maintenance is very important. (they will have to support it in the future and have low resources available. (small company))
Development costs (I have no clue here.)
User experience (Because this is a business app, is a web app good enough?)
The business market here is currently very iOS (Apple) saturated (about 80%) but I do need to think of the future. (Android, WP7)
So What do u recommend with the given information, web or native? Do I need more information before making a decision / recommendation if so, what sort of information?
ps I think this question belongs on stackoverflow, if not please move it to the appropriate site.
For what you're looking to accomplish, I'd recommend taking the mobile web app route. Here's why:
Security is important. (we deal with confidential information)
You could make a case either way, but I feel that a mobile web app is better for security. Like Ganzolo said, it can have as much security as a typical web app. Also, since it doesn't store data on the device itself, you won't have to worry about a data breach in the event of a lost or stolen phone (assuming you're not using HTML5 offline storage).
Maintenance is very important. (they will have to support it in the future and have low resources available. (small company))
Mobile web apps have an advantage here. If you built native apps, you'd have to build and maintain separate apps for each platform. On the other hand, since one mobile web app reaches all platforms, you'd only ever have to maintain one app. Also, you won't have to update a mobile web app with each OS update, like you would with a native app. If you want to go one step further, you could even build a mobile web app with separate presentation layers for smartphones, tablet, and PCs (like this). That way, one mobile app would look different (yet native) on any device, but you'd only have to maintain one underlying application.
Development costs (I have no clue here.)
Depends on how many platforms you want to reach. If you're building for one platform, the costs are similar. If you're building for multiple platforms, mobile web apps are far cheaper. One mobile web app reaches all platforms, whereas you'd have to build a separate native app for each platform.
User experience (Because this is a business app, is a web app good enough?)
You'll get a better UI with a native app, but a mobile web app should be more than sufficient for most business apps. Use a good mobile framework (like jQuery Mobile), and you can build a mobile web app that looks and feels almost native.
The business market here is currently very iOS (Apple) saturated (about 80%) but I do need to think of the future. (Android, WP7)
Mobile web apps are a much safer choice for the future. Who knows what the mobile platform landscape will look like in 2 or 3 years? Maybe WP7 will be popular. Maybe some new OS will be popular. It changes so fast, there's no way to know. The only thing I do know is this: The web will still be popular. If you build a mobile web app, you insulate yourself from all future mobile OS battles.
I hope that helps.
My personal opinion would be to go for a web App :
• Security is important. (we deal with confidential information)
Sercurity in a web app cannot be worse than security in a regular website (like online banking)
• Maintenance is very important. (they will have to support it in the
future and have low resources available. (small company))
Maintenance is really easy for a web app since you can make updates without going through the process of submitting your app to the store and waiting.
• Development costs (I have no clue here.)
Development cost will be lower with a web app as you'll have 1 code for every phones (and most of them are using webkit which will be simplier)
• User experience (Because this is a business app, is a web app good
enough?)
It's hard to answer this question without knowing your project but for simple UI it can be good enough
• The business market here is currently very iOS (Apple) saturated
(about 80%) but I do need to think of the future. (Android, WP7)
Yes you need to think about the future that the most important because you can only do simple functionality in web apps. So if future requirement, will have more complex functionality then you'll have to move into native apps.
Hope I've been helpful
In my experience, web apps always tend to be sluggish on the UI front. I would always opt for a native app, if you don't have to support multiple platforms at once (iOS, Android, generic).
Security: Make your app connections over SSL
Maintenance: The only problem here is that you may have to wait 7 days for App Store approval for native apps
Development costs: Depends on who makes the app, shouldn't be too different.
UX: Defenitely native!
Multiplatform: As I said, for multi platform a web app is probably best
If you opt for a web app, make sure the user doesn't have the impression of "the app isn't doing anything" while loading stuff.

Resources