Upload
ehong1011
View
2.598
Download
3
Embed Size (px)
DESCRIPTION
Citation preview
KT Android olleh마켓
연동 가이드
(V 1.8)
2010. 12.
컨버전스와이브로 사업본부
단말연구센터
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 수신 연동 규격 보완.
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 연동 규격 통합 및 보완
-
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
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
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 서비스 제공 계획의 변경 및 추가에 따라 추후 보완 및 변경 될 수 있다.
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”
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”로 주면 다음과 같이 성인인증을 받고서 상세 화면으로 이동한다.
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);
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” 곡
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);
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);
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);
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);
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”
일반 콘텐트: “”
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”로 주면 다음과 같이 성인인증을 받고서 상세 화면으로 이동한다.
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
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” 곡
KT Android olleh 마켓 연동
가이드
문서번호 버전 V 1.8 쪽 19
작성자 홍유리/이주영 최종수정일자 2010.12.20
Page :19/47
“M” 뮤직비디오
음악 목록의 경우만 해당됨
3.3.2. 상품 목록 호출 예시
Ex. 음악 상품 목록 호출
cstore://list?CONTENT_TYPE=MUSIC
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
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
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
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 설명
없음
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" +
"업데이트를 계속 진행하면 어플이 종료됩니다.");
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" />
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]")
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 마켓 설정으로 이동 메뉴를 선택”하고
나머지는 아래 그림을 보고 동일하게 설정)
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
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);
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();
}
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
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">
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 설명
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;
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;
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
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) {
}
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);
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;
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 {
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)를 설정해야 한다.
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")));
}
/**
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);
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 };
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
서버를 테스트서버로
테스트서버에서만 유효하다.
KT Android olleh 마켓
가이드
2) 1)의 과정을 통해 어플리케이션이
올레마켓 서버와의 연동 확인은
테스트를 진행해야 한다.
마켓 연동 문서번호 버전
작성자 홍유리/이주영 최종수정일자
어플리케이션이 연동 규격을 준수하였음을 확인한 후 APPID
확인은 아래와 방법으로 가능하다. 메뉴 서버는 상용
V 1.8 쪽 46
최종수정일자 2010.12.20
Page :46/47
APPID와 ITEM ID로 실제
상용 서버로 변경하여
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();
}