License Structure
How Unveily licenses work
Overview
Unveily uses a dual license structure:
- Development License (Dev): For development/testing environments. No domain restrictions.
- Production License (Prod): For release builds only. Must be bound to a package name and app signature.
License Verification Flow
License verification is performed automatically when the app starts. Developers do not need to write any code.
App starts
↓
License auto-verified (handled inside SDK)
↓ Invalid → App exits
WebView allowed to runLicense verification requires a network connection. In offline environments, the last verification result is cached for a grace period.
License File Setup
Place the license.key file included in the downloaded SDK package into the app.
app/
└── src/
├── debug/
│ └── assets/
│ └── license.key ← Development license
└── release/
└── assets/
└── license.key ← Production licenseDownload the development/production licenses from the dashboard → License menu.
Activate Production License
The production license must be activated in the dashboard:
- Dashboard → App Settings
- Enter the package name (e.g.,
com.yourcompany.yourapp) - Enter the app signature hash (release keystore SHA-256)
- Click Activate Production License
Extract App Signature Hash
# Extract SHA-256 hash from keystore
keytool -list -v \
-keystore your-release-key.jks \
-alias your-aliasIf you use Google Play App Signing, Google re-signs the app. In this case, you must use the SHA-256 hash of the Google-issued signing certificate, not the hash from your keystore.
Play Console → App → App Integrity → App signing certificate SHA-256 fingerprint
Feature Control by Plan
Bridge features are automatically enabled/disabled based on the license plan.
| Plan | Included Features |
|---|---|
| Basic | QR, push, camera, GPS, deep links, offline, storage, Google/Apple login |
| Standard | Basic + biometric auth, side drawer, Kakao/Naver/Line login |
| Pro | Standard + in-app purchases, Meta login |
You can check which modules are currently enabled from JavaScript:
window.addEventListener("unveilyGlueReady", () => {
// Check whether a specific feature is enabled
if (window.unveilyBridge.modules.isEnabled("biometric")) {
showBiometricButton();
}
// Full list of enabled modules
const modules = window.unveilyBridge.modules.getEnabledModules();
console.log(modules); // ["qr", "biometric", "iap", ...]
});