@objekt/capacitor-app-updater
Capacitor plugin to update the web contents of an app from a remote content server.
[Introduction] [Configuration] [Usage] [API Reference] [Contributors] [License]
Cross platform CapacitorJS plugin to update the web contents of an app from a remote content server.
The plugin exposes a single AppUpdater.sync(checksumURL, checkDelay=3600000)
function that takes a URL to your
hosted web server. The plugin expects a checksum.json
file to be accessible on the root of the web server.
When called, the plugin performs the following steps:
checksum.json
file from the web server.As the sync task may delay your app startup time, you may not want to run it everytime the user launches your app.
Instead you can specify an optional check delay time in milliseconds as second argument to the sync
function to
skip syncing if the job ran within the set delay time already. This defaults to 60 minutes.
Running sync
on non-native environments such as the web is simply ignored. For the web version of your Capaitor
app, a Service Worker (see
Workbox) should instead be used to cache your web app files locally.
npm install @objekt/capacitor-app-updater
This plugin will work without any configuration on Android and iOS in any Capacitor 3 project.
Call AppUpdater.sync
in your capacitor web app root, e.g. your index.js file as follows:
import { AppUpdater } from '@objekt/capacitor-app-updater';
import { SplashScreen } from '@capacitor/splash-screen';
(async () => {
// Check for app updates - only if the app has not been launched in the last 60 minutes.
const didUpdate = await AppUpdater.sync("https://your-web-server-url", 1000*60*60);
// Stop processing if there was an update, as the updated would have triggered a page reload.
if (didUpdate) {
return;
}
// Load the app shell.
await import('./modules/AppShell.js');
// Hide the native splash screen.
await SplashScreen.hide();
})();
Follow your normal build process (e.g. webpack, rollup, etc.) to generate a distribution bundle of your app that contains all of the HTML, CSS, JS, and assets that you would publish to your app content server.
Create a checksum.json
file in the build folder that contains a checksum for the build overall as well as each
individual file in the build. The checksums can be generated using any algorithm.
{
"id":"9d307fdcafb3f6f2fbcd47899df78652936cea00",
"timestamp":"2022-04-10T15:21:08.406Z",
"files":[
{
"path":"index.html",
"hash":"064c47308009992f133a44e368cf1dcfdaa9d85e"
},
{
"path":"app.39b812d9.js",
"hash":"1bd6e3344fbc3363b1faa00d1115378135aac5ce"
},
{
"path":"vendors.70682963.js",
"hash":"5b055ca612c8e6883decd76258261d85da3de644"
}
]
}
Full API documentation here.
This project follows the all-contributors specification. Contributions of any kind welcome! (emoji key)
jn42lm1 💻 📖 |
legehwahn 💻 👀 |
Generated using TypeDoc