Unity3D Android Baidu Duoku SDK Integration - 2. Init, Login, Logout

 유니티3D 안드로이드에 중국 바이두의 Duoku SDK 연동 준비작업을 정리했었습니다. 이번에는 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의 인앱빌링과 앱 업데이트 처리를 정리해보겠습니다.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.