Unity3D Android Baidu Duoku SDK Integration - 3. In-app Billing, App Update
유니티3D 안드로이드 바이두의 Duoku SDK 초기화 및 로그인, 로그아웃 처리를 정리했었습니다. 이번에는 바이두 마지막 정리 포스팅으로 인앱빌링과 결제 누락 처리, 앱 업데이트 처리를 정리해봅니다. 지금까지 다른 SDK도 그랬듯이 클라이언트 처리만 정리된 내용입니다.
1. Duoku 인앱빌링과 결제 누락 처리
충전 페이지 모습입니다.
페이지를 닫았을 때 화면입니다.
2. Duoku 앱 업데이트
public void DuokuUpdate_U() {
// SDK 초기화 후 필수적으로 앱 버전 검사를 진행하고 기타 로그인등의 처리를 한다.
DkPlatform.getInstance().dkAppVersionUpdate(this, new OnAppVersionUpdateListener<Integer>() {
@Override
public void callback(int arg0, Integer arg1) {
// TODO Auto-generated method stub
if (arg0 == DkErrorCode.DC_OK) {
switch(arg1) {
case DkErrorCode.UPDATESTATUS_NONE:
Log.d(LOG_TAG, "UPDATESTATUS_NONE");
break;
case DkErrorCode.UPDATESTATUS_CHECK_FAILURE:
// 업데이트가 존재하지 않는 것으로 처리
Log.d(LOG_TAG, "UPDATESTATUS_CHECK_FAILURE");
break;
case DkErrorCode.UPDATESTATUS_CANCEL_RECOMMEND_UPDATE:
// 로그인 등 후처리 진행.
Log.d(LOG_TAG, "UPDATESTATUS_CANCEL_RECOMMEND_UPDATE");
break;
case DkErrorCode.UPDATESTATUS_CANCEL_FORCES_UPDATE:
// 로그인 등 후처리 진행하지 않고 업데이트 해야만 정상 플레이 가능하다고 유저에게 공지
Log.d(LOG_TAG, "UPDATESTATUS_CANCEL_FORCES_UPDATE");
break;
case DkErrorCode.UPDATESTATUS_APP_RECOMMAND_UPDATE:
// 일반 업데이트를 진행중
Log.d(LOG_TAG, "UPDATESTATUS_APP_RECOMMAND_UPDATE");
break;
case DkErrorCode.UPDATESTATUS_APP_FORCES_UPDATE:
// 강제 업데이트를 진행중
Log.d(LOG_TAG, "UPDATESTATUS_APP_FORCES_UPDATE");
break;
default:
Log.d(LOG_TAG, "dkAppVersionUpdate Error" + arg1);
break;
}
} else {
Log.d(LOG_TAG, "OnAppVersionUpdateListener Error" + arg1);
}
UnityPlayer.UnitySendMessage("PluginDuokuManager", "DuokuUpdateResult_J", Integer.toString(arg1));
}
});
}
업데이트 확인을 먼저하고 기존에 정리했던 로그인 처리를 진행하면 됩니다. 그리고 업데이트는 강제 업데이트와 일반 업데이트가 있는데 유저가 각 업데이트 별 취소 한 것에 대한 처리는 주석과 같이 처리해주면 됩니다.
당연히 지금은 업데이트가 없어서 Update NONE가 출력됩니다.
다음에는 마지막이 될지는 모르겠지만 중국 UC Game SDK 연동을 정리해보겠습니다.
1. Duoku 인앱빌링과 결제 누락 처리
// 구매 시리얼 저장용
private String strOrderSerial;
// strExchangeRatio - Duoku 머니와의 교환 비율. 100 = 1Duoku -> 100 Game Money.
// strMoneyName - 게임 머니 이름
// strAmount - 구매 수량.
// strDesc - 구매 설명
public void DuokuPayment_U(String strExchangeRatio, String strMoneyName, String strAmount, String strDesc) {
UUID guid = UUID.randomUUID();
// 구매 시리얼
this.strOrderSerial = guid.toString().replace("-", "".trim());
// 머니 충전 페이지 호출. 결과는 Duoku 서버 -> 개발사 서버로 전송. 서버에서 처리 후 클라이언트와 통신해야함.
DkPlatform.getInstance().dkUniPayForCoin(this, strExchangeRatio, strMoneyName, strOrderSerial, strAmount, strDesc);
}
private void DuokuExitChargeCenterListener() {
// 충전 페이지 종료 리스너 등록
DkPlatform.getInstance().dkSetExitPlatformListener(new OnExitChargeCenterListener() {
@Override
public void onPlatformBackground() {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "onPlatformBackground");
/*
* Duoku서버에서는 구매 완료되었으나 네트워크 상황에 따라 게임 서버가 구매 걸과를 전달 반지
* 못한 경우가 발생할 수 있다. 일단 유니티3D에 오더번호를 넘겨주고 가지고 있다가
* 서버에서 구매 결과가 오면 클라에서 삭제하고 삭제 안된것들은 따로 로컬이나 서버에 저장하고 있다가
* 게임 재시작등의 상황에서 재 인증 확인 절차를 통해 결과를 처리 후 구매 시리얼을 삭제한다.
* 주문 처리 확인 요청을 게임 서버에 요청하기 위해 strOrderSerial을 넘긴다.
*/
UnityPlayer.UnitySendMessage("PluginDuokuManager", "DuokuPaymentViewEnd_J", strOrderSerial);
}
});
}
안드로이드 게임 머니 구매 부분입니다. Duoku의 경우 다른 SDK와 다르게 결제 결과를 클라이언트로 보내주지 않습니다. 주석에도 적어놨듯이 개발사 서버와 통신을 해서 보내줍니다. 클라이언트에서는 충전 페이지를 유저가 닫았을 때 들어온 콜백을 받아 그 때 알고 있던 주문 번호를 가지고 자체 서버와 결제가 이루어졌는지 최종 확인하고 게임 정보를 갱신하면 됩니다. public void DuokuPayment(string strExchangeRatio, string strMoneyName, string strAmount, string strDesc)
{
curActivity.Call("DuokuPayment_U", strExchangeRatio, strMoneyName, strAmount, strDesc);
}
void DuokuPaymentViewEnd_J(string strResult)
{
//strResult is strOrderSerial
SetLog("Payment View End. " + strResult);
}
유니티3D PluginDuokuManager 컴포넌트 부분입니다. 충전 페이지 종료가 왔을 시 간단히 로그만 출력하고 있는데 이 부분에서 서버와 처리를 해줘야겠네요. 결제 누락 처리도 이부분에서 처리해주면 될 듯합니다. fYpos += 50;
if (GUI.Button (new Rect(0, fYpos, 100, 50), "Payment") == true)
{
string strExchangeRatio = "100";
string strMoneyName = "TestMoney";
string strAmount = "2";
string strDesc = "Test Pay Desc";
PluginDuokuManager.GetInstance().DuokuPayment(strExchangeRatio, strMoneyName, strAmount, strDesc);
}
TestGUI 컴포넌트 부분입니다.충전 페이지 모습입니다.
페이지를 닫았을 때 화면입니다.
2. Duoku 앱 업데이트
public void DuokuUpdate_U() {
// SDK 초기화 후 필수적으로 앱 버전 검사를 진행하고 기타 로그인등의 처리를 한다.
DkPlatform.getInstance().dkAppVersionUpdate(this, new OnAppVersionUpdateListener<Integer>() {
@Override
public void callback(int arg0, Integer arg1) {
// TODO Auto-generated method stub
if (arg0 == DkErrorCode.DC_OK) {
switch(arg1) {
case DkErrorCode.UPDATESTATUS_NONE:
Log.d(LOG_TAG, "UPDATESTATUS_NONE");
break;
case DkErrorCode.UPDATESTATUS_CHECK_FAILURE:
// 업데이트가 존재하지 않는 것으로 처리
Log.d(LOG_TAG, "UPDATESTATUS_CHECK_FAILURE");
break;
case DkErrorCode.UPDATESTATUS_CANCEL_RECOMMEND_UPDATE:
// 로그인 등 후처리 진행.
Log.d(LOG_TAG, "UPDATESTATUS_CANCEL_RECOMMEND_UPDATE");
break;
case DkErrorCode.UPDATESTATUS_CANCEL_FORCES_UPDATE:
// 로그인 등 후처리 진행하지 않고 업데이트 해야만 정상 플레이 가능하다고 유저에게 공지
Log.d(LOG_TAG, "UPDATESTATUS_CANCEL_FORCES_UPDATE");
break;
case DkErrorCode.UPDATESTATUS_APP_RECOMMAND_UPDATE:
// 일반 업데이트를 진행중
Log.d(LOG_TAG, "UPDATESTATUS_APP_RECOMMAND_UPDATE");
break;
case DkErrorCode.UPDATESTATUS_APP_FORCES_UPDATE:
// 강제 업데이트를 진행중
Log.d(LOG_TAG, "UPDATESTATUS_APP_FORCES_UPDATE");
break;
default:
Log.d(LOG_TAG, "dkAppVersionUpdate Error" + arg1);
break;
}
} else {
Log.d(LOG_TAG, "OnAppVersionUpdateListener Error" + arg1);
}
UnityPlayer.UnitySendMessage("PluginDuokuManager", "DuokuUpdateResult_J", Integer.toString(arg1));
}
});
}
업데이트 확인을 먼저하고 기존에 정리했던 로그인 처리를 진행하면 됩니다. 그리고 업데이트는 강제 업데이트와 일반 업데이트가 있는데 유저가 각 업데이트 별 취소 한 것에 대한 처리는 주석과 같이 처리해주면 됩니다.
public void DuokuUpdate()
{
curActivity.Call("DuokuUpdate_U");
}
void DuokuUpdateResult_J(string strResult)
{
int iResult = Convert.ToInt32(strResult);
switch(iResult)
{
case 0:
//public static final int UPDATESTATUS_NONE = 0;
SetLog("Update NONE");
break;
case 1:
//public static final int UPDATESTATUS_CHECK_FAILURE = 1;
SetLog("Update Check Failed");
break;
case 3:
//public static final int UPDATESTATUS_CANCEL_RECOMMEND_UPDATE = 3;
SetLog("Update Cancel Recommend");
break;
case 4:
//public static final int UPDATESTATUS_CANCEL_FORCES_UPDATE = 4;
SetLog("Update Cancel Forces");
break;
case 8:
//public static final int UPDATESTATUS_APP_RECOMMAND_UPDATE = 8;
SetLog("Update Recommand");
break;
case 9:
//public static final int UPDATESTATUS_APP_FORCES_UPDATE = 9;
SetLog("Update Force");
break;
default:
SetLog("Update Error " + iResult);
break;
}
}
PluginDuokuManager 컴포넌트 부분입니다. fYpos += 50;
if (GUI.Button (new Rect(0, fYpos, 100, 50), "UpdateApp") == true)
{
PluginDuokuManager.GetInstance().DuokuUpdate();
}
TestGUI 컴포넌트 부분입니다.당연히 지금은 업데이트가 없어서 Update NONE가 출력됩니다.
다음에는 마지막이 될지는 모르겠지만 중국 UC Game SDK 연동을 정리해보겠습니다.



댓글
댓글 쓰기