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의 인앱빌링과 앱 업데이트 처리를 정리해보겠습니다.
댓글
댓글 쓰기