[SDK] 코딩 테스트(과제형)
애드브릭스 팀 소개
https://iga-dev.atlassian.net/wiki/spaces/IG/pages/475070493?moved=true
목표
지원 분야에 맞는 언어를 선택하여 아래 과제를 수행합니다.
- Android SDK, 연동문서를 제작하여 제출합니다.
- iOS SDK, 연동문서를 제작하여 제출합니다.
- Unity SDK, 연동문서를 제작하여 제출합니다.
- React SDK, 연동문서를 제작하여 제출합니다.
- Unreal SDK, 연동문서를 제작하여 제출합니다.
- Cocos-2dx SDK, 연동문서를 제작하여 제출합니다.
과제설명
- 간단한 로그 추적 서비스가 있습니다.
- 해당 서비스를 사용하기 위한 고객 A가 있습니다.
- 고객A 의 개발환경은 (android,ios,unity,react,unreal,cocos-2dx) 입니다.
- 고객A가 우리의 서비스를 사용하게 하기 위해 개발환경에 맞는 SDK를 제공해야 합니다.
- SDK를 만드는것이 입사과제의 최종 목표입니다.
SDK 스펙
SDK 스펙의 슈도 코드 입니다. (C# 문법으로 작성하였습니다.)
public class IGASDK { public static void init(string appkey) { ... } // SDK를 초기화 합니다. appkey가 필수적으로 필요합니다. public static void setUserProperty(Dictionary<string,object> keyvalue) { ... } // 사용자 속성을 입력합니다. public static void addEvent(string eventName, Dictionary<string,object> keyvalue) {...} // 이벤트를 입력합니다. }
SDK를 사용하는 고객의 슈도코드 입니다. ( C# 문법으로 작성하였습니다. )
IGASDK.init("appkey1"); IGASDK.setUserProfile( new Dictionary<string,object>(){ {"birthyear",1982 }, {"gender","m" }, {"level",37 }, {"character_class","knight" }, {"gold",300 } } ); IGASDK.addEvent("openMenu", new Dictionary<string,object>(){ {"menu_name","menu1" }, {"menu_id",30 } } ); IGASDK.addEvent("levelup",null);
웹서비스 API
- AddEvent : 사용자의 앱내 이벤트를 저장합니다.
- GetEventLog : 저장한 이벤트를 조회 합니다. (개발단계에서 안전하게 저장되었는지 확인용으로 사용합니다.)
키 정의
- appkey : 면접자의 개인 email 주소를 사용합니다.
웹서비스 스펙
- Domain: adbrix-sdk-assignment-backend-115895936.ap-northeast-1.elb.amazonaws.com
- Protocol: HTTP
- AddEvent
- url : /api/AddEvent
- method : post
- Content-Type : application/json
Request Sample :
POST /api/AddEvent Host: assignment.ad-brix.com Content-Type: application/json { "evt": { //고객이 입력한 이벤트 "created_at": "20151106094112", //이벤트의 시간을 yyyyMMddHHmmss 형태의 문자열로 변환 "event": "open_menu", //고객이 입력한 이벤트명 "location": { //optional (위치 추적을 할 수 없다면 null) "lat": 37.7673973149, //위도 "lng": -122.4293583478 //경도 }, "param": //고객이 입력한 파라미터 key:value 페어로 이루어져있다. { "menu_name" : "menu1", "menu_id" : 30 }, "user_properties": { //고객이 입력한 프로퍼티 key:value 페어로 이루어져 있다. "birthyear": 1982, "gender": "m", "level": 37, "character_class": "knight", "gold": 300 } }, "common": { //공통 속성 "identity": { "adid": "a5f21bc1-4a1d-48e0-8829-6dee007da8c7", //디바이스의 광고아이디 (구글 : advertising id, 애플 : idfa ) "adid_opt_out": false //광고 아이디 추적기능 활성화 여부 }, "device_info": { "os": "4.4.4", //os 버전 "model": "zerry_hp", //기기 모델 "resolution": "1080x1920", //현재 해상도 "is_portrait": false, //가로 인가? 세로 인가? "platform": "android", //플랫폼 "network": "wifi", //현재 네트워크 상태 "carrier": "VODAFONE+TR", //통신사 "language": "ko", //기기에 설정된 언어 "country": "kr" //기기에 설정된 국가 }, "package_name": "com.zerry_app", // 패키지 이름 "appkey": "appkey(개인이메일주소)" // 앱 키 } }
Response
200 content-type: application/json { "result" : true, //성공시 true, 실패시 false "message" : "ok" //메시지 }
- GetEvent
- url : /api/GetEvent
- method : post
- Content-Type : application/json
Request Sample
POST /api/GetEvent Host: assignment.ad-brix.com Content-Type: application/json { "appkey" : "appkey(개인이메일주소)", "length" : 50 }
Response
200 content-type: application/json { "result" : true, //성공시 true, 실패시 false "message" : "ok", //메시지 "data" : // 입력한 event 로그 목록 [ {...}, {...} ] }
결과물
- 소스 코드 (github)
- SDK 파일 (ios, android) - AOS의 경우 jar 혹은 aar중 원하는 것으로 제출, iOS의 경우 frameworks파일을 cocoapod(https://cocoapods.org)에 등록 후 제출
샘플 어플리케이션 (ios, android) - AOS의 경우 apk파일을 체출, iOS의 경우 개발자 계정이 있다면 아래에 명시된 udid 등록하여 ipa를 제출, 계정이 없을 경우 만든 iOS 프로젝트 전체를 제출.
Device udid IGAWORKS i-Pod Touch 5 e18219fcd6561c79b4218a636484b798aa4390ae 2IGAWORKS i-Phone 6 2118b638dfbeb7c720328f7f844cb0b2ccf75dc2 3IGAWORKS i-Phone 4 4775b58641a16c62f043555b2e77cf379d3f0959 4IGAWORKS i-Pad 2 798403e1954e342cad1d2d3abffb15c5ff0f4e90 - 연동 가이드 문서 (ios, android).
참고 사이트
아래 사이트를 참고해서 결과물을 만들어 제출하시면 좋습니다.
- [adbrix android 연동가이드] https://help.adbrix.io/hc/ko/articles/360003279994
- [adbrix ios 연동가이드] https://help.adbrix.io/hc/ko/articles/360003068234
- [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/