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) => UnsubscribeDevice 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") {3const token = await Odumee.call("push.getToken");4await 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 shell2window.Odumee = {3isNative: true,4platform: navigator.userAgent.includes("OdumeeAndroid") ? "android" : "ios",5call(method, payload) {6if (window.webkit?.messageHandlers?.odumee)7return window.webkit.messageHandlers.odumee.postMessage({ method, payload });8return new Promise((resolve, reject) => {9const id = crypto.randomUUID();10window.__odumeeCb[id] = { resolve, reject };11window.OdumeeAndroid.call(id, method, JSON.stringify(payload ?? null));12});13},14on(event, cb) { (window.__odumeeEv[event] ??= []).push(cb); return () => {}; },15};16window.__odumeeCb = {}; window.__odumeeEv = {};