라이선스 API
앱이 대신 호출해 주는 라이선스 검증 API — 참고용 레퍼런스
이 API는 앱이 시작할 때 SDK가 알아서 호출합니다. 직접 부를 일은 거의 없고, "내부에서 무슨 일이 일어나는지" 궁금할 때 참고하는 문서입니다.
엔드포인트
Base URL: https://api.actuallyworks.net
POST /api/license/verify
앱 실행 시 라이선스를 검증합니다. (SDK가 자동 호출 — 직접 호출 불필요)
요청
{
"licenseKey": "string",
"packageName": "com.yourcompany.app",
"appSignatureHash": "SHA-256-hash",
"deviceId": "unique-device-id"
}응답 (성공)
{
"isValid": true,
"tier": "standard",
"licenseType": "production",
"expiresAt": "2027-01-01T00:00:00Z",
"features": ["qr_scan", "push_notifications", "camera_gallery", "gps_location", "biometric"]
}tier = 지금 사용 중인 플랜
tier는 지금 사용 중인 플랜입니다 — "basic" · "standard" · "pro" 중 하나. 문서 곳곳에서 말하는 "플랜"이 바로 이 값입니다.
응답 (실패)
{
"isValid": false,
"errorCode": "LICENSE_EXPIRED",
"message": "License has expired"
}features 필드 읽는 법
features는 이 라이선스로 열려 있는 기능 목록을 서버 쪽 식별자로 나열한 것입니다 (qr_scan, push_notifications 처럼 조금 긴 이름).
서버 이름과 앱 안에서 쓰는 이름은 다릅니다
이 features는 서버가 참고용으로 돌려주는 값입니다. 앱 안(JavaScript)에서 기능이 켜졌는지 확인할 때는 이 목록을 직접 파싱하지 마세요. 대신 다음을 쓰면 훨씬 간단합니다:
unveilyBridge.app.getInfo()→tier값으로 현재 플랜 확인unveilyBridge.modules.isEnabled("...")→ 모듈(예:sideDrawer,bottomTabs)이 켜졌는지 확인unveilyBridge.modules.getEnabledModules()→ 켜져 있는 모듈 목록
즉, 서버의 features는 "이 계약에 무엇이 포함되는가"를 나타내고, 실제 앱 화면에서의 활성 여부 판단은 위의 브릿지 호출에 맡기면 됩니다.
에러 코드
| 코드 | 무슨 뜻인가요 |
|---|---|
LICENSE_NOT_FOUND | 라이선스 키를 찾지 못했습니다 |
LICENSE_EXPIRED | 라이선스 기간이 만료됐습니다 |
LICENSE_INACTIVE | 아직 활성화되지 않았습니다 |
PACKAGE_MISMATCH | 패키지명이 등록 값과 다릅니다 |
SIGNATURE_MISMATCH | 앱 서명 해시가 등록 값과 다릅니다 |
INVALID_SIGNATURE | HMAC 서명 검증에 실패했습니다 |
각 코드의 해결 방법은 에러 코드 문서에 정리돼 있습니다.