본문으로 건너뛰기
Unveilydocs

라이선스 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_SIGNATUREHMAC 서명 검증에 실패했습니다

각 코드의 해결 방법은 에러 코드 문서에 정리돼 있습니다.

On this page