LG U+ 과금 API 사용 방법

Download Report

Transcript LG U+ 과금 API 사용 방법

www.ubivelox.com
LG U+ 과금 API 소개
All Rights Reserved,
Copyright© UBIVELOX co.,Ltd
All Rights Reserved, Copyright© UBIVELOX
co.,Ltd
Version
1.0
Author
ubivelox
Date
21-Feb.2011
1. LGU+ 과금 API 소개
2. LGU+ 과금 API 사용 방법
3. FAQ
4. Q&A
All Rights Reserved,
UBIVELOX co.,Ltd
All RightsCopyright©
Reserved, Copyright©
UBIVELOX co.,Ltd
LG U+ 과금 API 소개
과금 API란?
• 과금 API란 LGU+의 패킷 과금 정책에 따라 과금이 필요한 경우 과금 게이트웨이 서버를 통해 네트워크 통
신을 할 수 있도록 제공되는 API를 말합니다.
• 사용법은 기본적인 소켓 API와 동일합니다.
• 과금 API를 사용하는 Application 에서는 Wi-Fi / 3G 연결 상태와 상관없이 동일한 데이터만을 전송 및 수
신 하면되므로 구현이 간편합니다.
Application Packet
User Data
과금 API
Write Read
3G 연결 시
Bill Packet
Bill
Header
Application Packet
Write
WiFi 연결 시
Keysharp Packet
Keysharp
Header
Bill Packet
Read
U+
Android
Network
G/W
CP 서버
U+ WiFi
G/W
U+ G/W
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
-3-
LG U+ 과금 API 소개
과금 API란?
• 현재 지원되는 LGU+ 과금 방식은 CP 서버에서 Android Network G/W로 과금을 요청하는 방식입니다. 단
말에서 “Android Network Gateway 연동 규격서” 에 정의된 규격으로 Android Network G/W로 Packet을 전
달하면, Android Network G/W에서는 해당 CP서버로 그 Packet을 전송합니다. 해당 CP서버에서는 전달 된
Packet을 바탕으로 Android Network G/W에 과금을 요청하여야 됩니다.
• 과금 API를 사용하면 이때 필요한 규격에 맞게 Packet을 자동 구성 및 파싱을 하게 됩니다. 단말의
Application 에서는 “Android Network Gateway 연동 규격서”에 명시된 BILLCOMM HEADER 및 CP HEADER
의 User Data 만을 전송 및 수신 하면되므로 구현이 간편합니다.
BILLCOMM HEADER
write( AAA )
Application
과금 API
read( BBB )
BILLCOMM HEADER
CP 서버
CP HEADER
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
Android
Network
G/W
Packet Length
XXXX
Application ID
XXXXXXXX
……
……
Reserved
…
User Data
AAA
CP HEADER
Header Code
XXXX
Event ID
XXXXXXXX
……
……
Service Type
…
User Data
BBB
-4-
LG U+ 과금 API 사용 방법
과금 API 제공 Service로 Bind
• 과금 API는 LGU+향 단말에 Preload되어 있는 CommonService(Application)를 통해서 제공 됩니다.
• 과금 API를 사용하기 위해서는 과금 API를 제공하는 Service에 Bind 하여야 합니다.
1. 메모장 등을 사용하여 새 파일을 생성한 후, “LGU+_Android_공통API_규격서”의 AIDL Definition으로 명
시된 하기 코드를 복사하여 “IBillSocket.aidl”로 저장합니다.
package com.lguplus.common.bill;
interface IBillSocket {
boolean connect(String aid, String addr, int port);
void close();
int readBytes(out byte[] b);
int readByOffset(out byte[] b, in int offset, in int
length);
boolean writeBytes(in byte[] buffer);
boolean writeByOffset(in byte[] buffer, in int offset,
in int length);
String getLastErrorMsg();
}
IBillSocket.aidl
AIDL은 반드시 “LGU+_Android_공통API_규격서”의 내용
을 수정 없이 동일하게 사용하여야 합니다.
참고로 readByOffset 및 writeByOffset은 현재는 사용되지
않는 API지만, 기존에 배포된 과금 API(aidl)와의 호환성을
유지하기 위해 반드시 명시하여야 합니다.
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
-5-
LG U+ 과금 API 사용 방법
과금 API 제공 Service로 Bind
2. 과금 API를 사용할 Application Project Source에 “com.lguplus.common.bill” Package를 생성한 후 앞서
생성한 “IBillSocket.aidl” 파일을 복사합니다.
IBillSocket.aidl
“IBillSocket.aidl” 파 일 이 정 상 적 으 로 복 사 가 되 었 으 면
Project “gen”폴더 하위 경로 “com.lguplus.common.bill”
Package에 “IBillSocket.java”가 자동으로 Generate되어 생
성된 것을 확인할 수 있습니다.
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
-6-
LG U+ 과금 API 사용 방법
과금 API 제공 Service로 Bind
3. 과금 API를 사용하기 위해서는 Application에서 과금 API를 제공하는 Service로 Bind 요청하는 코드를 구
현해야 합니다. Service Bind를 요청하는 방법은 일반적인 Android F/W에서의 Service Bind를 요청하는 방
법과 동일합니다.
public class Test extends Activity {
private IBillSocket mBillSock;
public void onCreate(Bundle savedInstanceState) {
………
//과금 소켓을 구현한 서비스 바인딩 하기.
boolean isBind = bindService(new Intent(IBillSocket.class.getName()), serviceConn, BIND_AUTO_CREATE);
AIDL로 추가한 IBillSocket.class.getName()을 Bind
요청할 Intent의 class name 인자로 사용합니다.
}
……
private ServiceConnection serviceConn = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
mBillSock = IBillSocket.Stub.asInterface(binder);
billSocketTestStart();
}
};
}
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
Connection이 정상적으로 이루어 졌으면, 과금
API의 인스턴스를 할당 받을 수 있습니다.
모든 준비과정이 끝났으므로, 과금 API 사용을
시작할 수 있습니다.
-7-
LG U+ 과금 API 사용 방법
과금 API 사용
4. 과금 API를 사용할 준비가 되었으므로, 해당 Application의 요구사항에 맞게 과금 API를 적용합니다. 기
본적인 사용 방법은 일반적인 Socket API 사용법과 동일합니다.
……
private void billSocketTestStart()
{
new Thread() {
@Override
public void run() {
if (!Connect()) {
unbindService(serviceConn);
return;
}
if (!Write()) {
Close();
unbindService(serviceConn);
return;
}
if (!Read()) {
Close();
unbindService(serviceConn);
return;
}
Network 상황에 따라서 시간 소요가 많이 발
생할 수 있으므로 반드시 Thread로 구현해야
합니다.
예외적인 상황 등에 의해서 과금 API를 더 이
상 사용할 일이 없을 때 연결한 과금API
Service와 Bind를 해제하여야 합니다.
과금 API Connect 이후 종료 시 반드시 Close
시켜야 합니다.
Close();
unbindService(serviceConn);
}
}.start();
}
……
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
-8-
LG U+ 과금 API 사용 방법
과금 API 사용
5. 과금 API의 connect() 및 close()는 일반적인 Socket API 사용법과 동일합니다.
……
private String mAid = "00FFFFFF";//OZ Store에 등록된 AID
private String mAddr = "111.111.111.111";
private int mPort = 10000;
boolean Connect() {
try {
if (mBillSock.connect(mAid, mAddr, mPort)) {
return true;
} else {
String msg = mBillSock.getLastErrorMsg();
}
}catch(RemoteException e) {
}
return false;
}
……
void Close() {
try {
mBillSock.close();
}catch(RemoteException e) {
}
}
………
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
과금 API connect 인자는 다음과 같습니다.
mAid : OZStroe에 등록된 Application ID(8자리)
mAddr : CP 서버의 IP
mPort : CP 서버의 Port
과금 API connect, write 시 return 값이 false로
전달, 혹은 read시 return 값이 -1로 전달되면
getLastErrorMsg()를 통해서 Error Message를
확인 가능합니다.
-9-
LG U+ 과금 API 사용 방법
과금 API 사용
6. 과금 API의 write() 역시 일반적인 Socket API 사용법과 동일합니다.
Application에서 과금 API write의 인자로 전달한 값은, 과금 API에 의해서 “Android Network Gateway 연
동 규격서”의 BILLCOMM HEADER의 User Data 영역으로 패킷이 구성되어 CP 서버로 전달 됩니다.
……
boolean Write() {
byte []buf = new byte[36];//데이터 길이
try {
System.arraycopy(toByteArray(32), 0, buf, 0, 4); // 32 '고정값'
//12자리 폰번호 예)010057401234
System.arraycopy(“01012345678” .getBytes, 0, buf, 4, 12);
// 게임ID
System.arraycopy("1111".getBytes(), 0, buf, 16, 4);
//상용기에 등록된 과금코드
System.arraycopy("00FFFFFF".getBytes(), 0, buf, 20, 11);
//과금금액
System.arraycopy(toByteArray(500), 0, buf, 32, 4);
if (BillSock.writeBytes(buf)) {
return true;
}
} catch(RemoteException e) {
}
return false;
}
………
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
write의 buf로 사용한 값들은 예제 Application과 CP 서버 간 연
동을 위해 자체 규격을 만들어, CP 서버와 통신하는 예제입니다.
즉 write시 전달할 값들은 자체적으로 규격을 정의하여 전달하며,
CP 서버에서는 해당 값이 전달 되었을 때 규격에 해당하는 과금
을 요청하도록 구현하면 됩니다.
-10-
LG U+ 과금 API 사용 방법
과금 API 사용
7. 과금 API의 read() 역시 일반적인 Socket API 사용법과 동일합니다.
CP 서버에서 전송한 “Android Network Gateway 연동 규격서”의 CP HEADER를 과금 API가 수신하면 이중
User Data로 명시된 값을 과금 API read의 인자로 Application에게 전달합니다.
……
boolean Read() {
byte []buf = new byte[36];
try {
int ret = BillSock.readBytes(buf);
if (ret == -1) {
return false;
} else {
// readBytes 성공;
}
}catch(RemoteException e) {
return false;
}
if(toInt(buf[32],buf[33],buf[34],buf[35])==500)
{
// 과금 성공;
return true;
} else {
read의 buf로 사용한 값들은
return false;
}
을 위해 자체 규격을 만들어,
}
………
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
예제 Application과 CP 서버 간 연동
CP 서버와 통신하는 예제입니다.
write와 마찬가지로 read시 전달된 값들은 자체적으로 규격을 정
의하여 CP서버에서 해당 값을 전송하며, Application에서는 해당
값을 수신 하였을 때 과금 성공, 실패에 맞는 처리를 구현하면 됩
니다.
-11-
LG U+ 과금 API FAQ
Q. 과금을 CP서버가 요청하는지요? 단말에서 직접 과금 할 수 있는 방식은 없는지요?
A. 현재는 CP 서버를 통해서만 과금이 가능합니다. 단말에서 직접 과금하는 방식은 현재 준비 중에 있으며,
‘11년 내에 지원 예정입니다.
Q. CommonService를 통한 과금 API 사용시 Connect 인자에 들어가는 IP 및 Port는 무엇을 입력하여야 하
나요?
A. CP에서 구현한 CP서버 IP및 Port를 입력하면 됩니다.
Q. CommonService를 통한 과금 API 사용시 write 및 Read 시 인자로 전달하는 Data는 어떤것 인가요?
A. CommonService의 과금 API는 "Android Network Gateway 연동 규격서" 에 명시된 빌컴 헤더 정보를
자동으로 설정 및 파싱을 합니다. 과금 API를 통해서 Write및 Read 시 전달되는 값은 "Android Network
Gateway 연동 규격서"에 명시된 User Data부분에 해당하므로, CP 서버와의 자체 규격을 만드시고 그에 해
당하는 값을 전송 및 전달하면 됩니다.
Q. 과금 API를 사용하여 CP서버와 연동 중 오류가 발생하여 문의를 하고 싶습니다.
A. 오류 현상은 단말 내 혹은 CP서버 연동간 발생할 수 있습니다. 빠른 대응을 위해서는 다음 정보를 기입
하여 http://devpartner.lguplus.co.kr/ 로 문의 주시기 바랍니다.
- 오류현상
- 단말 정보( 단말 버전 및 모델 명 )
- CommonService 버전 정보( 설정 – 응용프로그램 - 응용프로그램관리 에서 확인 가능 )
- 단말 Log( Logcat으로 출력한 전체 로그 )
- TEST 시각
- CTN( 전화번호 )
- Application ID
- Event ID
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
-12-
LG U+ 과금 API Q&A
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
-13-
LG U+ 과금 API
All Rights Reserved, Copyright© UBIVELOX co.,Ltd
-14-