ChamomileGuides 3.0.4 Help

MDM 가이드(AOS)

기기 관리 시나리오

  1. 앱 실행 후, 앱 정보 api 호출

  2. 기기 관리 여부(requriedUpdates)가 false면 앱 실행 불가

  3. 기기 관리 여부(requriedUpdates)가 true면 기기 등록 api 호출

  4. 기기 등록에 실패하면 앱 실행 불가

  5. 기기 등록 후 서버와 통신시, 쿠키에 deviceID와 appID를 담아서 통신

앱 정보 API

  1. Api 설명
    osType과 appId를 파라미터로 입력하여, Response로 앱에 대한 정보(웹버전,앱버전,앱스토어 url, 필수다운로드 유무, 기기관리여부 등)를 반환하는 api다.

    file

  2. Api 호출
    아래와 같이 파라미터로 appId, osType을 파라미터로 입력하여 GET방식으로 api를 호출한다.

    [GET] https://chamomile.lotteinnovate.com/mobile-app-test/mobile/woong01/info?osType=aos
    file
  3. Native에서 호출
    retrofit2 라이브러리를 활용하여 api를 호출한다. 파라미터로 osType과 appId를 넣어준다. 해당 api를 호출하는 getVersionApi는 앱 버전체크 매서드와(checkAppVersion), 웹 버전 체크 매서드(checkWebVersion)에서 사용된다. response의 code가 200일 경우에만, response의 데이터를 받고, 그 외엔 예외처리한다.

    file
    file

기기 등록 API

  1. Api 설명
    appId, deviceId, osType, deviceType 등 기기 정보를 입력하여, Response로 기기등록 유무를 반환하는 api다.

    file

  2. Api 호출
    아래와 같이 파라미터에는 appId, body에는 deviceId, deviceName, osType, osVer, deviceType을 파라미터로 입력하여 POST방식으로 api를 호출한다.

    [POST] https://chamomile.lotteinnovate.com/mobile-app-test/mobile/woong01/device body { "deviceId": "xxxxxxxxxxxxx", "deviceName": "웅웅", "osType": "aos", "osVer": "14", "deviceType": "smartphone" }
    file
  3. Native에서 호출
    retrofit2 라이브러리를 활용하여 api를 호출한다. 파라미터로 appId와 body에 DeviceApiRequest를 넣어준다. 해당 api를 호출하는 registerDeviceApi는 response의 code가 200일 경우에만, 기기등록 성공으로 간주하고 앱을 계속 실행하고, 그 외엔 예외처리한다.

    file
    file
    file

기기 관리 API

  1. Api 설명
    기기 등록 후, 서버와 통신할때 deviceId, appId를 입력하여, Response로 기기가 관리되고 있는지 유무를 반환하는 api다.

    file

  2. Api 호출
    아래와 같이 헤더에 deviceId, appId를 입력하여, GET방식으로 api를 호출한다.

    [GET] https://chamomile.lotteinnovate.com/mobile-app-test/test/device Headers { "deviceId": "xxxxxxxxxxxxx", "appId": "woong01" }
    file
  3. Native에서 호출
    retrofit2 라이브러리를 활용하여 api를 호출한다. 파라미터로 appId와 body에 DeviceApiRequest를 넣어준다. 해당 api를 호출하는 checkDeviceApi는 response의 code가 200일 경우에만 기기등록 성공으로 간주하고 앱을 계속 실행하고, 그 외엔 예외처리한다.

    file
    file

쿠키를 이용한 통신

  1. 앱 실행 후, 쿠키 초기화

  2. url에 deviceId, appId를 쿠키로 설정

  3. 쿠키에 담긴 deviceId와 appId 값을 추출

  4. 기기 관리 api인 checkDeviceApi 매서드 호출

  5. 기기 관리 여부에 따라, 앱 계속 실행 여부 결정

  6. 아래 샘플코드 확인 (testCookie 매서드)

/** 캐시,쿠키 초기화 및 설정 */ private fun setCookieCache(){ lifecycleScope.launch { VersionCheckModule.clearWeb(flexWebView) // 캐시 & 쿠키 초기화 (Test_Scenario) // 쿠키 매니저 생성 및 셋팅 val setThirdPartyCookies = true // 서드파티쿠키 설정 유무 VersionCheckModule.setCookieMode(flexWebView, setThirdPartyCookies) // 쿠키 테스트 (Test_Scenario)VersionCheckModule.testCookie() // 캐시 모드 설정 // LOAD_CACHE_ONLY - 캐시만 사용하여 페이지를 로드 // LOAD_CACHE_ELSE_NETWORK - 캐시로 먼저 로드하고 나머지를 네트워크로 로드 // LOAD_DEFAULT - 캐시를 사용하지만, 서버에서 갱신된 내용이 있다면 불러옴 // LOAD_NO_CACHE - 항상 네트워크만 사용하여 페이지를 로드 val cacheMode = "LOAD_CACHE_ELSE_NETWORK" VersionCheckModule.setCacheMode(flexWebView, cacheMode) // 브라우저 캐시 허용 } } /** 쿠키 테스트 */ suspend fun testCookie() { // 캐시 초기화 후 일정시간 경과후 쿠키 셋팅 delay(1000) setCookie(App.INSTANCE.getString(R.string.url), "deviceId", Utils.deviceId) // deviceId 쿠키 설정 setCookie(App.INSTANCE.getString(R.string.url), "appId", App.INSTANCE.getString(R.string.app_id)) // appId 쿠키 설정 val cookies = getCookie(App.INSTANCE.getString(R.string.url)) // 현재 웹뷰의 쿠키 확인 Log.d(COOKIE_CHECK_TAG,"testCookie(1) / ${App.INSTANCE.getString(R.string.url)}: $cookies") if (hasCookies()){ // 쿠키에서 deviceId와 appId 추출 val deviceId = extractCookieValue(cookies, "deviceId") val appId = extractCookieValue(cookies, "appId") Log.d(COOKIE_CHECK_TAG,"testCookie(2) / deviceId : $deviceId, appId : $appId") if (deviceId != null && appId != null) { checkDeviceApi(deviceId, appId) // 쿠키를 헤더에 넣어서 api 통신 } else { Log.e(COOKIE_CHECK_TAG, "deviceId, appId가 null입니다.") } } }

file
file

캐모마일 홈페이지에 deviceId와 AppId를 쿠키에 넣어 API를 호출한 예시이다.

file

Last modified: 21 4월 2025