Unity3D Android Baidu Duoku SDK Integration - 2. Init, Login, Logout
유니티3D 안드로이드에 중국 바이두의 Duoku SDK 연동 준비작업을 정리했었습니다. 이번에는 Duoku SDK 초기화와 로그인, 로그아웃 처리를 정리합니다.
1. Duoku Init
2. Login
Init를 하고 Login을 한 스샷입니다. 내용을 수정해서 스샷에 찍힌 스트링이 다릅니다.
3. Logout
로그아웃은 바이두에서 새로 뜨는 창이 없고 스트링으로만 결과를 확인할 수 있어서 따로 스샷은 없습니다.
다음에는 바이두 Duoku SDK의 인앱빌링과 앱 업데이트 처리를 정리해보겠습니다.
1. Duoku Init
private final String LOG_TAG = "Duoku"; private final String DKAppId = "111"; private final String DKAppKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; private final String DKAppSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";먼저 SDK 초기화에 필요한 변수들입니다. 바이두로부터 발급받은 값으로 세팅해줍니다.
public void DuokuInit_U() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
DkPlatformSettings appInfo = new DkPlatformSettings();
appInfo.setGameCategory(GameCategory.ONLINE_Game);
// 앱 ID
appInfo.setmAppid(DKAppId);
// 앱 키
appInfo.setmAppkey(DKAppKey);
// 앱 시크릿값
appInfo.setmApp_secret(DKAppSecret);
// 화면 모드
appInfo.setmOrient(DkPlatformSettings.SCREEN_ORIENTATION_PORTRAIT);
DkPlatform.getInstance().init(UnityPlayer.currentActivity, appInfo);
DuokuLoginPageDestroyedListener();
DuokuLogoutListener();
DuokuSessionListener();
}
});
}
안드로이드 자바 초기화와 각종 리스너 등록 부분입니다.
public void DuokuInit()
{
curActivity.Call("DuokuInit_U");
}
PluginDuokuManager 컴포넌트 부분입니다.
void OnGUI()
{
float fYpos = 0;
GUI.Label(new Rect(0, fYpos, 400, 100), PluginDuokuManager.GetInstance().strLog);
fYpos += 50;
if (GUI.Button (new Rect(0, fYpos, 100, 50), "Init") == true)
{
PluginDuokuManager.GetInstance().DuokuInit();
}
}
TestGUI 버튼을 만들고 호출하는 부분입니다.
2. Login
public void DuokuLogin_U() {
Log.d(LOG_TAG, "DuokuLogin_U");
DuokuLoginRequest();
}
private void DuokuLoginRequest() {
// 로그인 요청과 로그인 리스너 등록
DkPlatform.getInstance().dkLogin(UnityPlayer.currentActivity, new OnLoginProcessListener() {
@Override
public void onLoginProcess(int arg0) {
// TODO Auto-generated method stub
JSONObject jsonObj = new JSONObject();
switch(arg0) {
// 로그인 성공
case DkErrorCode.DK_LOGIN_SUCCESS:
Log.d(LOG_TAG, "DK_LOGIN_SUCCESS");
DkBaseUserInfo baseInfo = DkPlatform.getInstance().dkGetMyBaseInfo(UnityPlayer.currentActivity);
Log.d(LOG_TAG, "uid : " + baseInfo.getUid() + ", sessionid : " + baseInfo.getSessionId());
try {
jsonObj.put("uid", baseInfo.getUid());
jsonObj.put("sessionid", baseInfo.getSessionId());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
// 네트워크 불량
case DkErrorCode.DK_LOGIN_FAILED_BAD_NET:
Log.d(LOG_TAG, "DK_LOGIN_FAILED_BAD_NET");
break;
// 타임 아웃
case DkErrorCode.DK_LOGIN_FAILED_NET_TIME_OUT:
Log.d(LOG_TAG, "DK_LOGIN_FAILED_NET_TIME_OUT");
break;
// 데이터 에러
case DkErrorCode.DK_LOGIN_FAILED_DATA_ERROR:
Log.d(LOG_TAG, "DK_LOGIN_FAILED_DATA_ERROR");
break;
// 서버 에러
case DkErrorCode.DK_LOGIN_FAILED_SERVER_FAIL:
Log.d(LOG_TAG, "DK_LOGIN_FAILED_SERVER_FAIL");
break;
// 계정 id 또는 패스워드 에러
case DkErrorCode.DK_LOGIN_FAILED_USERNAME_OR_PWD_ERROR:
Log.d(LOG_TAG, "DK_LOGIN_FAILED_USERNAME_OR_PWD_ERROR");
break;
default:
Log.d(LOG_TAG, "onLoginProcess Error" + arg0);
break;
}
try {
jsonObj.put("result", arg0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
UnityPlayer.UnitySendMessage("ChinaPluginManager", "DuokuLoginResult_J", Integer.toString(arg0));
}
});
}
private void DuokuLoginPageDestroyedListener() {
// 로그인 페이지 종료 리스너 등록
DkPlatform.getInstance().dkSetOnLoginPageDestroyedListener(new OnLoginPageDestroyedListener() {
@Override
public void onLoginPageDestroyed() {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "onLoginPageDestroyed");
UnityPlayer.UnitySendMessage("PluginDuokuManager", "DuokuLoginCancelResult_J", "");
}
});
}
private void DuokuSessionListener() {
//세션 Invalid 리스너 등록
DkPlatform.getInstance().dkSetSessionInvalideListener(new OnSessionInvalidListener() {
@Override
public void onSessionInvalid() {
// TODO Auto-generated method stub
//세선 Invalid시 로그인과 같은 처리
Log.d(LOG_TAG, "onSessionInvalid");
DuokuLoginRequest();
}
});
}
안드로이드 자바 로그인 부분입니다.
public void DuokuLogin()
{
curActivity.Call("DuokuLogin_U");
}
void DuokuLoginResult_J(string strJson)
{
JsonData jData = JsonMapper.ToObject(strJson);
int iResult = Convert.ToInt32(jData["result"].ToString());
string strMessage = string.Empty;
switch(iResult)
{
//DkErrorCode.DK_LOGIN_SUCCESS = 1021
case 1021:
strMessage += "Duoku Login " + jData["uid"].ToString() + " " + jData["sessionid"].ToString();
break;
//DkErrorCode.DK_LOGIN_FAILED_BAD_NET = 1102
case 1102:
strMessage = "DK_LOGIN_FAILED_BAD_NET";
break;
//DkErrorCode.DK_LOGIN_FAILED_NET_TIME_OUT = 1103
case 1103:
strMessage = "DK_LOGIN_FAILED_NET_TIME_OUT";
break;
//DkErrorCode.DK_LOGIN_FAILED_DATA_ERROR = 1104
case 1104:
strMessage = "DK_LOGIN_FAILED_DATA_ERROR";
break;
//DkErrorCode.DK_LOGIN_FAILED_SERVER_FAIL = 1105
case 1105:
strMessage = "DK_LOGIN_FAILED_SERVER_FAIL";
break;
//.DkErrorCode.DK_LOGIN_FAILED_USERNAME_OR_PWD_ERROR = 1101
case 1101:
strMessage = "DK_LOGIN_FAILED_USERNAME_OR_PWD_ERROR";
break;
default:
strMessage = "Login Error " + iResult;
break;
}
SetLog(strMessage);
}
void DuokuLoginCancelResult_J(string strResult)
{
//strResult is nothing
SetLog("User Login Cancel");
}
PluginDuokuManager 컴포넌트 부분입니다. 포스팅 후 내용을 좀 수정했습니다. 그래서 원래는 UCGame SDK 연동에서만 사용하던 LitJSON을 사용하게 되었네요. fYpos += 50;
if (GUI.Button (new Rect(0, fYpos, 100, 50), "Login") == true)
{
PluginDuokuManager.GetInstance().DuokuLogin();
}
TestGUI 버튼을 만들고 호출하는 부분입니다.
Init를 하고 Login을 한 스샷입니다. 내용을 수정해서 스샷에 찍힌 스트링이 다릅니다.
3. Logout
public void DuokuLogout_U() {
Log.d(LOG_TAG, "DuokuLogOut");
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
DkPlatform.getInstance().dkLogout(UnityPlayer.currentActivity);
}
});
}
private void DuokuLogoutListener() {
// 로그아웃 리스너 등록
DkPlatform.getInstance().dkSetOnUserLogoutListener(new OnUserLogoutLister() {
@Override
public void onUserLogout() {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "onUserLogout");
UnityPlayer.UnitySendMessage("PluginDuokuManager", "DuokuLogoutResult_J", "");
}
});
}
안드로이드 자바 로그아웃 부분입니다.
public void DuokuLogout()
{
curActivity.Call("DuokuLogout_U");
}
void DuokuLogoutResult_J(string strResult)
{
//strResult is nothing
SetLog("User Logout");
}
PluginDuokuManager 컴포넌트 부분입니다.
fYpos += 50;
if (GUI.Button (new Rect(0, fYpos, 100, 50), "Logout") == true)
{
PluginDuokuManager.GetInstance().DuokuLogout();
}
TestGUI 컴포넌트의 버튼을 만들고 호출하는 부분입니다.
로그아웃은 바이두에서 새로 뜨는 창이 없고 스트링으로만 결과를 확인할 수 있어서 따로 스샷은 없습니다.
다음에는 바이두 Duoku SDK의 인앱빌링과 앱 업데이트 처리를 정리해보겠습니다.



댓글
댓글 쓰기