[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 프로젝트 전체를 제출.

    Deviceudid
    IGAWORKS i-Pod Touch 5e18219fcd6561c79b4218a636484b798aa4390ae
    2IGAWORKS i-Phone 62118b638dfbeb7c720328f7f844cb0b2ccf75dc2
    3IGAWORKS i-Phone 44775b58641a16c62f043555b2e77cf379d3f0959
    4IGAWORKS i-Pad 2798403e1954e342cad1d2d3abffb15c5ff0f4e90
  • 연동 가이드 문서 (ios, android).

참고 사이트

아래 사이트를 참고해서 결과물을 만들어 제출하시면 좋습니다.