Skip to main content

시스템 요구사항

측위정보 수신 미지원 기기에서는 SDK 측위만 동작하지 않고 앱은 그대로 동작합니다.
단 initialize 는 키 · 통신 오류를, session.begin() 은 미지원 기기 오류를 던지므로 아래 예제처럼 try/catch(Java 는 onError)로 받아 주세요.

SDK 설치

1
settings.gradle(.kts) 에 Maven Central 저장소를 추가해 주세요.
settings.gradle.kts
2
앱 모듈의 빌드 파일에 OneS1ght SDK를 추가합니다.
3
JVM target 버전과 BuildConfig 옵션을 확인합니다. JVM 은 1.8 이상을 권장합니다.

Android 권한 설정

측위에 필요한 권한은 SDK 매니페스트가 앱에 자동으로 병합해 줍니다. 런타임 권한은 requestPermission(activity) 한 번으로 함께 요청합니다.
이미 허용된 권한이면 창 없이 바로 돌아오며, initialize 전에도 부를 수 있습니다.
사용자가 거부하거나 30초 안에 답하지 않으면 DENIED 입니다. 시스템이 권한 창을 더 이상 띄우지 않으면 설정 앱으로 안내하세요.

SDK 초기화

측위 엔진을 가동하기 위한 초기화 작업을 시작합니다.

프로필

사용자(계정 또는 기기) 한 명의 동선은 프로필 단위로 관리됩니다.
프로필 ID 는 고유하며, 분실하면 다시 찾을 수 없으니 보관에 주의해 주세요.

프로필 생성

새 프로필을 만들면 프로필 ID 를 돌려받습니다. 속성은 레포트 · 지표의 세그먼트로 쓰이며 Key-Value 에 제약이 없습니다.
발급받은 ID 는 앱(또는 고객사 서버)에 보관해 두고, 매 실행마다 측위 전에 identify 로 연결합니다.
프로필 속성에는 이름 · 전화번호 · 회원 ID 같은 민감한 정보를 넣지 마세요.
연령대("20s")처럼 식별되지 않는 값만 담습니다.

프로필 정보 조회

프로필 ID를 통해 저장된 개인화 속성을 조회합니다.

프로필 정보 수정

개인화 프로필 속성을 통째로 교체됩니다. 수정 후 기존 값은 삭제되며 되돌릴 수 없습니다.

프로필 삭제

개인화 프로필 속성을 삭제합니다. 삭제된 속성은 되돌릴 수 없습니다.

건물, 층 선택

측위좌표를 수신하려면 로케이터가 있는 건물과 층을 선택해야 합니다.

BLE 수신으로 선택

SDK 의 측위 엔진이 로케이터의 BLE 신호로 층을 찾으면 onFloorDetected 로 층 ID 가 옵니다.
층을 잃으면 null 이 옵니다.

수동으로 선택

사람이 층을 고르게 하거나 측위 전에 지도를 먼저 그릴 때는 건물과 층을 직접 지정합니다.

측위정보 실시간 수신

floorSession() 으로 측위 세션을 얻고, begin() 으로 시작해 end() 로 종료합니다.
위치는 onPosition 으로 받으며, 좌표(미터)는 엔진이 내는 속도 그대로 옵니다. 서버로는 콘솔 설정값(기본 초당 4회)으로 줄여 전송됩니다.
begin() 은 권한을 받은 뒤에 부르세요. 권한 없이 부르면 오류 없이 시작되지만 좌표가 나오지 않고 E2003 이 남습니다.
측위 중에 다시 부른 begin() 은 무시(WARN 로그)되므로, 사용자가 권한을 허용한 뒤에는 end() 를 부르고 begin() 을 다시 부르세요.

구역 이벤트

콘솔 공간 관리에서 그린 구역의 진입 · 이탈 · 체류 이벤트를 받습니다. 판정은 기기 안에서 이루어져 바로 옵니다.
구역에 걸린 시책(쿠폰 · 사이니지 등)은 서버가 매칭해 onTriggers 로 전달됩니다.

구역정보 업데이트

콘솔에서 구역 정보가 바뀔 때 onConfigChanged 가 호출됩니다. 연달아 오면 1초쯤 모아서 refreshZones() 를 한 번만 부릅니다.

도면 표시

로케이터와 관련된 도면과 사용자의 현재 위치를 표시할 수 있습니다.
도면 설정을 하지 않을 경우 배경은 격자로 표시됩니다.

기타 옵션

데이터 전송 제어

좌표는 300건이 채워지거나 전송 후 60초 경과 시 자동 전송됩니다. 단 앱이 강제 종료되면 좌표는 폐기됩니다.

세션 재설정

세션을 버리고 측위를 멈추며, 저장된 SDK 키와 건물 정보(setFloorMap 의 건물)를 지웁니다. 새 세션을 만들지 않습니다.
이후 대부분의 API 는 SdkError.NotInitialized(E1001)를 던지므로 initialize 를 다시 불러야 합니다. 런타임에 키를 바꿀 때 씁니다.
identify 로 연결한 프로필은 남습니다.

측위 종료 처리

측위 엔진이 종료된 경우 onStopped 이벤트가 실행되며 측위 가능 상태로 전환 가능합니다.

지원 기기 확인

deviceAvailability 는 네트워크(인터넷) 연결 없이 바로 확인할 수 있습니다.
단 기기 칩 조회에 앱 Context 가 필요해 initialize()(또는 requestPermission(activity)) 뒤에 읽어야 합니다.
그 전에 읽으면 Android 17 이상 기기도 DEVICE_NOT_SUPPORTED 가 오고 onDebugLog 에 WARN 이 남습니다(Android 17 미만은 항상 OS_VERSION_TOO_LOW).

부록

Java 에서 사용하기

모든 비동기 API 는 같은 이름으로 두 가지 형태를 제공합니다.
  • 반환값이 없는 API 는 Callback<Void> 를 씁니다.
  • 이벤트 콜백(ZoneListener · PositionListener 등)은 fun interface 라 Java 람다로 바로 등록합니다 — session.setOnZoneEnter(zone -> …).
  • 상태 값은 getter 로 읽습니다 — OneS1ght.isInitialized(), OneS1ght.getDeviceAvailability(), session.isRunning().
  • 콜백 속성은 setter 로 등록합니다 — session.setOnStopped(…), OneS1ght.setOnDebugLog(…).
  • Java 앱은 compileOptions 를 1.8 이상으로 두면 되고 Kotlin 설정이 필요 없습니다.

디버그 로그

디버그 로그 확인시 SDK 초기화문 선언(initialize) 직전에 등록해 주세요.
로그 확인은 Android Studio 상 Logcat(필터 tag:OneS1ght) 또는 adb 로 확인할 수 있어요.
adb 로 조회 시

문제 해결하기

에러 코드

개발 중 발생하는 오류 내용을 안내합니다.