47
KT Android olleh마켓 연동 가이드 (V 1.8) 2010. 12. 컨버전와이브로 사본부 단말연구터

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

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh마켓

연동 가이드

(V 1.8)

2010. 12.

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

단말연구센터

Page 2: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 2

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :2/47

개정이력

버전 변경일 변경사항 작성자

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 3: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 3

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :3/47

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 4: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 4

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :4/47

목차

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 5: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 5

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :5/47

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 6: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 6

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :6/47

1. 개요

1.1. 목적

본 문서는 (주)케이티(이하 KT)의 Android 단말기의 KT Application 또는 웹 브라우저상에서 olleh 마켓

과 연동 방법에 대해 기술한다.

1.2. 적용범위

� KT 의 KT Applicaton 에서 Self 업데이트와 플랫폼 SMS 수신을 받는 후 App 에 전달하는 방법,

외부 어플리케이션에서 App ID 를 이용해서 어플리케이션의 상세페이지로 이동 할 수 있는 방법, In App

Purchase 를 통한 어플리케이션 내 결제를 이용하는 방법을 설명한다.

� 단말에 따라 적용되는 규격 내용이 분기처리 되어있다.

� 내용은 KT 서비스 제공 계획의 변경 및 추가에 따라 추후 보완 및 변경 될 수 있다.

Page 7: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 7

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :7/47

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 설명

CONTENT_TYPE String

APPLICATION: 어플리케이션

MUSIC: 음악

MOVIE: 영화

EBOOK_S: 이북 시리즈 상세

EBOOK: 이북 단품

P_TYPE String

m: 음악 앨범

c: 단일 상품

e: 할인 상품

p: 세트 상품

b: 번들 (1+1)

P_ID String Content id (상품 고유 번호)

N_ID String Category id (카테고리 고유 번호)

IS_ADULT String Option.

성인 콘텐트: “ADULT”

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

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 8

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :8/47

일반 콘텐트: “”

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 9: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 9

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :9/47

2.2. 검색

2.2.1. 검색 Intent parameter 정의

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

MimeType

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

Intent parameter 정의

Column Name Type 설명

N_ID String

"A" 어플리케이션

"S" 음악

"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 10: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 10

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :10/47

2.3. 상품 목록

2.3.1. 상품 목록 Intent parameter 정의

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

북 리스트 화면으로 이동 한다.

MimeType

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

Intent parameter 정의

Column Name Type 설명

CONTENT_TYPE String

APPLICATION: 어플리케이션

MUSIC: 음악

MOVIE: 영화

EBOOK: 이북

N_ID String

Option. 현재 사용하지 않음.

Category id (카테고리 고유 번호)

메인 목록의 경우 아래 중 하나

"A" 어플리케이션

"S" 음악

"V" 영상

"E" 이북

하위 목록의 경우는 각 해당 고유 아이디

IS_MAIN String Option. 현재 사용하지 않음.

Y(대표 목록) or N(하위 목록)

IS_NEW String Option. 현재 사용하지 않음.

Y(신규 목록) or N(인기 목록)

IS_FREE String

Option. 현재 사용하지 않음.

Y(무료) or N(유료)

단, IS_NEW 가 N 인 경우 즉, 인기 목록의 경우만 유효함

TITLE String

Option. 현재 사용하지 않음.

목록 명(20 자 이하)

예) 어플리케이션, 음악, 영상, 이북, 어플리케이션>게임, 음악>

발라드, 영상>액션, 이북>국내소설 등…

MUSIC_TYPE String Option. 현재 사용하지 않음.

“S” 곡

Page 11: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 11

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :11/47

“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 12: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 12

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :12/47

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 설명

N_ID String

"A" 어플리케이션

"S" 음악

"V" 영상

"E" 이북

UPDATE_CHECK String

Option. 현재 사용하지 않음.

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 13: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 13

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :13/47

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 14: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 14

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :14/47

2.6. Home 화면

2.6.1. Home 화면 Intent parameter

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

MimeType

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

Intent parameter 정의

Column Name Type 설명

PACKAGE_NAME String

Option.

호출하는 어플리케이션의 패키지 명.

예: “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 15: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 15

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :15/47

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 설명

CONTENT_TYPE String

APPLICATION: 어플리케이션

MUSIC: 음악

MOVIE: 영화

EBOOK_S: 이북 시리즈 상세

EBOOK: 이북 단품

P_TYPE String

m: 음악 앨범

c: 단일 상품

e: 할인 상품

p: 세트 상품

b: 번들 (1+1)

P_ID String Content id (상품 고유 번호)

N_ID String Category id (카테고리 고유 번호)

IS_ADULT String

Option.

성인 콘텐트: “ADULT”

일반 콘텐트: “”

Page 16: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 16

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :16/47

3.1.2. Content 상세 화면 호출 예시

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

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

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

Page 17: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 17

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :17/47

3.2. 검색

3.2.1. 검색 정의

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

HOST 명

search

Query 정의

Column Name Type 설명

N_ID String

"A" 어플리케이션

"S" 음악

"V" 영상

"E" 이북

KEYWORD String 검색어(20 자 이하)

3.2.2. 검색 호출 예시

Ex. 어플리케이션 검색 호출

cstore://search?N_ID=A&KEYWORD=KT

Page 18: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 18

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :18/47

3.3. 상품 목록

3.3.1. 상품 목록 정의

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

리스트 화면으로 이동 한다.

HOST 명

list

Query 정의

Column Name Type 설명

CONTENT_TYPE String

APPLICATION: 어플리케이션

MUSIC: 음악

MOVIE: 영화

EBOOK: 이북

N_ID String

Option.

Category id (카테고리 고유 번호)

메인 목록의 경우 아래 중 하나

"A" 어플리케이션

"S" 음악

"V" 영상

"E" 이북

하위 목록의 경우는 각 해당 고유 아이디

IS_MAIN String Option.

Y(대표 목록) or N(하위 목록)

IS_NEW String Option.

Y(신규 목록) or N(인기 목록)

IS_FREE String

Option.

Y(무료) or N(유료)

단, IS_NEW 가 N 인 경우 즉, 인기 목록의 경우만 유효함

TITLE String

Option.

목록 명(20 자 이하)

예) 어플리케이션, 음악, 영상, 이북, 어플리케이션>게임, 음악>

발라드, 영상>액션, 이북>국내소설 등…

MUSIC_TYPE String Option.

“S” 곡

Page 19: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 19

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :19/47

“M” 뮤직비디오

음악 목록의 경우만 해당됨

3.3.2. 상품 목록 호출 예시

Ex. 음악 상품 목록 호출

cstore://list?CONTENT_TYPE=MUSIC

Page 20: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 20

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :20/47

3.4. My 구매 화면

3.4.1. My 구매 화면 정의

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

이동한다.

HOST 명

my

Query 정의

Column Name Type 설명

N_ID String

"A" 어플리케이션

"S" 음악

"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 21: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 21

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :21/47

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 22: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 22

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :22/47

3.6. Home 화면

3.6.1. Home 화면

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

HOST 명

home

Query 정의

Column Name Type 설명

PACKAGE_NAME String

Option.

호출하는 어플리케이션의 패키지 명.

예: “kt.olleh.testpackage”

3.6.2. Home 화면 호출 예시

Ex. Home 화면호출

cstore://home?PACKAGE_NAME=kt.olleh.testpackage

Page 23: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 23

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :23/47

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 24: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 24

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :24/47

초기 화면을 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 25: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 25

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :25/47

// 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 26: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 26

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :26/47

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

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

적용 대상: 스마트폰, SoIP

Application ID를 기반으로 해당 하는 어플리케이션을 구동시키고 Parameter를 전달하기 위한 규격을

정의 한다. 플랫폼SMS를 전달 받으려는 어플리케이션은 Receiver의 intent-filter에action을 정의한다.

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

플랫폼 SMS 구조 -appid [APP_ID]:[Parameters]

예제 -appid 12345678:[email protected]

설명 해당 Application 의 APP_ID 를 파라 미터로 전달하며, 해당 Application 을 실

행한다. 단. 해당 어플리케이션이 존재하지 않으면 olleh 마켓의 상세(소개)페

이지로 이동한다.

SoIP 용 플랫폼 SMS 구조 및 예제

플랫폼 SMS 구조 FF-appid [APP_ID]:[Parameters]

예제 FF-appid 12345678:[email protected]

설명 해당 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 protected]")

Page 27: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 27

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :27/47

플랫폼 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 28: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓

가이드

플랫폼 SMS 발송 시 KAM 메시지는

스마트폰용 KAM 데이터 : -appid A00000001:1234567890

SOIP 용 KAM 데이터 : FF-appid A00000001:1234567890

1234567890 값에는 어플리케이션에서

마켓 연동 문서번호 버전

작성자 홍유리/이주영 최종수정일자

메시지는 다음과 같다.

appid A00000001:1234567890

appid A00000001:1234567890

어플리케이션에서 전달 받고자 하는 값을 입력한다.

V 1.8 쪽 28

최종수정일자 2010.12.20

Page :28/47

Page 29: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 29

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :29/47

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 값이 없을 경우에는 상세 화면으로 이동하고자

할 contents 의 id 값을 putExtra() 를 이용해서 전달한다.

APP_ID 가 없는

경우 필수

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 30: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 30

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :30/47

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 31: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 31

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :31/47

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 자리 중 앞자리

를 0 으로 채운다. 02.1.7 02.01.07

Page 32: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 32

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :32/47

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 33: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 33

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :33/47

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 34: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 34

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :34/47

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 35: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 35

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :35/47

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 36: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 36

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :36/47

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 37: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 37

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :37/47

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 38: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 38

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :38/47

}

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

// 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 39: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 39

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :39/47

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 40: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 40

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :40/47

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 41: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 41

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :41/47

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 42: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 42

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :42/47

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 43: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 43

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :43/47

* 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 44: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 44

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :44/47

}

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 45: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓

가이드

Method decodeBase64 =

buf = (byte

}

catch (Exception e) {

Log.e("AES"

}

returnbuf;

}

}

8.5. In App Purchase 테스트를

In App Purchase 테스트를 위해서 olleh

In App Purchase 테스트를 위한 설정

1) 올레마켓에 어플리케이션을 등록하여

연동 규격 준수 여부를 확인하고자

변경하고 in app purchase 테스트를

마켓 연동 문서번호 버전

작성자 홍유리/이주영 최종수정일자

Method decodeBase64 = Base64.getMethod("decodeBase64"

byte[]) decodeBase64.invoke(Base64, base64Data);

(Exception e) {

"AES", e.toString(), e);

테스트를 위한 설정

olleh 마켓 Setting 어플리케이션을 이용한다.

설정 절차

등록하여 APPID와 ITEM ID를 발급받지 않은 상태에서

확인하고자 하는 경우 이용한다. olleh 마켓 연동 서버를

테스트를 진행한다. 테스트용 Item ID는 테스트서버에서만

V 1.8 쪽 45

최종수정일자 2010.12.20

Page :45/47

"decodeBase64", parameterTypes);

[]) decodeBase64.invoke(Base64, base64Data);

상태에서 in app purchase

서버를 테스트서버로

테스트서버에서만 유효하다.

Page 46: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓

가이드

2) 1)의 과정을 통해 어플리케이션이

올레마켓 서버와의 연동 확인은

테스트를 진행해야 한다.

마켓 연동 문서번호 버전

작성자 홍유리/이주영 최종수정일자

어플리케이션이 연동 규격을 준수하였음을 확인한 후 APPID

확인은 아래와 방법으로 가능하다. 메뉴 서버는 상용

V 1.8 쪽 46

최종수정일자 2010.12.20

Page :46/47

APPID와 ITEM ID로 실제

상용 서버로 변경하여

Page 47: Kt android +++¦+¦--_+¼¦+¦í+¦¦s_v1.8

KT Android olleh 마켓 연동

가이드

문서번호 버전 V 1.8 쪽 47

작성자 홍유리/이주영 최종수정일자 2010.12.20

Page :47/47

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();

}