SlideShare a Scribd company logo
1 of 47
Download to read offline
KT Android olleh마켓
    연동 가이드
      (V 1.8)




      2010. 12.


   컨버전스와이브로 사업본부

      단말연구센터
KT Android olleh 마켓 연동     문서번호                      버전    V 1.8   쪽       2
                가이드                         작성자            홍유리/이주영   최종수정일자        2010.12.20



개정이력

버전       변경일                                      변경사항                               작성자
V 1.0   2010.04.07   -   olleh 마켓 App Manager 최초작성
V 1.0   2010.04.19   -   1.3. 셀프 업데이트 확인 사용을 위한 초기 페이지에
                         추가되는 기능
                     -   SELF_UPDATE_CHECK_BROADCAST에서
                         SELF_UPDATE_CHECK_RECEIVERD로 변경
V 1.0   2010.05.10   -   3. 플랫폼 SMS 수신 연동 규격
                     -   Activity 에서BroadcastReceiver로 변경 result      payload로
                         수정
V 1.0   2010.05.10   -   vnd.show.app.manager/vnd.self.update.check에서
                         vnd.olleh.app.store/vnd.update.check로 변경
                     -   “4.1. 외부 어플리케이션에서 olleh 마켓 실행 규격” 추가
V 1.0   2010.06.20   -   업데이트 요청을 MimeType에서 Action으로 변경
                     -   어플리케이션 종료 방법 변경.
                     -   업데이트 요청 시 Contents의 Type Extra 추가
                         intent.putExtra("type", "APP");
                     -   packagename를package_name으로 수정한다.
V 1.0   2010.08.25   -   “4.2. olleh 마켓 실행 중 컨텐츠 소개페이지 이동” 추가
                     -   “[중요] 셀프 업데이트 확인 요청 시 Response 가 없는 경우
                         를 대비해서 방어 코드를 추가하여야 한다.” 추가

V1.2    2010.10.18   -   스마트폰/KPad/SoIP 규격 병합
V1.3    2010.10.22   -   Preload 어플리케이션 버전 정보 관리 항목 추가.
V1.4    2010.11.10   -   In App Purchase 연동 규격서 추가.
V1.5    2010.11.12   -   플랫폼 SMS 수신 연동 Receiver 샘플 추가.
                     -   플랫폼 SMS 수신 연동 테스트 설정 방법 추가.
                     -   IRemoteInAppPurchaseService.aidl 수정.
                     -   In App Purchase 샘플 소스 수정.
                     -   Result Code값 추가 (800 - 올레마켓에서 구매하지 않은
                         어플리케이션)
V1.5    2010.11.15   -   Result Code값 추가 (998 - 결제를 진행하는 동안 문제가
                         발생)
                     -   결제 취소 더미 메소드 선언.
V1.5    2010.11.16   -   In App Purchase을 지원하는 최소 버전 정보 추출 추가.
V1.5    2010.11.18   -   플랫폼 SMS 수신 연동 규격 보완.

                                                                                   Page :2/47
KT Android olleh 마켓 연동   문서번호                  버전       V 1.8   쪽       3
                가이드                      작성자      홍유리/이주영       최종수정일자          2010.12.20


V1.6    2010.12.08   -   In App Purchase 테스트, 상용서버 테스트 방법 추가.
V1.6    2010.12.13   -   In App Purchase 샘플 소스 설명 추가.
                     -   In App Purchase Sequence Diagram 상세화, Blocking 부분
                         추가, 설명 추가.
                     -   In App Purchase Preload, Install 버전 olleh 마켓 별 지원
                         네트워크 추가.
                     -   In App Purchase Install 버전 olleh 마켓에서 네트워크 오류
                         ResultCode 추가(902: Install 버전 olleh 마켓에서 3G이외의
                         망에서 In App Purchase 결제 요청 불가.)
V1.0    2010.07.08   -   olleh 마켓 Front 최초작성
V1.1    2010.07.12   -   검색 규격 추가
V1.2    2010.07.20   -   웹 연동 규격 추가
V1.3    2010.07.22   -   상품 목록 규격 추가 및 MimeType 수정                              규격 종류 추가

V1.4    2010.08.06   -   ID/PW 입력화면 규격 추가                                       규격 종류 추가

V1.5    2010.08.08   -   My 화면 연동 규격 추가                                         규격 종류 추가

V1.6    2010.08.14   -   My 화면 연동 규격 내용 추가                                      규격 내용 추가

V1.7    2010.08.19   -   RO 구매화면 연동 규격 내용 추가                                    규격 내용 추가

V1.8    2010.08.27   -   ID/PW 입력화면 규격 변경                                       규격 내용 변경

V1.9    2010.08.31   -   상세화면 호출 시 성인 컨텐츠 정보 추가                                 규격 내용 변경

                     -   RO 구매화면 연동 구격 변경
V1.10   2010.09.01   -   RO 구매화면 연동 구격 변경                                       규격 내용 변경

V1.11   2010.09.03   -   브랜드 샵 리스트 이동 규격 내용 추가                                  규격 종류 추가

                     -   필수 어플 설치 페이지 이동 규격 추가
                     -   Home 이동 규격 추가
V1.12   2010.09.07   -   웹 연동 상세화면 호출 성인 컨텐츠 정보 추가                              규격 내용 변경

V1.13   2010.11.11   -   웹 연동 멀티다운로드 호출 규격 추가                                   규격 종류 추가

V1.14   2010.11.16   -   웹 연동 멀티다운로드 호출 규격 변경                                   규격 내용 변경

                     -   N_ID 를 C_ID 로 변경
V1.15   2010.11.18   -   상품 목록 규격 내용 변경                                         규격 내용 변경

                     -   기존 필수 항목을 필수와 옵션으로 구분                                  문구 오류 수정

                     -   일부 타이틀 문구 오류 수정                                         규격 통합

                     -   SP/SoIP/PAD 규격 통합
V1.16   2010.12.08   -   다운로드 중지 페이지 규격 추가                                      규격 종류 추가

V1.17   2010.12.14   -   파라미터 option 항목 정리                                      규격 내용 변경

V1.8    2010.12.14   -   olleh 마켓 Front와 App Manager 연동 규격 통합 및 보완
                     -


                                                                                 Page :3/47
KT Android olleh 마켓 연동                               문서번호                                                     버전                  V 1.8                쪽                4
                                    가이드                                                     작성자                    홍유리/이주영                          최종수정일자                                 2010.12.20



                                                                                                  목차

1.     개요 ...................................................................................................................................................................... 6

     1.1.     목적 .................................................................................................................................................................................................. 6
     1.2.     적용범위......................................................................................................................................................................................... 6

2.     INTENT 호출 규격 ............................................................................................................................................. 7

     2.1.     CONTENT 상세화면 ..................................................................................................................................................................... 7
       2.1.1.         Content 상세화면 Intent parameter 정의 ........................................................................................................... 7
       2.1.2.         Content 상세화면 Intent parameter 정의 ........................................................................................................... 8
     2.2.     검색 .................................................................................................................................................................................................. 9
       2.2.1.         검색 Intent parameter 정의 ....................................................................................................................................... 9
       2.2.2.         검색 호출 예시 ................................................................................................................................................................. 9
     2.3.     상품 목록 ..................................................................................................................................................................................... 10
       2.3.1.         상품 목록 Intent parameter 정의 .......................................................................................................................... 10
       2.3.2.         상품 목록 호출 예시 .................................................................................................................................................... 11
     2.4.     MY 구매 화면............................................................................................................................................................................. 12
       2.4.1.         My 구매 화면 Intent parameter 정의 ................................................................................................................. 12
       2.4.2.         My 구매 화면 호출 예시 ........................................................................................................................................... 12
     2.5.     브랜드샵 리스트 ....................................................................................................................................................................... 13
       2.5.1.         브랜드샵 리스트 이동 Intent parameter 정의 ................................................................................................ 13
       2.5.2.         브랜드샵 리스트 호출 예시 ...................................................................................................................................... 13
     2.6.     HOME 화면 .................................................................................................................................................................................. 14
       2.6.1.         Home 화면 Intent parameter .................................................................................................................................. 14
       2.6.2.         Home 화면 호출 예시 ................................................................................................................................................ 14

3.     WEB 연동 규격 ................................................................................................................................................ 15

     3.1.     CONTENT 상세 화면.................................................................................................................................................................. 15
       3.1.1.         Content 상세 화면 정의 ............................................................................................................................................ 15
       3.1.2.         Content 상세 화면 호출 예시 ................................................................................................................................. 16
     3.2.     검색 ................................................................................................................................................................................................ 17
       3.2.1.         검색 정의 ........................................................................................................................................................................... 17
       3.2.2.         검색 호출 예시 ............................................................................................................................................................... 17
     3.3.     상품 목록 ..................................................................................................................................................................................... 18
       3.3.1.         상품 목록 정의 ............................................................................................................................................................... 18
       3.3.2.         상품 목록 호출 예시 .................................................................................................................................................... 19
     3.4.     MY 구매 화면............................................................................................................................................................................. 20

                                                                                                                                                                                            Page :4/47
KT Android olleh 마켓 연동                            문서번호                                                  버전                 V 1.8                쪽               5
                                    가이드                                                  작성자                   홍유리/이주영                        최종수정일자                               2010.12.20

        3.4.1.         My 구매 화면 정의....................................................................................................................................................... 20
        3.4.2.         My 구매 화면 호출 예시 ........................................................................................................................................... 20
     3.5.      브랜드샵 리스트 ....................................................................................................................................................................... 21
        3.5.1.         브랜드샵 리스트 이동 정의 ...................................................................................................................................... 21
        3.5.2.         브랜드샵 리스트 화면 호출 예시 .......................................................................................................................... 21
     3.6.      HOME 화면 .................................................................................................................................................................................. 22
        3.6.1.         Home 화면........................................................................................................................................................................ 22
        3.6.2.         Home 화면 호출 예시 ................................................................................................................................................ 22

4.      어플리케이션 SELF UPDATE ........................................................................................................................... 23

     셀프 업데이트 확인 사용을 위한 초기 페이지에 추가되는 기능 .................................................................................... 23

5.      플랫폼 SMS 수신 연동 규격 .......................................................................................................................... 26

     5.1.      어플리케이션 구동 및 PARAMETER 전달 규격 ............................................................................................................... 26
     5.2.      플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위한 설정 ............................................................................ 27

6.      외부 어플리케이션에서 OLLEH 마켓 실행 규격 .......................................................................................... 29

     6.1.      외부 어플리케이션에서 OLLEH 마켓 실행 규격 ........................................................................................................... 29
     6.2.      OLLEH      마켓 실행 중 컨텐츠 소개페이지 이동.............................................................................................................. 30

7.      PRELOAD 어플리케이션 버전 정보 관리 ..................................................................................................... 31

     PRELOAD 어플리케이션 버전 정보 관리 ....................................................................................................................................... 31

8.      IN APP PURCHASE 연동 ................................................................................................................................ 33

     8.1.      IN APP PURCHASE 연동규격 .................................................................................................................................................... 33
     8.2.      IN APP PURCHASE 연동을 위한 AIDL 생성....................................................................................................................... 40
     8.3.      IN APP PURCHASE SEQUENCE DIAGRAM ................................................................................................................................. 41
     8.4.      IN APP PURCHASE 연동을 위한 AES 암호화 .................................................................................................................... 41
     8.5.      IN APP PURCHASE 테스트를 위한 설정.............................................................................................................................. 45
     8.6.      IN APP PURCHASE 를 지원하는 OLLEH 마켓 최소 버전 정보 추출 ........................................................................... 47




                                                                                                                                                                                    Page :5/47
KT Android olleh 마켓 연동   문서번호             버전   V 1.8   쪽       6
            가이드                      작성자    홍유리/이주영   최종수정일자       2010.12.20



1. 개요

1.1. 목적

 본 문서는 (주)케이티(이하 KT)의 Android 단말기의 KT Application 또는 웹 브라우저상에서 olleh 마켓
과 연동 방법에 대해 기술한다.




1.2. 적용범위

     KT 의 KT Applicaton 에서 Self 업데이트와 플랫폼 SMS 수신을 받는 후 App 에 전달하는 방법,
외부 어플리케이션에서 App ID 를 이용해서 어플리케이션의 상세페이지로 이동 할 수 있는 방법, In App
Purchase 를 통한 어플리케이션 내 결제를 이용하는 방법을 설명한다.
     단말에 따라 적용되는 규격 내용이 분기처리 되어있다.
     내용은 KT 서비스 제공 계획의 변경 및 추가에 따라 추후 보완 및 변경 될 수 있다.




                                                                   Page :6/47
KT Android olleh 마켓 연동     문서번호                  버전    V 1.8   쪽       7
                  가이드                         작성자        홍유리/이주영    최종수정일자       2010.12.20



2. Intent 호출 규격

Application 이 olleh 마켓 client 에 요청하는 Intent 규격을 정의한다.

Intent 호출 시 package 명은 넣지 않는다.

          Package Name    com.kt.olleh.storefront
                 Action   android.intent.action.VIEW



2.1. Content 상세화면


2.1.1. Content 상세화면 Intent parameter 정의


 olleh 마켓 특정 컨텐츠의 상세 화면으로 이동한다.                        IS_ADULT 값은 Option 값으로 전달되지 않는 경우
성인 컨텐츠가 아닌 일반 컨텐츠로 간주한다. IS_ADULT 값이 “ADULT”이면 성인 인증을 거친 후 상세 화
면으로 이동한다.

MimeType

vnd.kt.olleh.storefront/detail.kt.olleh.storefront

Intent parameter 정의

       Column Name            Type                                 설명
                                           APPLICATION: 어플리케이션
                                           MUSIC: 음악
CONTENT_TYPE                  String       MOVIE: 영화
                                           EBOOK_S: 이북 시리즈 상세
                                           EBOOK: 이북 단품
                                           m: 음악 앨범
                                           c: 단일 상품
P_TYPE                        String       e: 할인 상품
                                           p: 세트 상품
                                           b: 번들 (1+1)
P_ID                          String       Content id (상품 고유 번호)
N_ID                          String       Category id (카테고리 고유 번호)
                                           Option.
IS_ADULT                      String
                                           성인 콘텐트: “ADULT”


                                                                                 Page :7/47
KT Android olleh 마켓 연동      문서번호                    버전   V 1.8   쪽       8
                     가이드                          작성자          홍유리/이주영   최종수정일자       2010.12.20


                                              일반 콘텐트: “”



2.1.2. Content 상세화면 Intent parameter 정의


Intent intent = new Intent(“android.intent.action.VIEW”);
Intent.setType(“vnd.kt.olleh.storefront/detail.kt.olleh.storefront” );
intent.putExtra( “CONTENT_TYPE”, “APPLICATION” );
intent.putExtra(“P_TYPE”, “c”); // 대소문자구분주의
intent.putExtra(“P_ID”, “51200001483276”); // 실제 콘텐트 아이디를 넣어야 함
intent.putExtra(“N_ID”, “A001006”); // 실제 카테고리 고유번호를 넣어야 함
startActivity( intent);


IS_ADULT 값을 “ADULT”로 주면 다음과 같이 성인인증을 받고서 상세 화면으로 이동한다.




                                                                                      Page :8/47
KT Android olleh 마켓 연동     문서번호                     버전   V 1.8   쪽       9
                     가이드                         작성자          홍유리/이주영     최종수정일자      2010.12.20



2.2. 검색


2.2.1. 검색 Intent parameter 정의


해당 KEYWORD 로 olleh 마켓 컨텐츠 검색 결과 화면으로 이동한다.

MimeType

vnd.kt.olleh.storefront/search.kt.olleh.storefront

Intent parameter 정의

     Column Name                Type                                     설명
                                              "A" 어플리케이션
                                              "S" 음악
N_ID                       String
                                              "V" 영상
                                              "E" 이북
KEYWORD                    String             검색어 (20 자 이하)



2.2.2. 검색 호출 예시


Intent intent = new Intent(“android.intent.action.VIEW” );
Intent.setType(“vnd.kt.olleh.storefront/search.kt.olleh.storefront” );
intent.putExtra(“N_ID”, “A”); // 콘텐트종류
intent.putExtra(“KEYWORD”, “KT”); // 검색어
startActivity( intent);




                                                                                      Page :9/47
KT Android olleh 마켓 연동     문서번호                 버전   V 1.8   쪽      10
                   가이드                         작성자      홍유리/이주영     최종수정일자      2010.12.20



2.3. 상품 목록


2.3.1. 상품 목록 Intent parameter 정의


상품 목록 화면으로 이동한다. 필수 파라미터로 CONTENT_TYPE 을 전달하면 어플리케이션, 음악, 영화, 이
북 리스트 화면으로 이동 한다.

MimeType

vnd.kt.olleh.storefront/list.kt.olleh.storefront

Intent parameter 정의

    Column Name                Type                                설명
                                            APPLICATION: 어플리케이션
                                            MUSIC: 음악
CONTENT_TYPE              String
                                            MOVIE: 영화
                                            EBOOK: 이북
                                            Option. 현재 사용하지 않음.
                                            Category id (카테고리 고유 번호)
                                            메인 목록의 경우 아래 중 하나
                                            "A" 어플리케이션
N_ID                      String
                                            "S" 음악
                                            "V" 영상
                                            "E" 이북
                                            하위 목록의 경우는 각 해당 고유 아이디
                                            Option. 현재 사용하지 않음.
IS_MAIN                   String
                                            Y(대표 목록) or N(하위 목록)
                                            Option. 현재 사용하지 않음.
IS_NEW                    String
                                            Y(신규 목록) or N(인기 목록)
                                            Option. 현재 사용하지 않음.
IS_FREE                   String            Y(무료) or N(유료)
                                            단, IS_NEW 가 N 인 경우 즉, 인기 목록의 경우만 유효함
                                            Option. 현재 사용하지 않음.
                                            목록 명(20 자 이하)
TITLE                     String
                                            예) 어플리케이션, 음악, 영상, 이북, 어플리케이션>게임, 음악>
                                            발라드, 영상>액션, 이북>국내소설 등…
                                            Option. 현재 사용하지 않음.
MUSIC_TYPE                String
                                            “S” 곡

                                                                                Page :10/47
KT Android olleh 마켓 연동       문서번호                    버전   V 1.8   쪽      11
                     가이드                           작성자          홍유리/이주영   최종수정일자       2010.12.20


                                              “M” 뮤직비디오
                                              음악 목록의 경우만 해당됨



2.3.2. 상품 목록 호출 예시


Intent intent = new Intent(“android.intent.action.VIEW” );
Intent.setType(“vnd.kt.olleh.storefront/list.kt.olleh.storefront” );
intent.putExtra(“CONTENT_TYPE”, “MUSIC”); // 음악
startActivity( intent);




                                                                                       Page :11/47
KT Android olleh 마켓 연동        문서번호                  버전   V 1.8   쪽      12
                     가이드                           작성자        홍유리/이주영    최종수정일자       2010.12.20



2.4. My 구매 화면


2.4.1. My 구매 화면 Intent parameter 정의


My 구매내역 화면으로 이동한다. N_ID 값을 전달하면 어플리케이션, 음악, 영상, 이북 구매내역 화면으로
이동한다.

MimeType

vnd.kt.olleh.storefront/my.kt.olleh.storefront

Intent parameter 정의

     Column Name                Type                                    설명
                                              "A" 어플리케이션
                                              "S" 음악
N_ID                       String
                                              "V" 영상
                                              "E" 이북
                                              Option. 현재 사용하지 않음.
UPDATE_CHECK               String             Y: update check 함
                                              N:    update check 하지 않음



2.4.2. My 구매 화면 호출 예시


Intent intent = new Intent(“android.intent.action.VIEW” );
Intent.setType(“vnd.kt.olleh.storefront/my.kt.olleh.storefront” );
intent.putExtra(“N_ID”, “A”); // 콘텐트종류
startActivity( intent);




                                                                                      Page :12/47
KT Android olleh 마켓 연동    문서번호                         버전   V 1.8   쪽      13
                     가이드                        작성자          홍유리/이주영         최종수정일자      2010.12.20



2.5. 브랜드샵 리스트


2.5.1. 브랜드샵 리스트 이동 Intent parameter 정의


브랜드샵 리스트 화면으로 이동한다. 각 브랜드샵 ID 를 전달하면 해당 브랜드샵 리스트로 이동하며, 해당
화면의 타이틀 명을 설정할 수 있다.

MimeType

vnd.kt.olleh.storefront/brandshop.kt.olleh.storefront

Intent parameter 정의

     Column Name                Type                                        설명
BRAND_ID                   String             브랜드샵 ID
subTitle                   String             브랜드샵 타이틀 명



2.5.2. 브랜드샵 리스트 호출 예시


Intent intent = new Intent(“android.intent.action.VIEW” );
Intent.setType(“vnd.kt.olleh.storefront/brandshop.kt.olleh.storefront” );
intent.putExtra(“BRAND_ID”, “bw004”); // 삼성 브랜드샵 ID
intent.putExtra(“subTitle”, “Samsung”); // 삼성 브랜드샵 타이틀 명
startActivity( intent);




                                                                                         Page :13/47
KT Android olleh 마켓 연동     문서번호                      버전   V 1.8   쪽      14
                     가이드                          작성자        홍유리/이주영       최종수정일자      2010.12.20



2.6. Home 화면


2.6.1. Home 화면 Intent parameter


olleh 마켓의 메인(홈) 화면으로 이동한다.

MimeType

vnd.kt.olleh.storefront/home.kt.olleh.storefront

Intent parameter 정의

     Column Name                Type                                      설명
                                              Option.
PACKAGE_NAME               String             호출하는 어플리케이션의 패키지 명.
                                              예: “kt.olleh.testpackage”



2.6.2. Home 화면 호출 예시


Intent intent = new Intent(“android.intent.action.VIEW” );
Intent.setType(“vnd.kt.olleh.storefront/home.kt.olleh.storefront” );
intent.putExtra(“PACKAGE_NAME”, “kt.olleh.testpackage”); // 패키지명
startActivity( intent);




                                                                                       Page :14/47
KT Android olleh 마켓 연동     문서번호                  버전   V 1.8   쪽      15
                   가이드                         작성자        홍유리/이주영    최종수정일자      2010.12.20



3. Web 연동 규격

안드로이드 웹 브라우저에서 KT Olleh 마켓을 연동하는 규격으로 아래와 같은 형식을 가지며, query 문은
name=value 형식을 따른다.

[schme]://[host]?query

                  Schme   cstore



3.1. Content 상세 화면


3.1.1. Content 상세 화면 정의


olleh 마켓 특정 컨텐츠의 상세 화면으로 한다. IS_ADULT 값은 Option 값으로 없을 경우 성인 컨텐츠가
아닌 일반 컨텐츠로 간주한다. IS_ADULT 값이 “ADULT”이면 성인 인증을 거친 후 상세 화면으로 이동한다.

HOST 명

 detail

Query 정의

        Column Name           Type                                  설명
                                            APPLICATION: 어플리케이션
                                            MUSIC: 음악
 CONTENT_TYPE             String            MOVIE: 영화
                                            EBOOK_S: 이북 시리즈 상세
                                            EBOOK: 이북 단품
                                            m: 음악 앨범
                                            c: 단일 상품
 P_TYPE                   String            e: 할인 상품
                                            p: 세트 상품
                                            b: 번들 (1+1)
 P_ID                     String            Content id (상품 고유 번호)
                                            Category id (카테고리 고유 번호)
 N_ID                     String

                                            Option.
 IS_ADULT                 String            성인 콘텐트: “ADULT”
                                            일반 콘텐트: “”

                                                                                 Page :15/47
KT Android olleh 마켓 연동   문서번호                버전       V 1.8    쪽      16
               가이드                      작성자     홍유리/이주영      최종수정일자          2010.12.20


3.1.2. Content 상세 화면 호출 예시


Ex. 어플리케이션상세페이지호출

cstore://detail?CONTENT_TYPE=APPLICATION&P_TYPE=c&P_ID=A001006&N_ID=51200001483276


IS_ADULT 값을 “ADULT”로 주면 다음과 같이 성인인증을 받고서 상세 화면으로 이동한다.




                                                                             Page :16/47
KT Android olleh 마켓 연동     문서번호              버전   V 1.8   쪽      17
               가이드                        작성자     홍유리/이주영    최종수정일자      2010.12.20



3.2. 검색


3.2.1. 검색 정의


해당 KEYWORD 로 olleh 마켓 컨텐츠 검색 결과 화면으로 이동한다.

HOST 명

search

Query 정의

    Column Name           Type                              설명
                                        "A" 어플리케이션
                                        "S" 음악
N_ID                 String
                                        "V" 영상
                                        "E" 이북
KEYWORD              String             검색어(20 자 이하)



3.2.2. 검색 호출 예시


Ex. 어플리케이션 검색 호출
cstore://search?N_ID=A&KEYWORD=KT




                                                                         Page :17/47
KT Android olleh 마켓 연동     문서번호                 버전   V 1.8   쪽      18
                 가이드                         작성자      홍유리/이주영     최종수정일자      2010.12.20



3.3. 상품 목록


3.3.1. 상품 목록 정의


상품 목록 화면으로 이동한다. 필수 파라미터로 CONTENT_TYPE 을 주면, 어플리케이션, 음악, 영화, 이북
리스트 화면으로 이동 한다.

HOST 명

list

Query 정의

       Column Name          Type                                 설명
                                          APPLICATION: 어플리케이션
                                          MUSIC: 음악
CONTENT_TYPE           String
                                          MOVIE: 영화
                                          EBOOK: 이북
                                          Option.
                                          Category id (카테고리 고유 번호)
                                          메인 목록의 경우 아래 중 하나
                                          "A" 어플리케이션
N_ID                   String
                                          "S" 음악
                                          "V" 영상
                                          "E" 이북
                                          하위 목록의 경우는 각 해당 고유 아이디
                                          Option.
IS_MAIN                String
                                          Y(대표 목록) or N(하위 목록)
                                          Option.
IS_NEW                 String
                                          Y(신규 목록) or N(인기 목록)
                                          Option.
IS_FREE                String             Y(무료) or N(유료)
                                          단, IS_NEW 가 N 인 경우 즉, 인기 목록의 경우만 유효함
                                          Option.
                                          목록 명(20 자 이하)
TITLE                  String
                                          예) 어플리케이션, 음악, 영상, 이북, 어플리케이션>게임, 음악>
                                          발라드, 영상>액션, 이북>국내소설 등…
                                          Option.
MUSIC_TYPE             String
                                          “S” 곡

                                                                              Page :18/47
KT Android olleh 마켓 연동    문서번호                 버전   V 1.8   쪽      19
                가이드                        작성자       홍유리/이주영   최종수정일자       2010.12.20


                                         “M” 뮤직비디오
                                         음악 목록의 경우만 해당됨



3.3.2. 상품 목록 호출 예시


Ex. 음악 상품 목록 호출
cstore://list?CONTENT_TYPE=MUSIC




                                                                            Page :19/47
KT Android olleh 마켓 연동        문서번호                  버전   V 1.8   쪽      20
               가이드                           작성자     홍유리/이주영       최종수정일자       2010.12.20



3.4. My 구매 화면


3.4.1. My 구매 화면 정의


My 구매내역 화면으로 이동한다. N_ID 값을 전달하면 어플리케이션, 음악, 영상, 이북 구매내역 화면으로
이동한다.

HOST 명

my

Query 정의

     Column Name          Type                                 설명
                                        "A" 어플리케이션
                                        "S" 음악
N_ID                 String
                                        "V" 영상
                                        "E" 이북
                                        현재 사용하지 않음.
UPDATE_CHECK         String             Y: update check 함
                                        N:    update check 하지 않음



3.4.2. My 구매 화면 호출 예시


Ex. 어플리케이션 구매 화면 호출
cstore://my?N_ID=A&UPDATE_CHECK=N




                                                                                Page :20/47
KT Android olleh 마켓 연동    문서번호               버전   V 1.8   쪽      21
               가이드                        작성자     홍유리/이주영    최종수정일자      2010.12.20



3.5. 브랜드샵 리스트


3.5.1. 브랜드샵 리스트 이동 정의


브랜드샵 리스트 화면으로 이동한다. 각 브랜드샵 ID 를 전달하면 해당 브랜드샵 리스트로 이동하며, 해당
화면의 타이틀 명을 설정할 수 있다.

HOST 명

brandshop

Query 정의

    Column Name           Type                              설명
BRAND_ID             String             브랜드샵 ID
subTitle             String             브랜드샵 타이틀 명



3.5.2. 브랜드샵 리스트 화면 호출 예시


Ex. 브랜드샵 리스트 호출
cstore://brandshop?BRAND_ID=bw004&subTitle=Samsung




                                                                         Page :21/47
KT Android olleh 마켓 연동     문서번호                      버전   V 1.8   쪽      22
                가이드                          작성자        홍유리/이주영       최종수정일자      2010.12.20



3.6. Home 화면


3.6.1. Home 화면


olleh 마켓의 메인(홈) 화면으로 이동한다.

HOST 명

home

Query 정의

   Column Name             Type                                      설명
                                         Option.
PACKAGE_NAME           String            호출하는 어플리케이션의 패키지 명.
                                         예: “kt.olleh.testpackage”



3.6.2. Home 화면 호출 예시


Ex. Home 화면호출
cstore://home?PACKAGE_NAME=kt.olleh.testpackage




                                                                                  Page :22/47
KT Android olleh 마켓 연동     문서번호                    버전   V 1.8   쪽      23
                      가이드                         작성자          홍유리/이주영   최종수정일자       2010.12.20



4. 어플리케이션 SELF Update


셀프 업데이트 확인 사용을 위한 초기 페이지에 추가되는 기능

적용 대상: olleh 마켓이 설치된 모든 단말

 셀프 업데이트 확인 기능을 사용하기 위하여 다음과 같은 코드를 Application 초기 화면 페이지에 추가
하여야 한다. Application 업데이트가 존재하는 경우 사용자에게 공지할 수 있다.

Self Update 호출 MimeType

vnd.olleh.app.store/vnd.update.check

전달 Parameters

         Parameter                                             설명
         Uri (Data)          [Uri] 업데이트를 확인하기 위한 App 의                                     필수
                             PackageName(getPackageName()) 입력

BoradcastReceiver (App 업데이트 확인을 수신하기 위한 Receiver 등록)

[어플리케이션 Package Name]+ ".action.SELF_UPDATE_CHECK_RECEIVERD"
                             [어플리케이션 Package Name]은 App 개발 시 최초 등록한 PackageName 을
           설명
                             등록한다.

수신 Parameters

         Parameter                                                  설명
           result            [BOOLEAN] 최신 업데이트 버전 확인 결과
           예제                intent.putExtra("result", true)

수신 Value

           Value                                                    설명
           true              최신 업데이트 버전 존재함.
           false             최신 업데이트 버전 없음.

Throws

         Exception                                                  설명
                                                       없음




                                                                                      Page :23/47
KT Android olleh 마켓 연동   문서번호                           버전   V 1.8   쪽      24
                        가이드                       작성자         홍유리/이주영           최종수정일자       2010.12.20


초기 화면을 Create 시 업데이트 확인 Receiver 등록 Sample

publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


// App Manager에Self Update 확인 요청 후 아래와 같이 Broadcast한다.
registerReceiver(receiver, newIntentFilter(getPackageName()
+ ".action.SELF_UPDATE_CHECK_RECEIVERD"));


// 셀프 업데이트를 검사 한다. 검사 확인은 Broadcast로 노티 한다.
// 서비스 호출은 mimeType을 사용한다.
Intent intent = new Intent();
         Uri uri = Uri.parse(getPackageName());
intent.setDataAndType(uri,"vnd.olleh.app.store/vnd.update.check");
startService(intent);
}


/**
    * App Manager가 Self Update 확인 후 Broadcast 로 결과를 전달해주는 값을 받는다.
    */
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
publicvoid onReceive(Context context, Intent intent) {
                  // 최신 버전 존재 : true, 현재 버전이 최신 버전인 경우 : false
             boolean isResult = intent.getExtras().getBoolean("result");


             // [필수 사항] 추가하지 않으면 현재 Activity를 빠져나가는 동안 에러가 발생한다.
             unregisterReceiver(receiver);


             // AlertDialog UI와 문구는 KT UX가이드를 참조한다.
             // 업그레이드가 있는 경우는 사용자에게 확인을 요청 후 다운로드를 클릭 시
                  // 다운로드 및 업데이트를 진행한다.
             if (isResult) {
             AlertDialog.BuildermAlertDialog = new AlertDialog.Builder(this);
             mAlertDialog.setMessage("업데이트를 진행하시겠습니까?n" +
             "업데이트를 계속 진행하면 어플이 종료됩니다.");


                                                                                             Page :24/47
KT Android olleh 마켓 연동     문서번호                       버전        V 1.8      쪽      25
                    가이드                         작성자        홍유리/이주영         최종수정일자             2010.12.20



                   // false : Back버튼으로 대화상자를 닫지 못하도록 한다.
          mAlertDialog.setPositiveButton("확인", newDialogInterface.OnClickListener() {
          @Override
          publicvoid onClick(DialogInterface dialog, int which) {
                             Intent intent = new Intent("com.kt.olleh.intent.action.UPDATE");
                             intent.putExtra("type", “APP”);
          intent.putExtra("package_name", Main.this.getPackageName());
          startService(intent);


                             // Application 종료..
                             ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

                             am.restartPackage(getPackageName());
                        }
                   }); // 업데이트.
          mAlertDialog.setNegativeButton("취소", newDialogInterface.OnClickListener() {
          @Override
          publicvoid onClick(DialogInterface dialog, int which) {
          dialog.cancel();
                        }
                   }); // 취소한다.
          mAlertDialog.create(); // 생성
          mAlertDialog.show(); // 화면에 표시
              }
     }
};


어플리케이션 종료를 사용하기 위해서는 다음과 같은 퍼미션이 필요함.
         <!-- 어플리케이션을 종료할 수 있는 권한 추가 -->
         <uses-permissionandroid:name="android.permission.RESTART_PACKAGES" />




                                                                                              Page :25/47
KT Android olleh 마켓 연동   문서번호                        버전    V 1.8   쪽      26
                  가이드                       작성자         홍유리/이주영         최종수정일자       2010.12.20



5. 플랫폼 SMS 수신 연동 규격

5.1. 어플리케이션 구동 및 Parameter 전달 규격

적용 대상: 스마트폰, SoIP
Application ID를 기반으로 해당 하는 어플리케이션을 구동시키고 Parameter를 전달하기 위한 규격을
정의 한다. 플랫폼SMS를 전달 받으려는 어플리케이션은 Receiver의 intent-filter에action을 정의한다.

스마트폰용 플랫폼 SMS 구조 및 예제

   플랫폼 SMS 구조            -appid [APP_ID]:[Parameters]
        예제               -appid 12345678:email=test@test.com
        설명               해당 Application 의 APP_ID 를 파라 미터로 전달하며, 해당 Application 을 실
                         행한다. 단. 해당 어플리케이션이 존재하지 않으면 olleh 마켓의 상세(소개)페
                         이지로 이동한다.

SoIP 용 플랫폼 SMS 구조 및 예제

   플랫폼 SMS 구조            FF-appid [APP_ID]:[Parameters]
        예제               FF-appid 12345678:email=test@test.com
        설명               해당 Application 의 APP_ID 를 파라 미터로 전달하며, 해당 Application 을 실
                         행한다. 단. 해당 어플리케이션이 존재하지 않으면 olleh 마켓의 상세(소개)페
                         이지로 이동한다.

Action 등록 예

<action android:name="[어플리케이션 Package Name].intent.action.PAYLOAD_RECEIVED" />
                         [어플리케이션 Package Name]은 App 개발 시 최초 등록한 PackageName 을
        설명
                         등록한다.

전달 Parameters

      Parameter                                               설명
       payload           [String] 플랫폼 SMS 로 수신된 Parameters 를 전달한다.
        예제               intent.putExtra("payload", "email=test@test.com")




                                                                                     Page :26/47
KT Android olleh 마켓 연동        문서번호                      버전   V 1.8   쪽      27
                     가이드                             작성자           홍유리/이주영   최종수정일자       2010.12.20


플랫폼 SMS 수신 Action 등록 샘플

<!-- 플랫폼 SMS를 통해서 파라미터 수신 -->

<receiverandroid:name=".SmsReceiver"

         android:label="플랫폼SMS 수신 Activity">

         <intent-filter>

                 <actionandroid:name="[어플리케이션PackageName].intent.action.PAYLOAD_RECEIVED"/>
         </intent-filter>

</receiver>

플랫폼 SMS 수신 Receiver 샘플

@Override

publicvoid onReceive(Context context, Intent intent) {
         Toast.makeText(context, "SMS를 통한 App 실행.", Toast.LENGTH_SHORT).show();



         Intent i = new Intent(context, TestActivity.class);

         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         i.putExtra("payload", intent.getExtras().getString("payload"));
         context.startActivity(i);
}




5.2. 플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위한 설정

적용 대상: 스마트폰, SoIP

플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위해서는 olleh 마켓 Setting 어플리케이션이 필요하다.

플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위한 설정 절차

1. 어플리케이션 구동 및 Parameter 전달 규격이 적용된 바이너리를 설치 한다.
2. 플랫폼 SMS를 통한 어플리케이션 실행 테스트를 위해서 olleh 마켓에서 구매한 어플리케이션으로
강제 설정하기 위해 Setting 어플리케이션을 구동하여 하단의 그림을 보고 설정 한다.
(SoIP 단말용 Setting 어플리케이션에서는 최초 “KPad/SoIP olleh 마켓 설정으로 이동 메뉴를 선택”하고
나머지는 아래 그림을 보고 동일하게 설정)




                                                                                          Page :27/47
KT Android olleh 마켓 연동   문서번호               버전   V 1.8   쪽      28
               가이드                      작성자      홍유리/이주영   최종수정일자       2010.12.20




플랫폼 SMS 발송 시 KAM 메시지는 다음과 같다.

스마트폰용 KAM 데이터 : -appid A00000001:1234567890
                 appid
SOIP 용 KAM 데이터 : FF-appid A00000001:1234567890
                    appid
1234567890 값에는 어플리케이션에서 전달 받고자 하는 값을 입력한다.




                                                                        Page :28/47
KT Android olleh 마켓 연동   문서번호                 버전      V 1.8      쪽      29
                      가이드                      작성자        홍유리/이주영    최종수정일자            2010.12.20



6. 외부 어플리케이션에서 olleh 마켓 실행 규격

6.1. 외부 어플리케이션에서 olleh 마켓 실행 규격

적용 대상: olleh 마켓이 설치된 모든 단말

 외부 어플리케이션에서 어플리케이션의 상세 소개 페이지로 이동 할 수 있도록 API를 제공한다.
Application ID와 일치하는 어플리케이션이 존재 하지 않는 경우 “판매중인 어플리케이션이 아닙니다.”
노티를 보여준 후 이전 화면으로 이동한다.

컨텐츠 페이지 이동 호출 MimeType

vnd.olleh.app.store/vnd.contents.introduce

전달 Parameters

         Parameter                                   설명
         Uri (Data)          [Uri] 어플리케이션의 상세 소개 페이지로 이동할 어플리                           필수
                                          케이션의 APP_ID 값 입력
      contents_id            App_ID 값이 없을 경우에는 상세 화면으로 이동하고자                        APP_ID 가 없는
                             할 contents 의 id 값을 putExtra() 를 이용해서 전달한다.               경우 필수

Throws

         Exception                                           설명
                                                 없음

olleh 마켓 컨텐츠 소개 페이지 호출 Sample

// APP_ID가 있을 경우 올레 마켓 상세/간단 소개페이지를 호출한다..
Intent intent = new Intent();
Uri uri = Uri.parse(”81000001”);
intent.setDataAndType(uri, "vnd.olleh.app.store/vnd.contents.introduce");
startService(intent);


// App_ID가 없는 경우는 아래를 사용한다.
Intent intent = new Intent();
intent.setType("vnd.olleh.app.store/vnd.contents.introduce");
intent.putExtra(”contents_id”,”540000010234”)
startService(intent);




                                                                                       Page :29/47
KT Android olleh 마켓 연동   문서번호                       버전        V 1.8   쪽      30
                  가이드                       작성자         홍유리/이주영        최종수정일자           2010.12.20



6.2. olleh 마켓 실행 중 컨텐츠 소개페이지 이동

적용 대상: 스마트폰
olleh 마켓이 실행 중인 상태에서 컨텐츠 소개페이지로 이동하는 기능은 olleh 마켓
VersionCode“1102”버전 이상부터 지원한다.
Preload 버전 olleh마켓패키지 명 :com.kt.olleh.storefront
인스톨 버전 olleh 마켓 패키지 명 :com.kt.olleh.istore
olleh 마켓 실행 중 컨텐츠 소개페이지로 이동 기능 지원 Version Code :1102
Android Native API를 이용해서 olleh 마켓 VersionCode를 가져온다.

olleh 마켓 Version Code 추출 Sample

try {
        PackageManager pm = getPackageManager();
        PackageInfopackageInfo = pm.getPackageInfo("com.kt.olleh.storefront", 0);
        intversionCode = packageInfo.versionCode;


        // Version Code 값이 1102 버전 이상인 경우에만 olleh 마켓 실행 중 컨텐츠 소개페이지로 이동 하는 기능을 제공함.

        if (versionCode>= 1102) {
                 // olleh 마켓 실행 중 컨텐츠 소개페이지로 이동
        }
}
catch (Exception e) {
        e.printStackTrace();
}




                                                                                        Page :30/47
KT Android olleh 마켓 연동   문서번호              버전   V 1.8   쪽      31
                가이드                      작성자    홍유리/이주영    최종수정일자       2010.12.20



7. Preload 어플리케이션 버전 정보 관리


Preload 어플리케이션 버전 정보 관리

적용 대상: olleh 마켓이 설치된 모든 단말

KT Android 단말기에 Preload 되는 모든 어플리케이션은 AndroidManifest.xml의
<android:versionName>값을 다음과 같은 규격으로 맞춰야 한다.



android:versionName 생성 규칙

   어플리케이션                서버                               설명
2.0.7 또는 02.00.07      02.00.07      어플리케이션의 versionName 이 2.0.7 인 경우 서버에 등록되는
                                     바이너리 버전은 02.00.07 로 등록되어야 한다.



android:versionName 생성 제약 조건

1.어플리케이션의versionName의 최대 자릿수는 마침표(.) 포함 최대 8자리(99.99.99)를 초과할 수 없고
최소 자릿수는 마침표(.) 포함 5자리(0.0.1) 미만이 될 수 없다.
2. 어플리케이션이 최소 자릿수 사용 시 AppManager에서 클라이언트의 versionName 을 마침표(.) 포함
8자리로 변환하는데 이때. 서버에 등록된 버전과 동일한 버전 정보가 되어야 한다.
예) AppManager 변환 예시.
   어플리케이션           AppManager                            설명
     2.01.7            02.01.07      마침표(.) 사이에 2 자리/1 자리를 혼용해서 사용할 경우
                                     AppManager 는 1 자리를 2 자리로 변환하고 2 자리 중 앞자리
     02.1.7            02.01.07
                                     를 0 으로 채운다.




                                                                        Page :31/47
KT Android olleh 마켓 연동   문서번호                        버전   V 1.8   쪽      32
                 가이드                       작성자        홍유리/이주영         최종수정일자       2010.12.20


AndroidManifest.xml 의 android:versionName 규격 적용 샘플

//최소 자릿수 사용시
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="패키지 명"
android:versionCode="2007"
android:versionName="2.0.7">


//최대 자릿수 사용시
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="패키지 명"
android:versionCode="2007"
android:versionName="02.00.07">




                                                                                   Page :32/47
KT Android olleh 마켓 연동      문서번호                    버전      V 1.8   쪽       33
                   가이드                          작성자         홍유리/이주영    최종수정일자          2010.12.20



8. In App Purchase 연동

8.1. In App Purchase 연동규격

적용 대상: 스마트폰
KT olleh마켓 서버를 이용하여 어플리케이션 내의 아이템 구매 서비스를 제공하려는 셀러는 본 절의
규격을 준수해야 한다.
아이템 구매는 보안을 위해 AIDL을 이용하여 App Manager와 연동하여야 하며 아래 정의를 참고한다.
AIDL은 Android에서 사용되는 IPC(Inter Process Communication)로 다른 프로세스의 Service를 Binder할
수 있는 기능을 제공한다..
In App Purchase는 Preload버전과 Install버전 olleh 마켓 별 지원되는 네트워크를 구분하여 처리가
필요하다.

olleh 마켓 Preload 버전과 Install 버전 패키지명.

      olleh 마켓                                  패키지 명
  Preload 버전 olleh 마켓                  com.kt.olleh.storefront
   Install 버전 olleh 마켓                      com.kt.olleh.istore

olleh 마켓 Preload 버전과 Install 버전 지원 네트워크.

      olleh 마켓                  3G            네스팟 공인          네스팟 사설        I-WLAN     사설 WI-FI
  Preload 버전 olleh 마켓           O                  O              O           O            X
   Install 버전 olleh 마켓          O                  X              X           X            X

전달 Parameters

       Parameter                                       설명
    packageName           In App Purchase 를 요청하는 어플리케이션의 패키지 명.                         필수
                          AES 암호화 시 Key 값으로 사용된다.
           iv             AES 암호화 시 Initialization Vector 값.                            필수
                          샘플에서는 System.currentTimeMillis 를 사용하였으나 실
                          제 개발 시에는 유출되지 않을 값으로 변경이 필요하다.
                          Initialization Vector 값은 AES 암호화 시 유동적으로 생
                          성된 값을 사용하는 것을 추천한다.
     encryptItemId        Encrypt 된 구매하려는 아이템 아이디                                       필수

수신 Parameters

       Parameter                                                  설명


                                                                                       Page :33/47
KT Android olleh 마켓 연동   문서번호             버전     V 1.8   쪽      34
                        가이드                      작성자    홍유리/이주영   최종수정일자         2010.12.20


           Map                 iv : 결과값을 Decrypt 할 키 값
                               result : 결과값 (Result Code 값은 아래에 상세 설명)

Result Code 값 설명

         Parameter                                         설명
             0                 결제 성공
            100                입력 파라미터 오류
            200                사용자 인증 오류
            300                KHUB 과금 오류 리턴 값
            800                올레마켓에서 구매하지 않은 어플리케이션.
            900                네트워크 접속 오류
            901                사설 Wi-Fi 망에서 사용 불가
            998                결제를 진행하는 동안 문제가 발생
            999                기타 일반적인 오류

Throws

         Exception                                         설명
    RemoteException            RemoteMethod 호출 중에 발생하는 예외

Activity Sample

 importjava.util.Map;

 importandroid.app.Activity;

 importandroid.app.AlertDialog;
 importandroid.app.ProgressDialog;

 importandroid.content.ComponentName;

 importandroid.content.Context;

 importandroid.content.DialogInterface;

 importandroid.content.Intent;

 importandroid.content.ServiceConnection;

 importandroid.os.Bundle;

 importandroid.os.Handler;

 importandroid.os.IBinder;

 importandroid.os.Message;

 importandroid.util.Log;

 importandroid.view.View;

 importandroid.view.View.OnClickListener;

 importandroid.widget.Button;



                                                                                 Page :34/47
KT Android olleh 마켓 연동        문서번호                     버전   V 1.8   쪽      35
                   가이드                           작성자            홍유리/이주영   최종수정일자       2010.12.20


importcom.kt.olleh.manager.purchase.AES;

importcom.kt.olleh.manager.purchase.IRemoteInAppPurchaseService;

publicclass Main extends Activity implementsOnClickListener {

         publicstaticfinalintSUCCESS = 0; // 결제 성공.

         publicstaticfinalintNPUT_PARAM_ERROR = 100; // 입력 파라미터 오류.

         publicstaticfinalintUSER_ACCREDIT_ERROR = 200; // 사용자 인증 오류.

         publicstaticfinalintKHUB_ACCOUNT_ERROR = 300; // KHUB 과금 오류.

         publicstaticfinalintNOT_OLLEHMARKET_APP = 800; // 올레마켓에서 구매하지 않은 어플리케이션.

         publicstaticfinalintNETWORK_ERROR = 900; // 네트워크 접속 오류.

         publicstaticfinalintNETWORK_NON_WIFI = 901; // 사설Wi-Fi에서는 사용할 수 없음.

         publicstaticfinalintACCOUNT_FAIL = 998; // 결제를 진행하는 동안 문제가 발생

         publicstaticfinalintGENERAL_ERROR = 999; // 기타 일반적인 오류.

         privateintmResultCode = 999;

         private Button mButton;

         privateProgressDialogmProgressDialog;



         // mHandler인스턴스에게 전달 되는 모든 메시지를 처리함.

         private Handler mHandler = new Handler() {

                  @Override

                  publicvoidhandleMessage(Message msg) {

                            String text = "기타 일반적인 오류.";

                            switch (mResultCode) {

                                     caseSUCCESS:
                                              text = "결제 성공.";

                                              break;

                                     caseINPUT_PARAM_ERROR:

                                              text = "입력 파라미터 오류.";

                                              break;

                                     caseUSER_ACCREDIT_ERROR:

                                              text = "사용자 인증 오류.";

                                              break;

                                     caseKHUB_ACCOUNT_ERROR:

                                              text = "KHUB 과금 오류.";

                                              break;

                                     caseNOT_OLLEHMARKET_APP:
                                              text = "올레마켓에서 구매하지 않은 어플리케이션.";

                                              break;

                                                                                       Page :35/47
KT Android olleh 마켓 연동       문서번호                          버전         V 1.8    쪽      36
              가이드                           작성자           홍유리/이주영         최종수정일자             2010.12.20


                               caseNETWORK_ERROR:

                                          text = "네트워크 접속 오류.";

                                          break;

                               caseNETWORK_NON_WIFI:

                                          text = "Wi-Fi에서는 사용할 수 없음.";

                                          break;

                               caseACCOUNT_FAIL:

                                          text = "결제를 진행하는 동안 문제가 발생했습니다.";

                                          break;

                               default: // GENERAL_ERROR

                                          text = "기타 일반적인 오류.";

                                          break;

                     }

                     AlertDialog.Builder dialog = new AlertDialog.Builder(Main.this);

                     dialog.setMessage(text);

                     dialog.setPositiveButton("확인", newDialogInterface.OnClickListener() {

                               @Override

                               publicvoid onClick(DialogInterface dialog, int which) {

                                          dialog.dismiss();

                                          mButton.setEnabled(true); // 구매 버튼을 활성화한다.

                               }

                     }); // 업데이트.

                     dialog.create(); // 생성..
                     dialog.show(); // 화면에 표시..

          }

};



/** Called when the activity is first created. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.main);

          mButton = (Button) findViewById(R.id.btn_bind);

          mButton.setOnClickListener(this);

}


@Override

                                                                                             Page :36/47
KT Android olleh 마켓 연동            문서번호                                   버전            V 1.8          쪽         37
                    가이드                                 작성자             홍유리/이주영               최종수정일자                     2010.12.20


         publicvoid onClick(View v) {

                  switch (v.getId()) {

                              caseR.id.btn_bind: { // Remote Service Bind.

                                         mButton.setEnabled(false); // 구매 버튼을 비활성화한다.



                                         mProgressDialog = newProgressDialog(Main.this);

                                         mProgressDialog.setMessage("결제를 요청중입니다.");

                                         mProgressDialog.setIndeterminate(true);

                                         mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

                                         mProgressDialog.show();



// 오래 걸리는 작업을 work thread에서 실행 함

new Thread(new Runnable() {



         // 제시도 횟수를 설정한다. 개발 시 적정한 값으로 설정.

         privatestaticfinalintRETRY_COUNT = 5;



         privatebooleanmIsInAppPurchaseConnect = false;



         publicvoid run() {

                  try {

                              /* ====================================================*/

                              // [필수] Remote In App Purchase에 Bind한다.
                              mIsInAppPurchaseConnect = bindService(new

Intent(IRemoteInAppPurchaseService.class.getName()), mServiceConnection,Context.BIND_AUTO_CREATE);



                              // RemoteInAppPurchaseService의 Interface를 생성할 때까지 잠시 대기한다.

                              for (int i = 0; i <RETRY_COUNT; i++) {

                                         if (mRemoteInAppPurchaseService != null) {

                                                     break;

                                         }
                                         Log.v("InAppPurchaseTest", "Remote In App Purchase Service Connecte Retry Count: " + (i + 1));

                                         try {

                                                     Thread.sleep(100);

                                         }
                                         catch (Exception e) {

                                         }

                                                                                                                        Page :37/47
KT Android olleh 마켓 연동           문서번호                                 버전            V 1.8         쪽         38
    가이드                               작성자             홍유리/이주영               최종수정일자                    2010.12.20


            }

            /* ==================================================== */



            // RemoteInAppPurchaseService의 Interface를 생성하지 못하면 에러로 처리한다.

            if (mRemoteInAppPurchaseService == null) {
                       thrownewNullPointerException("RemoteInAppPurchaseService Interface Create Fail..");

            }
            Log.v("InAppPurchaseTest", "Remote In App Purchase Service Connecte Result: " + mIsInAppPurchaseConnect);




            // 아이템 결제를 요청한다.

            String iv = String.valueOf(System.currentTimeMillis());

            AES aes = new AES(getPackageName(), iv);
            String encryptItemId = aes.encrypt("I00000001"); // 구매하고자 하는 아이템 아이디 암호화.



            @SuppressWarnings("unchecked")
            Map<String, String> map = mRemoteInAppPurchaseService.purchase(getPackageName(), iv, encryptItemId);

            Log.i("InAppPurchaseTest", "Result Map : " + map.toString());



            String resultIv = map.get("iv");

            aes = new AES(getPackageName(), resultIv);

            String result = aes.decrypt(map.get("result"));



            // 구매결과 복호화한 후 Integer로 변환한다.
            mResultCode = parseInt(aes.decrypt(map.get("result")), mResultCode);

            Log.i("InAppPurchaseTest", "IV : " + resultIv);

            Log.i("InAppPurchaseTest", "Result : " + result);

}

catch (Exception e) {

            Log.e("InAppPurchaseTest", e.getMessage(), e);

            mResultCode = ACCOUNT_FAIL;

}

finally {

            /* =====================================================*/

            if (mIsInAppPurchaseConnect == true) {

                       try {
                                   // [필수] Remote In App Purchase에 Unbind한다.

                                   unbindService(mServiceConnection);

                                                                                                     Page :38/47
KT Android olleh 마켓 연동        문서번호                                 버전           V 1.8          쪽         39
                           가이드                            작성자             홍유리/이주영               최종수정일자                   2010.12.20


                                                        Log.v("InAppPurchaseTest", ">> Remote In App Purchase Service Disconnecte<<");

                                                        mIsInAppPurchaseConnect = false;

                                            }

                                            catch (Exception e) {

                                                        Log.e("InAppPurchaseTest", e.getMessage(), e);

                                            }

                                  }

                                  /* =====================================================*/



                                  // ProgressDialog가 끝남과 동시에 화면이 보여지도록 하기 위해서 이곳에 정의했음.

                                  mProgressDialog.dismiss();



                                  // mHnadler의 handleMessage(Message)에 의해 처리됨.

                                  mHandler.sendMessage(mHandler.obtainMessage());

                       }

             }

}).start()

                                            break;

                                  }

                       }

             }



             /** String을 Integer로 변환한다. */
             publicstaticintparseInt(String str, intdefaultValue) {

                       if (str == null) {

                                  returndefaultValue;

                       }

                       try {

                                  returnInteger.parseInt(str);

                       }

                       catch (NumberFormatExceptionnfe) {

                                  returndefaultValue;

                       }

             }


             /* ================ RemoteInAppPurchaseService Connect Start ================ */

             privateIRemoteInAppPurchaseServicemRemoteInAppPurchaseService = null;

                                                                                                                         Page :39/47
KT Android olleh 마켓 연동      문서번호                             버전          V 1.8       쪽        40
                      가이드                           작성자          홍유리/이주영            최종수정일자                 2010.12.20



         privateServiceConnectionmServiceConnection = newServiceConnection() {



                  @Override

                  publicvoidonServiceConnected(ComponentName name, IBinder service) {
                             mRemoteInAppPurchaseService = IRemoteInAppPurchaseService.Stub.asInterface(service);

                             Log.v("InAppPurchaseTest", "Remote In App Purchase Service Connected..");

                  }



                  @Override

                  publicvoidonServiceDisconnected(ComponentNamep_name) {

                             Log.v("InAppPurchaseTest", "Remote In App Purchase Service Disconnected..");

                             mRemoteInAppPurchaseService = null;

                  }

         };

         /* ================RemoteInAppPurchaseService Connect End ================ */

}

샘플소스는 In App Purchase를 통한 아이템 결제 결제는 Thread를 생성해서 처리했으며,
ProgressDialog를 이용해서 진행 중 표시를 사용자에게 노출하였다. Thread에서 처리가 완료 된 후에는
Handler와 통신하여 결제 결과를 AlertDialog로 사용자에게 결과를 노티 하였다.
In App Purchase를 통해서 결제를 요청하는 경우 완료 되기 이전에는 타 Activity로 이동을 하는 경우
결과값을 수신 할 수 없어서 에러를 발생할 수 있다.
결제 결과 대기시간은 ConnectionTimeOut : 20초, SocketTimeOut : 20초로 최대 40초가 소요 될 수 있다.
샘플 소스는 추후 추가 또는 수정될 수 있음.


8.2. In App Purchase 연동을 위한 AIDL 생성


AIDL 생성 패키지명 (변경 불가)

com.kt.olleh.manager.purchase

AIDL 생성 클래스명 (변경 불가)

IRemoteInAppPurchaseService.aidl

IRemoteInAppPurchaseService.aidl 생성 (변경 불가)

package com.kt.olleh.manager.purchase;

interface IRemoteInAppPurchaseService {



                                                                                                          Page :40/47
KT Android olleh 마켓 연동       문서번호                     버전   V 1.8   쪽      41
                    가이드                           작성자          홍유리/이주영    최종수정일자       2010.12.20


     Map purchase(String packageName, String iv, String encryptItemId);

     Map cancel(String packageName, String iv, String encryptItemId);

 }

* 결제 취소 기능(cancel())은 추후 적용 예정



8.3. In App Purchase Sequence Diagram




In App Purchase를 통한 아이템 구매를 요청한 경우는 완료되기 전에 다른 작업을 진행할 수 없다.
1 :bindService에서 15 : unbindService는 하나의 세션 내에서 처리하여야 한다.



8.4. In App Purchase 연동을 위한 AES 암호화


IV 사용

블록 암호의 운용 모드(Block engine modes of operation)가 CBC/OFB/CFB를 사용할 경우에는
Initialization Vector(IV)를 설정해야 한다.


                                                                                       Page :41/47
KT Android olleh 마켓 연동        문서번호                              버전          V 1.8         쪽     42
                          가이드                            작성자            홍유리/이주영             최종수정일자                 2010.12.20

In App Purchase에서 사용하는 AES 암호화 클래스는 CBC로 개발되어서 Initialization Vector(IV)를
사용한다.

AES 암호화 클래스(필수)

packagecom.kt.olleh.manager.purchase;
importjava.lang.reflect.Method;
importjava.security.MessageDigest;
importjavax.crypto.Cipher;
importjavax.crypto.spec.IvParameterSpec;
importjavax.crypto.spec.SecretKeySpec;
importandroid.util.Log;
publicclass AES {
        private Cipher mCipher;
        privateSecretKeySpecmKey;
        privateIvParameterSpecmIv;


        /**

            * Creates a StringEncrypter instance.

            * @param key A key string which is converted into UTF-8 and hashed by MD5. Null or an empty string is not allowed.

            * @param iv An initial vector string which is converted into UTF-8 and hashed by MD5.

            * @throws Exception

            */

        public AES(String key, String iv) throws Exception {
                      if (key == null || "".equals(key)) {
                                 thrownewNullPointerException("The key cannot be null or an empty string..");

                      }
                      if (iv == null || "".equals(iv)) {
                                 thrownewNullPointerException("The initial vector cannot be null or an empty string.");

                      }
                      mCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                      // Initialize an encryption key and an initial vector.
                      MessageDigest md5 = MessageDigest.getInstance("MD5");
                      mKey = newSecretKeySpec(md5.digest(key.getBytes("UTF-8")), "AES");
                      mIv = newIvParameterSpec(md5.digest(iv.getBytes("UTF-8")));
        }


        /**



                                                                                                                   Page :42/47
KT Android olleh 마켓 연동         문서번호                              버전          V 1.8          쪽      43
                  가이드                              작성자           홍유리/이주영             최종수정일자                   2010.12.20


    * Encrypts a string.

    * @param value A string to encrypt. It is converted into UTF-8 before being encrypted

    * @return An encrypted string.

    * @throws Exception

    */

public String encrypt(String value) throws Exception {
              if (value == null || "".equals(value)) {
                           thrownewNullPointerException("The cipher string cannot be null or an empty string.");

              }
              // Initialize the cryptography algorithm.
              if (mIv == null || "".equals(mIv)) {
                           mCipher.init(Cipher.ENCRYPT_MODE, mKey);
              }
              else {
                           mCipher.init(Cipher.ENCRYPT_MODE, mKey, mIv);
              }
              // Get a UTF-8 byte array from a unicode string.
              byte[] utf8Value = value.getBytes("UTF-8");
              // Encrypt the UTF-8 byte array.
              byte[] encryptedValue = mCipher.doFinal(utf8Value);
              // Return a base64 encoded string of the encrypted byte array.
              returnnew String(encodeBase64(encryptedValue));
}


/**

    * Decrypts a string which is encrypted with the same key and initial vector.

    * @param value A string to decrypt. It must be a string encrypted with the same key and initial vector.

    * @return A decrypted string

    * @throws Exception

    */

public String decrypt(String value) throws Exception {
              if (value == null || "".equals(value)) {
                           thrownewNullPointerException("The cipher string cannot be null or an empty string.");

              }
              // Initialize the cryptography algorithm.
              if (mIv == null || "".equals(mIv)) {
                           mCipher.init(Cipher.DECRYPT_MODE, mKey);

                                                                                                            Page :43/47
KT Android olleh 마켓 연동              문서번호                                     버전             V 1.8          쪽          44
                   가이드                                   작성자              홍유리/이주영                 최종수정일자                      2010.12.20


               }
               else {
                            mCipher.init(Cipher.DECRYPT_MODE, mKey, mIv);
               }
               // Get an encrypted byte array from a base64 encoded string.
               byte[] encryptedValue = AES.decodeBase64(value.getBytes());
               // Decrypt the byte array.
               byte[] decryptedValue = mCipher.doFinal(encryptedValue);
               // Return a string converted from the UTF-8 byte array.
               returnnew String(decryptedValue, "UTF-8");
}


/**

    * Converts a binary data into a Base64 encoded string. If the binary data is null or a zero-length array, an empty string is returned.

    */

publicstaticbyte[] encodeBase64(byte[] binaryData) {
               byte[] buf = null;
               try {
                            Class<?> Base64 = Class.forName("org.apache.commons.codec.binary.Base64");

                            Class<?>[] parameterTypes = new Class<?>[] { byte[].class };
                            Method encodeBase64 = Base64.getMethod("encodeBase64", parameterTypes);

                            buf = (byte[]) encodeBase64.invoke(Base64, binaryData);
               }
               catch (Exception e) {
                            Log.e("AES", e.toString(), e);
               }
               returnbuf;
}


/**

    * Converts a Base64 encoded string into a binary data. If the string is null or an empty string, a zero-length array is returned.

    */

publicstaticbyte[] decodeBase64(byte[] base64Data) {
               byte[] buf = null;
               try {
                            Class<?> Base64 = Class.forName("org.apache.commons.codec.binary.Base64");

                            Class<?>[] parameterTypes = new Class<?>[] { byte[].class };

                                                                                                                             Page :44/47
KT Android olleh 마켓 연동    문서번호                      버전        V 1.8     쪽       45
                가이드                        작성자         홍유리/이주영       최종수정일자             2010.12.20


                       Method decodeBase64 = Base64.getMethod("decodeBase64" parameterTypes);
                                                              "decodeBase64",

                              byte[])
                       buf = (byte[]) decodeBase64.invoke(Base64, base64Data);
            }
            catch (Exception e) {
                       Log.e("AES" e.toString(), e);
                             "AES",
            }
            returnbuf;
       }


}




8.5. In App Purchase 테스트를 위한 설정

In App Purchase 테스트를 위해서 olleh 마켓 Setting 어플리케이션을 이용한다.

In App Purchase 테스트를 위한 설정 절차

1) 올레마켓에 어플리케이션을 등록하여 APPID와 ITEM ID를 발급받지 않은 상태에서 in app purchase
    연동 규격 준수 여부를 확인하고자 하는 경우 이용한다. olleh 마켓 연동 서버를 테스트서버로
    변경하고 in app purchase 테스트를 진행한다. 테스트용 Item ID는 테스트서버에서만 유효하다.




                                                                                       Page :45/47
KT Android olleh 마켓 연동   문서번호             버전   V 1.8   쪽      46
          가이드                      작성자    홍유리/이주영   최종수정일자       2010.12.20



2) 1)의 과정을 통해 어플리케이션이 연동 규격을 준수하였음을 확인한 후 APPID
                                          APPID와 ITEM ID로 실제
  올레마켓 서버와의 연동 확인은 아래와 방법으로 가능하다. 메뉴 서버는 상용 서버로 변경하여
  테스트를 진행해야 한다.




                                                                 Page :46/47
KT Android olleh 마켓 연동   문서번호                       버전        V 1.8   쪽      47
                   가이드                       작성자         홍유리/이주영        최종수정일자           2010.12.20



8.6. In App Purchase 를 지원하는 olleh 마켓 최소 버전 정보 추출

적용 대상: 스마트폰
olleh 마켓이 In App Purchase를 지원하는 VersionCode는“2010”버전 이상부터 지원한다.
        Preload 버전 olleh마켓 패키지명 :com.kt.olleh.storefront
        인스톨 버전 olleh 마켓 패키지명 :com.kt.olleh.istore
        olleh 마켓 In App Purchase 기능 지원 Version Code : 2010
    Android Native API를 이용해서 olleh 마켓 VersionCode를 가져온다.



olleh 마켓 Version Code 추출 Sample

try {
         PackageManager pm = getPackageManager();
         PackageInfopackageInfo = pm.getPackageInfo("com.kt.olleh.storefront", 0);
         intversionCode = packageInfo.versionCode;


         // Version Code 값이 “2010” 버전 이상인 경우에만 In App Purchase를 지원한다..

         if (versionCode>= 2010) {
                  // RemoteInAppPurchaseService 연결 및 결제.
         }
}
catch (Exception e) {
         e.printStackTrace();
}




                                                                                         Page :47/47

More Related Content

Similar to Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

Android발표자료 홍종진
Android발표자료 홍종진Android발표자료 홍종진
Android발표자료 홍종진Jong Jin Hong
 
H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0
H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0
H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0KTH
 
제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209
제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209
제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209Hark ( Daniel ) SOHN
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론Sang Seok Lim
 
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입Chanjin Park
 
신동형의 발로 뛰는 ICT Insight Vol3
신동형의 발로 뛰는 ICT Insight Vol3신동형의 발로 뛰는 ICT Insight Vol3
신동형의 발로 뛰는 ICT Insight Vol3Donghyung Shin
 
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼MarketingUracle
 
강의자료 차세대 웹(Html5) 플랫폼의 동향과 구축 방안
강의자료   차세대 웹(Html5) 플랫폼의 동향과 구축 방안강의자료   차세대 웹(Html5) 플랫폼의 동향과 구축 방안
강의자료 차세대 웹(Html5) 플랫폼의 동향과 구축 방안욱래 김
 
스마트 디바이스 최근 개발 이슈와 트렌드
스마트 디바이스 최근 개발 이슈와 트렌드스마트 디바이스 최근 개발 이슈와 트렌드
스마트 디바이스 최근 개발 이슈와 트렌드Kenu, GwangNam Heo
 
Citrine소개서
Citrine소개서Citrine소개서
Citrine소개서logeo
 
FMC 표준 연구와 표준 SDK
FMC 표준 연구와 표준 SDKFMC 표준 연구와 표준 SDK
FMC 표준 연구와 표준 SDKxenersystems
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론Hankyo
 
Active ad 광고라이브러리 소개
Active ad 광고라이브러리 소개Active ad 광고라이브러리 소개
Active ad 광고라이브러리 소개logeo
 
모바일 웹플랫폼 기술 동향
모바일 웹플랫폼 기술 동향모바일 웹플랫폼 기술 동향
모바일 웹플랫폼 기술 동향Jong Jin Hong
 
2011년도 모바일 웹 vs. 모바일앱 전망
2011년도 모바일 웹 vs. 모바일앱 전망2011년도 모바일 웹 vs. 모바일앱 전망
2011년도 모바일 웹 vs. 모바일앱 전망Seungyul Kim
 
Smart update & patch
Smart update & patchSmart update & patch
Smart update & patchDevgear
 
Google analytics in business
Google analytics in businessGoogle analytics in business
Google analytics in businessTae Young Lee
 
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSAVMware Tanzu Korea
 
원모먼트 Vue js 적용기
원모먼트 Vue js 적용기원모먼트 Vue js 적용기
원모먼트 Vue js 적용기우현 김
 

Similar to Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8 (20)

Android발표자료 홍종진
Android발표자료 홍종진Android발표자료 홍종진
Android발표자료 홍종진
 
H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0
H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0
H3 2011 하이브리드 앱의 미래, 앱스프레소 1.0
 
제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209
제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209
제10회 정보접근성 동향 세미나 발표자료(에스크레인 손학) v1.4 20141209
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론
 
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
임베디드 소프트웨어 개발에 아키텍처 프랙티스 도입
 
신동형의 발로 뛰는 ICT Insight Vol3
신동형의 발로 뛰는 ICT Insight Vol3신동형의 발로 뛰는 ICT Insight Vol3
신동형의 발로 뛰는 ICT Insight Vol3
 
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼
 
Open platform/API overview
Open platform/API overviewOpen platform/API overview
Open platform/API overview
 
강의자료 차세대 웹(Html5) 플랫폼의 동향과 구축 방안
강의자료   차세대 웹(Html5) 플랫폼의 동향과 구축 방안강의자료   차세대 웹(Html5) 플랫폼의 동향과 구축 방안
강의자료 차세대 웹(Html5) 플랫폼의 동향과 구축 방안
 
스마트 디바이스 최근 개발 이슈와 트렌드
스마트 디바이스 최근 개발 이슈와 트렌드스마트 디바이스 최근 개발 이슈와 트렌드
스마트 디바이스 최근 개발 이슈와 트렌드
 
Citrine소개서
Citrine소개서Citrine소개서
Citrine소개서
 
FMC 표준 연구와 표준 SDK
FMC 표준 연구와 표준 SDKFMC 표준 연구와 표준 SDK
FMC 표준 연구와 표준 SDK
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
Active ad 광고라이브러리 소개
Active ad 광고라이브러리 소개Active ad 광고라이브러리 소개
Active ad 광고라이브러리 소개
 
모바일 웹플랫폼 기술 동향
모바일 웹플랫폼 기술 동향모바일 웹플랫폼 기술 동향
모바일 웹플랫폼 기술 동향
 
2011년도 모바일 웹 vs. 모바일앱 전망
2011년도 모바일 웹 vs. 모바일앱 전망2011년도 모바일 웹 vs. 모바일앱 전망
2011년도 모바일 웹 vs. 모바일앱 전망
 
Smart update & patch
Smart update & patchSmart update & patch
Smart update & patch
 
Google analytics in business
Google analytics in businessGoogle analytics in business
Google analytics in business
 
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
 
원모먼트 Vue js 적용기
원모먼트 Vue js 적용기원모먼트 Vue js 적용기
원모먼트 Vue js 적용기
 

Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

  • 1. KT Android olleh마켓 연동 가이드 (V 1.8) 2010. 12. 컨버전스와이브로 사업본부 단말연구센터
  • 2. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 2 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 개정이력 버전 변경일 변경사항 작성자 V 1.0 2010.04.07 - olleh 마켓 App Manager 최초작성 V 1.0 2010.04.19 - 1.3. 셀프 업데이트 확인 사용을 위한 초기 페이지에 추가되는 기능 - SELF_UPDATE_CHECK_BROADCAST에서 SELF_UPDATE_CHECK_RECEIVERD로 변경 V 1.0 2010.05.10 - 3. 플랫폼 SMS 수신 연동 규격 - Activity 에서BroadcastReceiver로 변경 result payload로 수정 V 1.0 2010.05.10 - vnd.show.app.manager/vnd.self.update.check에서 vnd.olleh.app.store/vnd.update.check로 변경 - “4.1. 외부 어플리케이션에서 olleh 마켓 실행 규격” 추가 V 1.0 2010.06.20 - 업데이트 요청을 MimeType에서 Action으로 변경 - 어플리케이션 종료 방법 변경. - 업데이트 요청 시 Contents의 Type Extra 추가 intent.putExtra("type", "APP"); - packagename를package_name으로 수정한다. V 1.0 2010.08.25 - “4.2. olleh 마켓 실행 중 컨텐츠 소개페이지 이동” 추가 - “[중요] 셀프 업데이트 확인 요청 시 Response 가 없는 경우 를 대비해서 방어 코드를 추가하여야 한다.” 추가 V1.2 2010.10.18 - 스마트폰/KPad/SoIP 규격 병합 V1.3 2010.10.22 - Preload 어플리케이션 버전 정보 관리 항목 추가. V1.4 2010.11.10 - In App Purchase 연동 규격서 추가. V1.5 2010.11.12 - 플랫폼 SMS 수신 연동 Receiver 샘플 추가. - 플랫폼 SMS 수신 연동 테스트 설정 방법 추가. - IRemoteInAppPurchaseService.aidl 수정. - In App Purchase 샘플 소스 수정. - Result Code값 추가 (800 - 올레마켓에서 구매하지 않은 어플리케이션) V1.5 2010.11.15 - Result Code값 추가 (998 - 결제를 진행하는 동안 문제가 발생) - 결제 취소 더미 메소드 선언. V1.5 2010.11.16 - In App Purchase을 지원하는 최소 버전 정보 추출 추가. V1.5 2010.11.18 - 플랫폼 SMS 수신 연동 규격 보완. Page :2/47
  • 3. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 3 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 V1.6 2010.12.08 - In App Purchase 테스트, 상용서버 테스트 방법 추가. V1.6 2010.12.13 - In App Purchase 샘플 소스 설명 추가. - In App Purchase Sequence Diagram 상세화, Blocking 부분 추가, 설명 추가. - In App Purchase Preload, Install 버전 olleh 마켓 별 지원 네트워크 추가. - In App Purchase Install 버전 olleh 마켓에서 네트워크 오류 ResultCode 추가(902: Install 버전 olleh 마켓에서 3G이외의 망에서 In App Purchase 결제 요청 불가.) V1.0 2010.07.08 - olleh 마켓 Front 최초작성 V1.1 2010.07.12 - 검색 규격 추가 V1.2 2010.07.20 - 웹 연동 규격 추가 V1.3 2010.07.22 - 상품 목록 규격 추가 및 MimeType 수정 규격 종류 추가 V1.4 2010.08.06 - ID/PW 입력화면 규격 추가 규격 종류 추가 V1.5 2010.08.08 - My 화면 연동 규격 추가 규격 종류 추가 V1.6 2010.08.14 - My 화면 연동 규격 내용 추가 규격 내용 추가 V1.7 2010.08.19 - RO 구매화면 연동 규격 내용 추가 규격 내용 추가 V1.8 2010.08.27 - ID/PW 입력화면 규격 변경 규격 내용 변경 V1.9 2010.08.31 - 상세화면 호출 시 성인 컨텐츠 정보 추가 규격 내용 변경 - RO 구매화면 연동 구격 변경 V1.10 2010.09.01 - RO 구매화면 연동 구격 변경 규격 내용 변경 V1.11 2010.09.03 - 브랜드 샵 리스트 이동 규격 내용 추가 규격 종류 추가 - 필수 어플 설치 페이지 이동 규격 추가 - Home 이동 규격 추가 V1.12 2010.09.07 - 웹 연동 상세화면 호출 성인 컨텐츠 정보 추가 규격 내용 변경 V1.13 2010.11.11 - 웹 연동 멀티다운로드 호출 규격 추가 규격 종류 추가 V1.14 2010.11.16 - 웹 연동 멀티다운로드 호출 규격 변경 규격 내용 변경 - N_ID 를 C_ID 로 변경 V1.15 2010.11.18 - 상품 목록 규격 내용 변경 규격 내용 변경 - 기존 필수 항목을 필수와 옵션으로 구분 문구 오류 수정 - 일부 타이틀 문구 오류 수정 규격 통합 - SP/SoIP/PAD 규격 통합 V1.16 2010.12.08 - 다운로드 중지 페이지 규격 추가 규격 종류 추가 V1.17 2010.12.14 - 파라미터 option 항목 정리 규격 내용 변경 V1.8 2010.12.14 - olleh 마켓 Front와 App Manager 연동 규격 통합 및 보완 - Page :3/47
  • 4. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 4 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 목차 1. 개요 ...................................................................................................................................................................... 6 1.1. 목적 .................................................................................................................................................................................................. 6 1.2. 적용범위......................................................................................................................................................................................... 6 2. INTENT 호출 규격 ............................................................................................................................................. 7 2.1. CONTENT 상세화면 ..................................................................................................................................................................... 7 2.1.1. Content 상세화면 Intent parameter 정의 ........................................................................................................... 7 2.1.2. Content 상세화면 Intent parameter 정의 ........................................................................................................... 8 2.2. 검색 .................................................................................................................................................................................................. 9 2.2.1. 검색 Intent parameter 정의 ....................................................................................................................................... 9 2.2.2. 검색 호출 예시 ................................................................................................................................................................. 9 2.3. 상품 목록 ..................................................................................................................................................................................... 10 2.3.1. 상품 목록 Intent parameter 정의 .......................................................................................................................... 10 2.3.2. 상품 목록 호출 예시 .................................................................................................................................................... 11 2.4. MY 구매 화면............................................................................................................................................................................. 12 2.4.1. My 구매 화면 Intent parameter 정의 ................................................................................................................. 12 2.4.2. My 구매 화면 호출 예시 ........................................................................................................................................... 12 2.5. 브랜드샵 리스트 ....................................................................................................................................................................... 13 2.5.1. 브랜드샵 리스트 이동 Intent parameter 정의 ................................................................................................ 13 2.5.2. 브랜드샵 리스트 호출 예시 ...................................................................................................................................... 13 2.6. HOME 화면 .................................................................................................................................................................................. 14 2.6.1. Home 화면 Intent parameter .................................................................................................................................. 14 2.6.2. Home 화면 호출 예시 ................................................................................................................................................ 14 3. WEB 연동 규격 ................................................................................................................................................ 15 3.1. CONTENT 상세 화면.................................................................................................................................................................. 15 3.1.1. Content 상세 화면 정의 ............................................................................................................................................ 15 3.1.2. Content 상세 화면 호출 예시 ................................................................................................................................. 16 3.2. 검색 ................................................................................................................................................................................................ 17 3.2.1. 검색 정의 ........................................................................................................................................................................... 17 3.2.2. 검색 호출 예시 ............................................................................................................................................................... 17 3.3. 상품 목록 ..................................................................................................................................................................................... 18 3.3.1. 상품 목록 정의 ............................................................................................................................................................... 18 3.3.2. 상품 목록 호출 예시 .................................................................................................................................................... 19 3.4. MY 구매 화면............................................................................................................................................................................. 20 Page :4/47
  • 5. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 5 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3.4.1. My 구매 화면 정의....................................................................................................................................................... 20 3.4.2. My 구매 화면 호출 예시 ........................................................................................................................................... 20 3.5. 브랜드샵 리스트 ....................................................................................................................................................................... 21 3.5.1. 브랜드샵 리스트 이동 정의 ...................................................................................................................................... 21 3.5.2. 브랜드샵 리스트 화면 호출 예시 .......................................................................................................................... 21 3.6. HOME 화면 .................................................................................................................................................................................. 22 3.6.1. Home 화면........................................................................................................................................................................ 22 3.6.2. Home 화면 호출 예시 ................................................................................................................................................ 22 4. 어플리케이션 SELF UPDATE ........................................................................................................................... 23 셀프 업데이트 확인 사용을 위한 초기 페이지에 추가되는 기능 .................................................................................... 23 5. 플랫폼 SMS 수신 연동 규격 .......................................................................................................................... 26 5.1. 어플리케이션 구동 및 PARAMETER 전달 규격 ............................................................................................................... 26 5.2. 플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위한 설정 ............................................................................ 27 6. 외부 어플리케이션에서 OLLEH 마켓 실행 규격 .......................................................................................... 29 6.1. 외부 어플리케이션에서 OLLEH 마켓 실행 규격 ........................................................................................................... 29 6.2. OLLEH 마켓 실행 중 컨텐츠 소개페이지 이동.............................................................................................................. 30 7. PRELOAD 어플리케이션 버전 정보 관리 ..................................................................................................... 31 PRELOAD 어플리케이션 버전 정보 관리 ....................................................................................................................................... 31 8. IN APP PURCHASE 연동 ................................................................................................................................ 33 8.1. IN APP PURCHASE 연동규격 .................................................................................................................................................... 33 8.2. IN APP PURCHASE 연동을 위한 AIDL 생성....................................................................................................................... 40 8.3. IN APP PURCHASE SEQUENCE DIAGRAM ................................................................................................................................. 41 8.4. IN APP PURCHASE 연동을 위한 AES 암호화 .................................................................................................................... 41 8.5. IN APP PURCHASE 테스트를 위한 설정.............................................................................................................................. 45 8.6. IN APP PURCHASE 를 지원하는 OLLEH 마켓 최소 버전 정보 추출 ........................................................................... 47 Page :5/47
  • 6. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 6 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 1. 개요 1.1. 목적 본 문서는 (주)케이티(이하 KT)의 Android 단말기의 KT Application 또는 웹 브라우저상에서 olleh 마켓 과 연동 방법에 대해 기술한다. 1.2. 적용범위 KT 의 KT Applicaton 에서 Self 업데이트와 플랫폼 SMS 수신을 받는 후 App 에 전달하는 방법, 외부 어플리케이션에서 App ID 를 이용해서 어플리케이션의 상세페이지로 이동 할 수 있는 방법, In App Purchase 를 통한 어플리케이션 내 결제를 이용하는 방법을 설명한다. 단말에 따라 적용되는 규격 내용이 분기처리 되어있다. 내용은 KT 서비스 제공 계획의 변경 및 추가에 따라 추후 보완 및 변경 될 수 있다. Page :6/47
  • 7. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 7 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 2. Intent 호출 규격 Application 이 olleh 마켓 client 에 요청하는 Intent 규격을 정의한다. Intent 호출 시 package 명은 넣지 않는다. Package Name com.kt.olleh.storefront Action android.intent.action.VIEW 2.1. Content 상세화면 2.1.1. Content 상세화면 Intent parameter 정의 olleh 마켓 특정 컨텐츠의 상세 화면으로 이동한다. IS_ADULT 값은 Option 값으로 전달되지 않는 경우 성인 컨텐츠가 아닌 일반 컨텐츠로 간주한다. IS_ADULT 값이 “ADULT”이면 성인 인증을 거친 후 상세 화 면으로 이동한다. MimeType vnd.kt.olleh.storefront/detail.kt.olleh.storefront Intent parameter 정의 Column Name Type 설명 APPLICATION: 어플리케이션 MUSIC: 음악 CONTENT_TYPE String MOVIE: 영화 EBOOK_S: 이북 시리즈 상세 EBOOK: 이북 단품 m: 음악 앨범 c: 단일 상품 P_TYPE String e: 할인 상품 p: 세트 상품 b: 번들 (1+1) P_ID String Content id (상품 고유 번호) N_ID String Category id (카테고리 고유 번호) Option. IS_ADULT String 성인 콘텐트: “ADULT” Page :7/47
  • 8. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 8 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 일반 콘텐트: “” 2.1.2. Content 상세화면 Intent parameter 정의 Intent intent = new Intent(“android.intent.action.VIEW”); Intent.setType(“vnd.kt.olleh.storefront/detail.kt.olleh.storefront” ); intent.putExtra( “CONTENT_TYPE”, “APPLICATION” ); intent.putExtra(“P_TYPE”, “c”); // 대소문자구분주의 intent.putExtra(“P_ID”, “51200001483276”); // 실제 콘텐트 아이디를 넣어야 함 intent.putExtra(“N_ID”, “A001006”); // 실제 카테고리 고유번호를 넣어야 함 startActivity( intent); IS_ADULT 값을 “ADULT”로 주면 다음과 같이 성인인증을 받고서 상세 화면으로 이동한다. Page :8/47
  • 9. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 9 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 2.2. 검색 2.2.1. 검색 Intent parameter 정의 해당 KEYWORD 로 olleh 마켓 컨텐츠 검색 결과 화면으로 이동한다. MimeType vnd.kt.olleh.storefront/search.kt.olleh.storefront Intent parameter 정의 Column Name Type 설명 "A" 어플리케이션 "S" 음악 N_ID String "V" 영상 "E" 이북 KEYWORD String 검색어 (20 자 이하) 2.2.2. 검색 호출 예시 Intent intent = new Intent(“android.intent.action.VIEW” ); Intent.setType(“vnd.kt.olleh.storefront/search.kt.olleh.storefront” ); intent.putExtra(“N_ID”, “A”); // 콘텐트종류 intent.putExtra(“KEYWORD”, “KT”); // 검색어 startActivity( intent); Page :9/47
  • 10. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 10 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 2.3. 상품 목록 2.3.1. 상품 목록 Intent parameter 정의 상품 목록 화면으로 이동한다. 필수 파라미터로 CONTENT_TYPE 을 전달하면 어플리케이션, 음악, 영화, 이 북 리스트 화면으로 이동 한다. MimeType vnd.kt.olleh.storefront/list.kt.olleh.storefront Intent parameter 정의 Column Name Type 설명 APPLICATION: 어플리케이션 MUSIC: 음악 CONTENT_TYPE String MOVIE: 영화 EBOOK: 이북 Option. 현재 사용하지 않음. Category id (카테고리 고유 번호) 메인 목록의 경우 아래 중 하나 "A" 어플리케이션 N_ID String "S" 음악 "V" 영상 "E" 이북 하위 목록의 경우는 각 해당 고유 아이디 Option. 현재 사용하지 않음. IS_MAIN String Y(대표 목록) or N(하위 목록) Option. 현재 사용하지 않음. IS_NEW String Y(신규 목록) or N(인기 목록) Option. 현재 사용하지 않음. IS_FREE String Y(무료) or N(유료) 단, IS_NEW 가 N 인 경우 즉, 인기 목록의 경우만 유효함 Option. 현재 사용하지 않음. 목록 명(20 자 이하) TITLE String 예) 어플리케이션, 음악, 영상, 이북, 어플리케이션>게임, 음악> 발라드, 영상>액션, 이북>국내소설 등… Option. 현재 사용하지 않음. MUSIC_TYPE String “S” 곡 Page :10/47
  • 11. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 11 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 “M” 뮤직비디오 음악 목록의 경우만 해당됨 2.3.2. 상품 목록 호출 예시 Intent intent = new Intent(“android.intent.action.VIEW” ); Intent.setType(“vnd.kt.olleh.storefront/list.kt.olleh.storefront” ); intent.putExtra(“CONTENT_TYPE”, “MUSIC”); // 음악 startActivity( intent); Page :11/47
  • 12. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 12 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 2.4. My 구매 화면 2.4.1. My 구매 화면 Intent parameter 정의 My 구매내역 화면으로 이동한다. N_ID 값을 전달하면 어플리케이션, 음악, 영상, 이북 구매내역 화면으로 이동한다. MimeType vnd.kt.olleh.storefront/my.kt.olleh.storefront Intent parameter 정의 Column Name Type 설명 "A" 어플리케이션 "S" 음악 N_ID String "V" 영상 "E" 이북 Option. 현재 사용하지 않음. UPDATE_CHECK String Y: update check 함 N: update check 하지 않음 2.4.2. My 구매 화면 호출 예시 Intent intent = new Intent(“android.intent.action.VIEW” ); Intent.setType(“vnd.kt.olleh.storefront/my.kt.olleh.storefront” ); intent.putExtra(“N_ID”, “A”); // 콘텐트종류 startActivity( intent); Page :12/47
  • 13. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 13 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 2.5. 브랜드샵 리스트 2.5.1. 브랜드샵 리스트 이동 Intent parameter 정의 브랜드샵 리스트 화면으로 이동한다. 각 브랜드샵 ID 를 전달하면 해당 브랜드샵 리스트로 이동하며, 해당 화면의 타이틀 명을 설정할 수 있다. MimeType vnd.kt.olleh.storefront/brandshop.kt.olleh.storefront Intent parameter 정의 Column Name Type 설명 BRAND_ID String 브랜드샵 ID subTitle String 브랜드샵 타이틀 명 2.5.2. 브랜드샵 리스트 호출 예시 Intent intent = new Intent(“android.intent.action.VIEW” ); Intent.setType(“vnd.kt.olleh.storefront/brandshop.kt.olleh.storefront” ); intent.putExtra(“BRAND_ID”, “bw004”); // 삼성 브랜드샵 ID intent.putExtra(“subTitle”, “Samsung”); // 삼성 브랜드샵 타이틀 명 startActivity( intent); Page :13/47
  • 14. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 14 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 2.6. Home 화면 2.6.1. Home 화면 Intent parameter olleh 마켓의 메인(홈) 화면으로 이동한다. MimeType vnd.kt.olleh.storefront/home.kt.olleh.storefront Intent parameter 정의 Column Name Type 설명 Option. PACKAGE_NAME String 호출하는 어플리케이션의 패키지 명. 예: “kt.olleh.testpackage” 2.6.2. Home 화면 호출 예시 Intent intent = new Intent(“android.intent.action.VIEW” ); Intent.setType(“vnd.kt.olleh.storefront/home.kt.olleh.storefront” ); intent.putExtra(“PACKAGE_NAME”, “kt.olleh.testpackage”); // 패키지명 startActivity( intent); Page :14/47
  • 15. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 15 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3. Web 연동 규격 안드로이드 웹 브라우저에서 KT Olleh 마켓을 연동하는 규격으로 아래와 같은 형식을 가지며, query 문은 name=value 형식을 따른다. [schme]://[host]?query Schme cstore 3.1. Content 상세 화면 3.1.1. Content 상세 화면 정의 olleh 마켓 특정 컨텐츠의 상세 화면으로 한다. IS_ADULT 값은 Option 값으로 없을 경우 성인 컨텐츠가 아닌 일반 컨텐츠로 간주한다. IS_ADULT 값이 “ADULT”이면 성인 인증을 거친 후 상세 화면으로 이동한다. HOST 명 detail Query 정의 Column Name Type 설명 APPLICATION: 어플리케이션 MUSIC: 음악 CONTENT_TYPE String MOVIE: 영화 EBOOK_S: 이북 시리즈 상세 EBOOK: 이북 단품 m: 음악 앨범 c: 단일 상품 P_TYPE String e: 할인 상품 p: 세트 상품 b: 번들 (1+1) P_ID String Content id (상품 고유 번호) Category id (카테고리 고유 번호) N_ID String Option. IS_ADULT String 성인 콘텐트: “ADULT” 일반 콘텐트: “” Page :15/47
  • 16. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 16 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3.1.2. Content 상세 화면 호출 예시 Ex. 어플리케이션상세페이지호출 cstore://detail?CONTENT_TYPE=APPLICATION&P_TYPE=c&P_ID=A001006&N_ID=51200001483276 IS_ADULT 값을 “ADULT”로 주면 다음과 같이 성인인증을 받고서 상세 화면으로 이동한다. Page :16/47
  • 17. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 17 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3.2. 검색 3.2.1. 검색 정의 해당 KEYWORD 로 olleh 마켓 컨텐츠 검색 결과 화면으로 이동한다. HOST 명 search Query 정의 Column Name Type 설명 "A" 어플리케이션 "S" 음악 N_ID String "V" 영상 "E" 이북 KEYWORD String 검색어(20 자 이하) 3.2.2. 검색 호출 예시 Ex. 어플리케이션 검색 호출 cstore://search?N_ID=A&KEYWORD=KT Page :17/47
  • 18. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 18 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3.3. 상품 목록 3.3.1. 상품 목록 정의 상품 목록 화면으로 이동한다. 필수 파라미터로 CONTENT_TYPE 을 주면, 어플리케이션, 음악, 영화, 이북 리스트 화면으로 이동 한다. HOST 명 list Query 정의 Column Name Type 설명 APPLICATION: 어플리케이션 MUSIC: 음악 CONTENT_TYPE String MOVIE: 영화 EBOOK: 이북 Option. Category id (카테고리 고유 번호) 메인 목록의 경우 아래 중 하나 "A" 어플리케이션 N_ID String "S" 음악 "V" 영상 "E" 이북 하위 목록의 경우는 각 해당 고유 아이디 Option. IS_MAIN String Y(대표 목록) or N(하위 목록) Option. IS_NEW String Y(신규 목록) or N(인기 목록) Option. IS_FREE String Y(무료) or N(유료) 단, IS_NEW 가 N 인 경우 즉, 인기 목록의 경우만 유효함 Option. 목록 명(20 자 이하) TITLE String 예) 어플리케이션, 음악, 영상, 이북, 어플리케이션>게임, 음악> 발라드, 영상>액션, 이북>국내소설 등… Option. MUSIC_TYPE String “S” 곡 Page :18/47
  • 19. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 19 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 “M” 뮤직비디오 음악 목록의 경우만 해당됨 3.3.2. 상품 목록 호출 예시 Ex. 음악 상품 목록 호출 cstore://list?CONTENT_TYPE=MUSIC Page :19/47
  • 20. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 20 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3.4. My 구매 화면 3.4.1. My 구매 화면 정의 My 구매내역 화면으로 이동한다. N_ID 값을 전달하면 어플리케이션, 음악, 영상, 이북 구매내역 화면으로 이동한다. HOST 명 my Query 정의 Column Name Type 설명 "A" 어플리케이션 "S" 음악 N_ID String "V" 영상 "E" 이북 현재 사용하지 않음. UPDATE_CHECK String Y: update check 함 N: update check 하지 않음 3.4.2. My 구매 화면 호출 예시 Ex. 어플리케이션 구매 화면 호출 cstore://my?N_ID=A&UPDATE_CHECK=N Page :20/47
  • 21. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 21 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3.5. 브랜드샵 리스트 3.5.1. 브랜드샵 리스트 이동 정의 브랜드샵 리스트 화면으로 이동한다. 각 브랜드샵 ID 를 전달하면 해당 브랜드샵 리스트로 이동하며, 해당 화면의 타이틀 명을 설정할 수 있다. HOST 명 brandshop Query 정의 Column Name Type 설명 BRAND_ID String 브랜드샵 ID subTitle String 브랜드샵 타이틀 명 3.5.2. 브랜드샵 리스트 화면 호출 예시 Ex. 브랜드샵 리스트 호출 cstore://brandshop?BRAND_ID=bw004&subTitle=Samsung Page :21/47
  • 22. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 22 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 3.6. Home 화면 3.6.1. Home 화면 olleh 마켓의 메인(홈) 화면으로 이동한다. HOST 명 home Query 정의 Column Name Type 설명 Option. PACKAGE_NAME String 호출하는 어플리케이션의 패키지 명. 예: “kt.olleh.testpackage” 3.6.2. Home 화면 호출 예시 Ex. Home 화면호출 cstore://home?PACKAGE_NAME=kt.olleh.testpackage Page :22/47
  • 23. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 23 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 4. 어플리케이션 SELF Update 셀프 업데이트 확인 사용을 위한 초기 페이지에 추가되는 기능 적용 대상: olleh 마켓이 설치된 모든 단말 셀프 업데이트 확인 기능을 사용하기 위하여 다음과 같은 코드를 Application 초기 화면 페이지에 추가 하여야 한다. Application 업데이트가 존재하는 경우 사용자에게 공지할 수 있다. Self Update 호출 MimeType vnd.olleh.app.store/vnd.update.check 전달 Parameters Parameter 설명 Uri (Data) [Uri] 업데이트를 확인하기 위한 App 의 필수 PackageName(getPackageName()) 입력 BoradcastReceiver (App 업데이트 확인을 수신하기 위한 Receiver 등록) [어플리케이션 Package Name]+ ".action.SELF_UPDATE_CHECK_RECEIVERD" [어플리케이션 Package Name]은 App 개발 시 최초 등록한 PackageName 을 설명 등록한다. 수신 Parameters Parameter 설명 result [BOOLEAN] 최신 업데이트 버전 확인 결과 예제 intent.putExtra("result", true) 수신 Value Value 설명 true 최신 업데이트 버전 존재함. false 최신 업데이트 버전 없음. Throws Exception 설명 없음 Page :23/47
  • 24. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 24 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 초기 화면을 Create 시 업데이트 확인 Receiver 등록 Sample publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // App Manager에Self Update 확인 요청 후 아래와 같이 Broadcast한다. registerReceiver(receiver, newIntentFilter(getPackageName() + ".action.SELF_UPDATE_CHECK_RECEIVERD")); // 셀프 업데이트를 검사 한다. 검사 확인은 Broadcast로 노티 한다. // 서비스 호출은 mimeType을 사용한다. Intent intent = new Intent(); Uri uri = Uri.parse(getPackageName()); intent.setDataAndType(uri,"vnd.olleh.app.store/vnd.update.check"); startService(intent); } /** * App Manager가 Self Update 확인 후 Broadcast 로 결과를 전달해주는 값을 받는다. */ private BroadcastReceiver receiver = new BroadcastReceiver() { @Override publicvoid onReceive(Context context, Intent intent) { // 최신 버전 존재 : true, 현재 버전이 최신 버전인 경우 : false boolean isResult = intent.getExtras().getBoolean("result"); // [필수 사항] 추가하지 않으면 현재 Activity를 빠져나가는 동안 에러가 발생한다. unregisterReceiver(receiver); // AlertDialog UI와 문구는 KT UX가이드를 참조한다. // 업그레이드가 있는 경우는 사용자에게 확인을 요청 후 다운로드를 클릭 시 // 다운로드 및 업데이트를 진행한다. if (isResult) { AlertDialog.BuildermAlertDialog = new AlertDialog.Builder(this); mAlertDialog.setMessage("업데이트를 진행하시겠습니까?n" + "업데이트를 계속 진행하면 어플이 종료됩니다."); Page :24/47
  • 25. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 25 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 // false : Back버튼으로 대화상자를 닫지 못하도록 한다. mAlertDialog.setPositiveButton("확인", newDialogInterface.OnClickListener() { @Override publicvoid onClick(DialogInterface dialog, int which) { Intent intent = new Intent("com.kt.olleh.intent.action.UPDATE"); intent.putExtra("type", “APP”); intent.putExtra("package_name", Main.this.getPackageName()); startService(intent); // Application 종료.. ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); am.restartPackage(getPackageName()); } }); // 업데이트. mAlertDialog.setNegativeButton("취소", newDialogInterface.OnClickListener() { @Override publicvoid onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // 취소한다. mAlertDialog.create(); // 생성 mAlertDialog.show(); // 화면에 표시 } } }; 어플리케이션 종료를 사용하기 위해서는 다음과 같은 퍼미션이 필요함. <!-- 어플리케이션을 종료할 수 있는 권한 추가 --> <uses-permissionandroid:name="android.permission.RESTART_PACKAGES" /> Page :25/47
  • 26. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 26 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 5. 플랫폼 SMS 수신 연동 규격 5.1. 어플리케이션 구동 및 Parameter 전달 규격 적용 대상: 스마트폰, SoIP Application ID를 기반으로 해당 하는 어플리케이션을 구동시키고 Parameter를 전달하기 위한 규격을 정의 한다. 플랫폼SMS를 전달 받으려는 어플리케이션은 Receiver의 intent-filter에action을 정의한다. 스마트폰용 플랫폼 SMS 구조 및 예제 플랫폼 SMS 구조 -appid [APP_ID]:[Parameters] 예제 -appid 12345678:email=test@test.com 설명 해당 Application 의 APP_ID 를 파라 미터로 전달하며, 해당 Application 을 실 행한다. 단. 해당 어플리케이션이 존재하지 않으면 olleh 마켓의 상세(소개)페 이지로 이동한다. SoIP 용 플랫폼 SMS 구조 및 예제 플랫폼 SMS 구조 FF-appid [APP_ID]:[Parameters] 예제 FF-appid 12345678:email=test@test.com 설명 해당 Application 의 APP_ID 를 파라 미터로 전달하며, 해당 Application 을 실 행한다. 단. 해당 어플리케이션이 존재하지 않으면 olleh 마켓의 상세(소개)페 이지로 이동한다. Action 등록 예 <action android:name="[어플리케이션 Package Name].intent.action.PAYLOAD_RECEIVED" /> [어플리케이션 Package Name]은 App 개발 시 최초 등록한 PackageName 을 설명 등록한다. 전달 Parameters Parameter 설명 payload [String] 플랫폼 SMS 로 수신된 Parameters 를 전달한다. 예제 intent.putExtra("payload", "email=test@test.com") Page :26/47
  • 27. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 27 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 플랫폼 SMS 수신 Action 등록 샘플 <!-- 플랫폼 SMS를 통해서 파라미터 수신 --> <receiverandroid:name=".SmsReceiver" android:label="플랫폼SMS 수신 Activity"> <intent-filter> <actionandroid:name="[어플리케이션PackageName].intent.action.PAYLOAD_RECEIVED"/> </intent-filter> </receiver> 플랫폼 SMS 수신 Receiver 샘플 @Override publicvoid onReceive(Context context, Intent intent) { Toast.makeText(context, "SMS를 통한 App 실행.", Toast.LENGTH_SHORT).show(); Intent i = new Intent(context, TestActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("payload", intent.getExtras().getString("payload")); context.startActivity(i); } 5.2. 플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위한 설정 적용 대상: 스마트폰, SoIP 플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위해서는 olleh 마켓 Setting 어플리케이션이 필요하다. 플랫폼 SMS 를 통한 어플리케이션 실행 테스트를 위한 설정 절차 1. 어플리케이션 구동 및 Parameter 전달 규격이 적용된 바이너리를 설치 한다. 2. 플랫폼 SMS를 통한 어플리케이션 실행 테스트를 위해서 olleh 마켓에서 구매한 어플리케이션으로 강제 설정하기 위해 Setting 어플리케이션을 구동하여 하단의 그림을 보고 설정 한다. (SoIP 단말용 Setting 어플리케이션에서는 최초 “KPad/SoIP olleh 마켓 설정으로 이동 메뉴를 선택”하고 나머지는 아래 그림을 보고 동일하게 설정) Page :27/47
  • 28. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 28 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 플랫폼 SMS 발송 시 KAM 메시지는 다음과 같다. 스마트폰용 KAM 데이터 : -appid A00000001:1234567890 appid SOIP 용 KAM 데이터 : FF-appid A00000001:1234567890 appid 1234567890 값에는 어플리케이션에서 전달 받고자 하는 값을 입력한다. Page :28/47
  • 29. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 29 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 6. 외부 어플리케이션에서 olleh 마켓 실행 규격 6.1. 외부 어플리케이션에서 olleh 마켓 실행 규격 적용 대상: olleh 마켓이 설치된 모든 단말 외부 어플리케이션에서 어플리케이션의 상세 소개 페이지로 이동 할 수 있도록 API를 제공한다. Application ID와 일치하는 어플리케이션이 존재 하지 않는 경우 “판매중인 어플리케이션이 아닙니다.” 노티를 보여준 후 이전 화면으로 이동한다. 컨텐츠 페이지 이동 호출 MimeType vnd.olleh.app.store/vnd.contents.introduce 전달 Parameters Parameter 설명 Uri (Data) [Uri] 어플리케이션의 상세 소개 페이지로 이동할 어플리 필수 케이션의 APP_ID 값 입력 contents_id App_ID 값이 없을 경우에는 상세 화면으로 이동하고자 APP_ID 가 없는 할 contents 의 id 값을 putExtra() 를 이용해서 전달한다. 경우 필수 Throws Exception 설명 없음 olleh 마켓 컨텐츠 소개 페이지 호출 Sample // APP_ID가 있을 경우 올레 마켓 상세/간단 소개페이지를 호출한다.. Intent intent = new Intent(); Uri uri = Uri.parse(”81000001”); intent.setDataAndType(uri, "vnd.olleh.app.store/vnd.contents.introduce"); startService(intent); // App_ID가 없는 경우는 아래를 사용한다. Intent intent = new Intent(); intent.setType("vnd.olleh.app.store/vnd.contents.introduce"); intent.putExtra(”contents_id”,”540000010234”) startService(intent); Page :29/47
  • 30. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 30 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 6.2. olleh 마켓 실행 중 컨텐츠 소개페이지 이동 적용 대상: 스마트폰 olleh 마켓이 실행 중인 상태에서 컨텐츠 소개페이지로 이동하는 기능은 olleh 마켓 VersionCode“1102”버전 이상부터 지원한다. Preload 버전 olleh마켓패키지 명 :com.kt.olleh.storefront 인스톨 버전 olleh 마켓 패키지 명 :com.kt.olleh.istore olleh 마켓 실행 중 컨텐츠 소개페이지로 이동 기능 지원 Version Code :1102 Android Native API를 이용해서 olleh 마켓 VersionCode를 가져온다. olleh 마켓 Version Code 추출 Sample try { PackageManager pm = getPackageManager(); PackageInfopackageInfo = pm.getPackageInfo("com.kt.olleh.storefront", 0); intversionCode = packageInfo.versionCode; // Version Code 값이 1102 버전 이상인 경우에만 olleh 마켓 실행 중 컨텐츠 소개페이지로 이동 하는 기능을 제공함. if (versionCode>= 1102) { // olleh 마켓 실행 중 컨텐츠 소개페이지로 이동 } } catch (Exception e) { e.printStackTrace(); } Page :30/47
  • 31. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 31 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 7. Preload 어플리케이션 버전 정보 관리 Preload 어플리케이션 버전 정보 관리 적용 대상: olleh 마켓이 설치된 모든 단말 KT Android 단말기에 Preload 되는 모든 어플리케이션은 AndroidManifest.xml의 <android:versionName>값을 다음과 같은 규격으로 맞춰야 한다. android:versionName 생성 규칙 어플리케이션 서버 설명 2.0.7 또는 02.00.07 02.00.07 어플리케이션의 versionName 이 2.0.7 인 경우 서버에 등록되는 바이너리 버전은 02.00.07 로 등록되어야 한다. android:versionName 생성 제약 조건 1.어플리케이션의versionName의 최대 자릿수는 마침표(.) 포함 최대 8자리(99.99.99)를 초과할 수 없고 최소 자릿수는 마침표(.) 포함 5자리(0.0.1) 미만이 될 수 없다. 2. 어플리케이션이 최소 자릿수 사용 시 AppManager에서 클라이언트의 versionName 을 마침표(.) 포함 8자리로 변환하는데 이때. 서버에 등록된 버전과 동일한 버전 정보가 되어야 한다. 예) AppManager 변환 예시. 어플리케이션 AppManager 설명 2.01.7 02.01.07 마침표(.) 사이에 2 자리/1 자리를 혼용해서 사용할 경우 AppManager 는 1 자리를 2 자리로 변환하고 2 자리 중 앞자리 02.1.7 02.01.07 를 0 으로 채운다. Page :31/47
  • 32. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 32 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 AndroidManifest.xml 의 android:versionName 규격 적용 샘플 //최소 자릿수 사용시 <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="패키지 명" android:versionCode="2007" android:versionName="2.0.7"> //최대 자릿수 사용시 <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="패키지 명" android:versionCode="2007" android:versionName="02.00.07"> Page :32/47
  • 33. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 33 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 8. In App Purchase 연동 8.1. In App Purchase 연동규격 적용 대상: 스마트폰 KT olleh마켓 서버를 이용하여 어플리케이션 내의 아이템 구매 서비스를 제공하려는 셀러는 본 절의 규격을 준수해야 한다. 아이템 구매는 보안을 위해 AIDL을 이용하여 App Manager와 연동하여야 하며 아래 정의를 참고한다. AIDL은 Android에서 사용되는 IPC(Inter Process Communication)로 다른 프로세스의 Service를 Binder할 수 있는 기능을 제공한다.. In App Purchase는 Preload버전과 Install버전 olleh 마켓 별 지원되는 네트워크를 구분하여 처리가 필요하다. olleh 마켓 Preload 버전과 Install 버전 패키지명. olleh 마켓 패키지 명 Preload 버전 olleh 마켓 com.kt.olleh.storefront Install 버전 olleh 마켓 com.kt.olleh.istore olleh 마켓 Preload 버전과 Install 버전 지원 네트워크. olleh 마켓 3G 네스팟 공인 네스팟 사설 I-WLAN 사설 WI-FI Preload 버전 olleh 마켓 O O O O X Install 버전 olleh 마켓 O X X X X 전달 Parameters Parameter 설명 packageName In App Purchase 를 요청하는 어플리케이션의 패키지 명. 필수 AES 암호화 시 Key 값으로 사용된다. iv AES 암호화 시 Initialization Vector 값. 필수 샘플에서는 System.currentTimeMillis 를 사용하였으나 실 제 개발 시에는 유출되지 않을 값으로 변경이 필요하다. Initialization Vector 값은 AES 암호화 시 유동적으로 생 성된 값을 사용하는 것을 추천한다. encryptItemId Encrypt 된 구매하려는 아이템 아이디 필수 수신 Parameters Parameter 설명 Page :33/47
  • 34. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 34 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 Map iv : 결과값을 Decrypt 할 키 값 result : 결과값 (Result Code 값은 아래에 상세 설명) Result Code 값 설명 Parameter 설명 0 결제 성공 100 입력 파라미터 오류 200 사용자 인증 오류 300 KHUB 과금 오류 리턴 값 800 올레마켓에서 구매하지 않은 어플리케이션. 900 네트워크 접속 오류 901 사설 Wi-Fi 망에서 사용 불가 998 결제를 진행하는 동안 문제가 발생 999 기타 일반적인 오류 Throws Exception 설명 RemoteException RemoteMethod 호출 중에 발생하는 예외 Activity Sample importjava.util.Map; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.app.ProgressDialog; importandroid.content.ComponentName; importandroid.content.Context; importandroid.content.DialogInterface; importandroid.content.Intent; importandroid.content.ServiceConnection; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.IBinder; importandroid.os.Message; importandroid.util.Log; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; Page :34/47
  • 35. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 35 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 importcom.kt.olleh.manager.purchase.AES; importcom.kt.olleh.manager.purchase.IRemoteInAppPurchaseService; publicclass Main extends Activity implementsOnClickListener { publicstaticfinalintSUCCESS = 0; // 결제 성공. publicstaticfinalintNPUT_PARAM_ERROR = 100; // 입력 파라미터 오류. publicstaticfinalintUSER_ACCREDIT_ERROR = 200; // 사용자 인증 오류. publicstaticfinalintKHUB_ACCOUNT_ERROR = 300; // KHUB 과금 오류. publicstaticfinalintNOT_OLLEHMARKET_APP = 800; // 올레마켓에서 구매하지 않은 어플리케이션. publicstaticfinalintNETWORK_ERROR = 900; // 네트워크 접속 오류. publicstaticfinalintNETWORK_NON_WIFI = 901; // 사설Wi-Fi에서는 사용할 수 없음. publicstaticfinalintACCOUNT_FAIL = 998; // 결제를 진행하는 동안 문제가 발생 publicstaticfinalintGENERAL_ERROR = 999; // 기타 일반적인 오류. privateintmResultCode = 999; private Button mButton; privateProgressDialogmProgressDialog; // mHandler인스턴스에게 전달 되는 모든 메시지를 처리함. private Handler mHandler = new Handler() { @Override publicvoidhandleMessage(Message msg) { String text = "기타 일반적인 오류."; switch (mResultCode) { caseSUCCESS: text = "결제 성공."; break; caseINPUT_PARAM_ERROR: text = "입력 파라미터 오류."; break; caseUSER_ACCREDIT_ERROR: text = "사용자 인증 오류."; break; caseKHUB_ACCOUNT_ERROR: text = "KHUB 과금 오류."; break; caseNOT_OLLEHMARKET_APP: text = "올레마켓에서 구매하지 않은 어플리케이션."; break; Page :35/47
  • 36. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 36 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 caseNETWORK_ERROR: text = "네트워크 접속 오류."; break; caseNETWORK_NON_WIFI: text = "Wi-Fi에서는 사용할 수 없음."; break; caseACCOUNT_FAIL: text = "결제를 진행하는 동안 문제가 발생했습니다."; break; default: // GENERAL_ERROR text = "기타 일반적인 오류."; break; } AlertDialog.Builder dialog = new AlertDialog.Builder(Main.this); dialog.setMessage(text); dialog.setPositiveButton("확인", newDialogInterface.OnClickListener() { @Override publicvoid onClick(DialogInterface dialog, int which) { dialog.dismiss(); mButton.setEnabled(true); // 구매 버튼을 활성화한다. } }); // 업데이트. dialog.create(); // 생성.. dialog.show(); // 화면에 표시.. } }; /** Called when the activity is first created. */ @Override publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton = (Button) findViewById(R.id.btn_bind); mButton.setOnClickListener(this); } @Override Page :36/47
  • 37. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 37 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 publicvoid onClick(View v) { switch (v.getId()) { caseR.id.btn_bind: { // Remote Service Bind. mButton.setEnabled(false); // 구매 버튼을 비활성화한다. mProgressDialog = newProgressDialog(Main.this); mProgressDialog.setMessage("결제를 요청중입니다."); mProgressDialog.setIndeterminate(true); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); mProgressDialog.show(); // 오래 걸리는 작업을 work thread에서 실행 함 new Thread(new Runnable() { // 제시도 횟수를 설정한다. 개발 시 적정한 값으로 설정. privatestaticfinalintRETRY_COUNT = 5; privatebooleanmIsInAppPurchaseConnect = false; publicvoid run() { try { /* ====================================================*/ // [필수] Remote In App Purchase에 Bind한다. mIsInAppPurchaseConnect = bindService(new Intent(IRemoteInAppPurchaseService.class.getName()), mServiceConnection,Context.BIND_AUTO_CREATE); // RemoteInAppPurchaseService의 Interface를 생성할 때까지 잠시 대기한다. for (int i = 0; i <RETRY_COUNT; i++) { if (mRemoteInAppPurchaseService != null) { break; } Log.v("InAppPurchaseTest", "Remote In App Purchase Service Connecte Retry Count: " + (i + 1)); try { Thread.sleep(100); } catch (Exception e) { } Page :37/47
  • 38. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 38 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 } /* ==================================================== */ // RemoteInAppPurchaseService의 Interface를 생성하지 못하면 에러로 처리한다. if (mRemoteInAppPurchaseService == null) { thrownewNullPointerException("RemoteInAppPurchaseService Interface Create Fail.."); } Log.v("InAppPurchaseTest", "Remote In App Purchase Service Connecte Result: " + mIsInAppPurchaseConnect); // 아이템 결제를 요청한다. String iv = String.valueOf(System.currentTimeMillis()); AES aes = new AES(getPackageName(), iv); String encryptItemId = aes.encrypt("I00000001"); // 구매하고자 하는 아이템 아이디 암호화. @SuppressWarnings("unchecked") Map<String, String> map = mRemoteInAppPurchaseService.purchase(getPackageName(), iv, encryptItemId); Log.i("InAppPurchaseTest", "Result Map : " + map.toString()); String resultIv = map.get("iv"); aes = new AES(getPackageName(), resultIv); String result = aes.decrypt(map.get("result")); // 구매결과 복호화한 후 Integer로 변환한다. mResultCode = parseInt(aes.decrypt(map.get("result")), mResultCode); Log.i("InAppPurchaseTest", "IV : " + resultIv); Log.i("InAppPurchaseTest", "Result : " + result); } catch (Exception e) { Log.e("InAppPurchaseTest", e.getMessage(), e); mResultCode = ACCOUNT_FAIL; } finally { /* =====================================================*/ if (mIsInAppPurchaseConnect == true) { try { // [필수] Remote In App Purchase에 Unbind한다. unbindService(mServiceConnection); Page :38/47
  • 39. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 39 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 Log.v("InAppPurchaseTest", ">> Remote In App Purchase Service Disconnecte<<"); mIsInAppPurchaseConnect = false; } catch (Exception e) { Log.e("InAppPurchaseTest", e.getMessage(), e); } } /* =====================================================*/ // ProgressDialog가 끝남과 동시에 화면이 보여지도록 하기 위해서 이곳에 정의했음. mProgressDialog.dismiss(); // mHnadler의 handleMessage(Message)에 의해 처리됨. mHandler.sendMessage(mHandler.obtainMessage()); } } }).start() break; } } } /** String을 Integer로 변환한다. */ publicstaticintparseInt(String str, intdefaultValue) { if (str == null) { returndefaultValue; } try { returnInteger.parseInt(str); } catch (NumberFormatExceptionnfe) { returndefaultValue; } } /* ================ RemoteInAppPurchaseService Connect Start ================ */ privateIRemoteInAppPurchaseServicemRemoteInAppPurchaseService = null; Page :39/47
  • 40. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 40 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 privateServiceConnectionmServiceConnection = newServiceConnection() { @Override publicvoidonServiceConnected(ComponentName name, IBinder service) { mRemoteInAppPurchaseService = IRemoteInAppPurchaseService.Stub.asInterface(service); Log.v("InAppPurchaseTest", "Remote In App Purchase Service Connected.."); } @Override publicvoidonServiceDisconnected(ComponentNamep_name) { Log.v("InAppPurchaseTest", "Remote In App Purchase Service Disconnected.."); mRemoteInAppPurchaseService = null; } }; /* ================RemoteInAppPurchaseService Connect End ================ */ } 샘플소스는 In App Purchase를 통한 아이템 결제 결제는 Thread를 생성해서 처리했으며, ProgressDialog를 이용해서 진행 중 표시를 사용자에게 노출하였다. Thread에서 처리가 완료 된 후에는 Handler와 통신하여 결제 결과를 AlertDialog로 사용자에게 결과를 노티 하였다. In App Purchase를 통해서 결제를 요청하는 경우 완료 되기 이전에는 타 Activity로 이동을 하는 경우 결과값을 수신 할 수 없어서 에러를 발생할 수 있다. 결제 결과 대기시간은 ConnectionTimeOut : 20초, SocketTimeOut : 20초로 최대 40초가 소요 될 수 있다. 샘플 소스는 추후 추가 또는 수정될 수 있음. 8.2. In App Purchase 연동을 위한 AIDL 생성 AIDL 생성 패키지명 (변경 불가) com.kt.olleh.manager.purchase AIDL 생성 클래스명 (변경 불가) IRemoteInAppPurchaseService.aidl IRemoteInAppPurchaseService.aidl 생성 (변경 불가) package com.kt.olleh.manager.purchase; interface IRemoteInAppPurchaseService { Page :40/47
  • 41. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 41 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 Map purchase(String packageName, String iv, String encryptItemId); Map cancel(String packageName, String iv, String encryptItemId); } * 결제 취소 기능(cancel())은 추후 적용 예정 8.3. In App Purchase Sequence Diagram In App Purchase를 통한 아이템 구매를 요청한 경우는 완료되기 전에 다른 작업을 진행할 수 없다. 1 :bindService에서 15 : unbindService는 하나의 세션 내에서 처리하여야 한다. 8.4. In App Purchase 연동을 위한 AES 암호화 IV 사용 블록 암호의 운용 모드(Block engine modes of operation)가 CBC/OFB/CFB를 사용할 경우에는 Initialization Vector(IV)를 설정해야 한다. Page :41/47
  • 42. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 42 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 In App Purchase에서 사용하는 AES 암호화 클래스는 CBC로 개발되어서 Initialization Vector(IV)를 사용한다. AES 암호화 클래스(필수) packagecom.kt.olleh.manager.purchase; importjava.lang.reflect.Method; importjava.security.MessageDigest; importjavax.crypto.Cipher; importjavax.crypto.spec.IvParameterSpec; importjavax.crypto.spec.SecretKeySpec; importandroid.util.Log; publicclass AES { private Cipher mCipher; privateSecretKeySpecmKey; privateIvParameterSpecmIv; /** * Creates a StringEncrypter instance. * @param key A key string which is converted into UTF-8 and hashed by MD5. Null or an empty string is not allowed. * @param iv An initial vector string which is converted into UTF-8 and hashed by MD5. * @throws Exception */ public AES(String key, String iv) throws Exception { if (key == null || "".equals(key)) { thrownewNullPointerException("The key cannot be null or an empty string.."); } if (iv == null || "".equals(iv)) { thrownewNullPointerException("The initial vector cannot be null or an empty string."); } mCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // Initialize an encryption key and an initial vector. MessageDigest md5 = MessageDigest.getInstance("MD5"); mKey = newSecretKeySpec(md5.digest(key.getBytes("UTF-8")), "AES"); mIv = newIvParameterSpec(md5.digest(iv.getBytes("UTF-8"))); } /** Page :42/47
  • 43. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 43 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 * Encrypts a string. * @param value A string to encrypt. It is converted into UTF-8 before being encrypted * @return An encrypted string. * @throws Exception */ public String encrypt(String value) throws Exception { if (value == null || "".equals(value)) { thrownewNullPointerException("The cipher string cannot be null or an empty string."); } // Initialize the cryptography algorithm. if (mIv == null || "".equals(mIv)) { mCipher.init(Cipher.ENCRYPT_MODE, mKey); } else { mCipher.init(Cipher.ENCRYPT_MODE, mKey, mIv); } // Get a UTF-8 byte array from a unicode string. byte[] utf8Value = value.getBytes("UTF-8"); // Encrypt the UTF-8 byte array. byte[] encryptedValue = mCipher.doFinal(utf8Value); // Return a base64 encoded string of the encrypted byte array. returnnew String(encodeBase64(encryptedValue)); } /** * Decrypts a string which is encrypted with the same key and initial vector. * @param value A string to decrypt. It must be a string encrypted with the same key and initial vector. * @return A decrypted string * @throws Exception */ public String decrypt(String value) throws Exception { if (value == null || "".equals(value)) { thrownewNullPointerException("The cipher string cannot be null or an empty string."); } // Initialize the cryptography algorithm. if (mIv == null || "".equals(mIv)) { mCipher.init(Cipher.DECRYPT_MODE, mKey); Page :43/47
  • 44. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 44 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 } else { mCipher.init(Cipher.DECRYPT_MODE, mKey, mIv); } // Get an encrypted byte array from a base64 encoded string. byte[] encryptedValue = AES.decodeBase64(value.getBytes()); // Decrypt the byte array. byte[] decryptedValue = mCipher.doFinal(encryptedValue); // Return a string converted from the UTF-8 byte array. returnnew String(decryptedValue, "UTF-8"); } /** * Converts a binary data into a Base64 encoded string. If the binary data is null or a zero-length array, an empty string is returned. */ publicstaticbyte[] encodeBase64(byte[] binaryData) { byte[] buf = null; try { Class<?> Base64 = Class.forName("org.apache.commons.codec.binary.Base64"); Class<?>[] parameterTypes = new Class<?>[] { byte[].class }; Method encodeBase64 = Base64.getMethod("encodeBase64", parameterTypes); buf = (byte[]) encodeBase64.invoke(Base64, binaryData); } catch (Exception e) { Log.e("AES", e.toString(), e); } returnbuf; } /** * Converts a Base64 encoded string into a binary data. If the string is null or an empty string, a zero-length array is returned. */ publicstaticbyte[] decodeBase64(byte[] base64Data) { byte[] buf = null; try { Class<?> Base64 = Class.forName("org.apache.commons.codec.binary.Base64"); Class<?>[] parameterTypes = new Class<?>[] { byte[].class }; Page :44/47
  • 45. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 45 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 Method decodeBase64 = Base64.getMethod("decodeBase64" parameterTypes); "decodeBase64", byte[]) buf = (byte[]) decodeBase64.invoke(Base64, base64Data); } catch (Exception e) { Log.e("AES" e.toString(), e); "AES", } returnbuf; } } 8.5. In App Purchase 테스트를 위한 설정 In App Purchase 테스트를 위해서 olleh 마켓 Setting 어플리케이션을 이용한다. In App Purchase 테스트를 위한 설정 절차 1) 올레마켓에 어플리케이션을 등록하여 APPID와 ITEM ID를 발급받지 않은 상태에서 in app purchase 연동 규격 준수 여부를 확인하고자 하는 경우 이용한다. olleh 마켓 연동 서버를 테스트서버로 변경하고 in app purchase 테스트를 진행한다. 테스트용 Item ID는 테스트서버에서만 유효하다. Page :45/47
  • 46. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 46 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 2) 1)의 과정을 통해 어플리케이션이 연동 규격을 준수하였음을 확인한 후 APPID APPID와 ITEM ID로 실제 올레마켓 서버와의 연동 확인은 아래와 방법으로 가능하다. 메뉴 서버는 상용 서버로 변경하여 테스트를 진행해야 한다. Page :46/47
  • 47. KT Android olleh 마켓 연동 문서번호 버전 V 1.8 쪽 47 가이드 작성자 홍유리/이주영 최종수정일자 2010.12.20 8.6. In App Purchase 를 지원하는 olleh 마켓 최소 버전 정보 추출 적용 대상: 스마트폰 olleh 마켓이 In App Purchase를 지원하는 VersionCode는“2010”버전 이상부터 지원한다. Preload 버전 olleh마켓 패키지명 :com.kt.olleh.storefront 인스톨 버전 olleh 마켓 패키지명 :com.kt.olleh.istore olleh 마켓 In App Purchase 기능 지원 Version Code : 2010 Android Native API를 이용해서 olleh 마켓 VersionCode를 가져온다. olleh 마켓 Version Code 추출 Sample try { PackageManager pm = getPackageManager(); PackageInfopackageInfo = pm.getPackageInfo("com.kt.olleh.storefront", 0); intversionCode = packageInfo.versionCode; // Version Code 값이 “2010” 버전 이상인 경우에만 In App Purchase를 지원한다.. if (versionCode>= 2010) { // RemoteInAppPurchaseService 연결 및 결제. } } catch (Exception e) { e.printStackTrace(); } Page :47/47