Native Features

Snap native features into any web app.

Explore iOS and Android source examples through one contract — Odumee.call("module.method"). Check each feature’s setup before adding it to a native project.

Push Notifications
APNs + FCM with a single token & payload API
UserNotifications · APNs◆ Firebase Cloud Messaging
PRO
In-App Payments
StoreKit 2 & Play Billing behind one purchase() call
StoreKit 2◆ Play Billing Library 7
PRO
Apple Pay / Google Pay
Wallet sheets for physical goods via Stripe tokens
PassKit◆ Google Pay API
Biometric Auth
Face ID, Touch ID & fingerprint in one prompt
LocalAuthentication◆ BiometricPrompt
Secure Storage
Keychain & EncryptedSharedPreferences key/value
Security · Keychain◆ EncryptedSharedPreferences
Haptics
Impact, selection & notification feedback
UIFeedbackGenerator◆ VibrationEffect
Camera & Files
Photo capture, gallery and document picker
PhotosUI · UIDocumentPicker◆ ActivityResultContracts
Location
Precise and background location updates
CoreLocation◆ FusedLocationProvider
Native Share
System share sheet for text, links & files
UIActivityViewController◆ Intent.ACTION_SEND
Deep Links
Universal Links, App Links & custom schemes
Associated Domains◆ Intent filters · assetlinks.json
Offline Cache
Bundled fallback page & request cache
URLCache · WKWebsiteDataStore◆ WebViewAssetLoader
PRO
Health Data
Step totals from HealthKit and Health Connect
HealthKit◆ Health Connect
Battery Status
Read battery level and charging state on demand
UIDevice◆ BatteryManager
Clipboard
Copy text to the system clipboard
UIPasteboard◆ ClipboardManager
Device Info
Read platform and OS version without tracking identifiers
UIDevice◆ Build.VERSION
Open External Links
Open validated web links in the device browser
UIApplication◆ Intent.ACTION_VIEW
Push Notifications
Odumee.call("push.*")
requestPermission () => Promise<'granted'|'denied'>
getToken () => Promise<string>
onMessage (cb) => Unsubscribe
Device preview
9:41
Odumee•••

Notifications

Push Notifications
Available in your app
Odumee Would Like to Send You Notifications

Alerts, sounds, and badges can appear on your device.

Illustrative iOS system appearance. Real prompts require a device and platform setup. Not used in this project.

web/push.usage.js
1const status = await Odumee.call("push.requestPermission");
2if (status === "granted") {
3 const token = await Odumee.call("push.getToken");
4 await fetch("/api/devices", { method: "POST", body: JSON.stringify({ token }) });
5}
The standard

One SDK. Two platforms. Zero glue code.

The native shell injects a tiny SDK before your page loads. Every bridge returns a Promise, every event uses the same listener API, and your site still works in a normal browser by checking Odumee.isNative.

web/odumee.js
1// odumee.js — injected at document start by the native shell
2window.Odumee = {
3 isNative: true,
4 platform: navigator.userAgent.includes("OdumeeAndroid") ? "android" : "ios",
5 call(method, payload) {
6 if (window.webkit?.messageHandlers?.odumee)
7 return window.webkit.messageHandlers.odumee.postMessage({ method, payload });
8 return new Promise((resolve, reject) => {
9 const id = crypto.randomUUID();
10 window.__odumeeCb[id] = { resolve, reject };
11 window.OdumeeAndroid.call(id, method, JSON.stringify(payload ?? null));
12 });
13 },
14 on(event, cb) { (window.__odumeeEv[event] ??= []).push(cb); return () => {}; },
15};
16window.__odumeeCb = {}; window.__odumeeEv = {};