[SDK] 코딩테스트 (과제형) Lite Version
애드브릭스 팀 소개
https://iga-dev.atlassian.net/wiki/spaces/IG/pages/475070493?moved=true
1. 목표
지원 분야에 맞는 모바일 플랫폼의 관련 언어(Java, Kotlin, Objective-C, Swift)를 선택하여 아래 과제를 수행합니다. (예_ 안드로이드 지원자는 안드로이드만 수행하면 되겠습니다.)
2. 과제설명
- 본 입사과제는 모바일 어플리케이션을 만드는 것이 아닌 "SDK 라이브러리"를 만드는 것입니다.
- SDK 라이브러리는 모바일 어플리케이션에 "탑재(import)" 되어 동작하는 외부 라이브러리입니다.
- 입사과제를 위해 제공되는 assignment.ad-brix.com/api/WriteEvent 서버 api와 통신을 해야 합니다.
- "5. 웹서비스" 항목의 JSON 내용을 생성하여 위 서버 API로 전송해야 합니다.(Http Request)
- 전송한 Http Request에 대하여 정상적인 Http Response를 수신하고 응답내용을 콘솔 로그로 출력해야 합니다.
- SDK 라이브러리는 각 플랫폼에 따른 일반적인 형태를 가져야 합니다.
- 안드로이드 : *.aar (혹은 *.jar)
- 아이폰 : *.framework
3. SDK 필수 API 스펙
1. SDK에는 아래와 같은 필수 API 함수가 포함되어 있어야 합니다. (아래 예시는 C# 문법으로 작성되었습니다. 각 언어에 알맞게 자유롭게 구성하셔도 되겠습니다.)
public class IGASDK { public static void WriteEvent(string eventName) {...} }
2. 위의 함수를 담은 SDK를 사용할 고객(애드브릭스 개발팀)은 아래와 같이 함수를 호출할 예정입니다. (아래 예시는 C# 문법으로 작성되었습니다. 각 언어에 알맞게 자유롭게 구성하셔도 되겠습니다.)
IGASDK.WriteEvent("levelup");
4. 웹서비스 API 함수
- WriteEvent : 사용자의 앱내 이벤트를 저장합니다.
5. 웹서비스 스펙
- 참고 : 아래 JSON 양식에 맞추어 값이 채워 1. 전송(Req)하고 2. 결과를 수신(Res)하는 2가지가 모두 완료되어야 합니다.
- API Domain: assignment.ad-brix.com/api/WriteEvent
- Protocol: HTTP
- AddEvent 호출 스펙
- method : POST
- Content-Type : application/json
Request JSON 예시 :
{ "evt": { //고객이 입력한 이벤트정보 "created_at": "20151106094112", //본 HTTP Request를 전송한 시각을 yyyyMMddHHmmss 형태의 문자열로 변환한 값 "event": "levelup" //고객이 입력한 이벤트명 }, "common": { "device_info": { //단말기 속성 "os": "4.4.4", //os 버전 "model": "zerry_hp", //기기 모델 "resolution": "1080x1920", //현재 해상도 (가로x세로 또는 세로x가로) "is_portrait": false, //가로 인가? 세로 인가? "platform": "android", //플랫폼 "network": "wifi", //현재 네트워크 상태 "carrier": "VODAFONE+TR", //통신사 "language": "ko", //기기에 설정된 언어 "country": "kr" //기기에 설정된 국가 }, "package_name": "com.myapp.packagename", // SDK가 탑재된 앱의 패키지 이름 "appkey": "account@domain.com" } }
- JSON 상세 설명
- evt : 고객(애드브릭스 개발팀)이 입력한 정보 (3.2에서 호출시 넘긴 정보)를 SDK에서 저장하고 이를 evt 이하에 "키,밸류" 형태로 넣어야 합니다.
- common - device_info : 고객(애드브릭스 개발팀)이 사용하는 앱에서 해당 라이브러리를 사용하면, 라이브러리는 해당 앱이 설치된 단말기 정보를 추출할 수 있습니다. 즉, common 이하 각 정보들은 SDK에서 직접 추출하여야 합니다.
- SDK가 동작하는 디바이스의 기본적인 정보를 전달합니다.
- android.os.Build 클래스 등에서 디바이스 정보를 얻을 수 있습니다.
- SDK가 동작하는 디바이스의 기본적인 정보를 전달합니다.
- package_name : SDK의 패키지 명이 아닌, SDK가 동작하는 어플리케이션의 패키지 명을 전달합니다.
- appkey : 지원자 본인의 개인 이메일 주소를 값으로 넣어야 합니다.
Response
서버 응답 코드 200 content-type: application/json { "result" : true, //성공시 true, 실패시 false "message" : "ok" //메시지 "raw": "{\n \"evt\": { \t\t\t\t\t\t\t\n\t\"created_at\": \"20180107014112\",\t\n \"event\": \"levelup\" \n },\n \"common\": { \t\t\t\t\t \n \"device_info\": {\t\t\t\t\n \t\"os\": \"4.4.4\", \n \t\"model\": \"zerry_hp\", \n \t\"resolution\": \"1080x1920\", \n \t\"is_portrait\": false, \n \t\"platform\": \"android\", \n \t\"network\": \"wifi\", \n \t\"carrier\": \"VODAFONE+TR\", \n \t\"language\": \"ko\", \n \t\"country\": \"kr\" \n },\n \"package_name\": \"com.myapp.packagename\", \n \"appkey\": \"account@domain.com\" \n }\n}" }
*. 위에서 Request로 전송한 JSON값을 역으로 확인하실 수 있도록 "raw"키 값에 전송하신 정보를 그대로 서버에서 리턴합니다.
결과물
- 소스 원본 코드 (github) : github 계정이 없으신 경우 회원가입을 하시어 소스 원본을 올려주시고, url 정보를 이메일로 제출
- SDK 파일 - AOS의 경우 jar 혹은 aar중 원하는 것으로 이메일에 첨부하여 제출, iOS의 경우 frameworks파일을 이메일에 첨부하여 제출
최종적으로 개발팀에서 체크하게될 과제의 주요 항목은 아래와 같습니다
- SDK 라이브러리 파일이 aar, jar 또는 .framework 파일인가?
- SDK 라이브러리 파일을 프로젝트에 설치하여 정상적으로 앱이 빌드되는가?
- WriteEvent 함수를 호출할 수 있는가?
- WriteEvent 함수를 호출시 JSON 내에 정보가 실제 SDK로 넘긴 정보 + 실제 앱이 설치된 단말기 정보로 이루어져 있는가? (하드코딩은 감점)
- WriteEvent 함수를 호출시 서버 응답코드가 200이며 정상 Response JSON를 수신하는가?
참고 사이트
아래 SDK 개발 사이트를 참고해서 결과물을 만들어 제출하시면 좋습니다.
직접 연동을 해보시면 과제에 대한 이해에 도움이 될 것입니다.
- [adbrix android 연동가이드] http://help.igaworks.com/hc/ko/3_3/Content/Article/adbrix_aos
- [adbrix ios 연동가이드] http://help.igaworks.com/hc/ko/3_3/Content/Article/adbrix_ios
- [tune android 연동가이드] https://developers.tune.com/sdk/android-quick-start/?lang=ko
- [tune ios 연동가이드] https://developers.tune.com/sdk/ios-quick-start/?lang=ko
- [branch 연동가이드] https://dev.branch.io/getting-started/sdk-integration-guide/guide/android/