Unity3D Android UCGame SDK Integration - 2. Init, Login, Logout

 유니티3D 안드로이드 중국 UCGame SDK 준비작업을 정리해봤습니다. 이번에는 초기화와, 로그인, 로그아웃 처리를 정리하겠습니다.

 참고로 다른 중국 SDK 튜토리얼과 다르게 안드로이드 플러그인에서 결과값을 JSON으로 보내게 처리해놨습니다. 그래서 유니티3D에서 JSON 처리가 필요한데 LitJSON을 사용했으니 링크를 참고하세요.


1. Init

public class MainActivity extends UnityPlayerActivity {
// 운영사 ID
private final int UC_CPID = 11111;
// 게임 ID
private final int UC_GAMEID = 222222;
// 서버 ID
private final int UC_SERVERID = 0;

private final String LOG_TAG = "UC_GAME";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

public void UCGameInit_U(boolean bDebugMode) {
GameParamInfo gameParam = new GameParamInfo();
gameParam.setCpId(UC_CPID);
gameParam.setGameId(UC_GAMEID);
gameParam.setServerId(UC_SERVERID);

// 충전 히스토리 조회 기능 여부
boolean bPayHistory = true;
// 계정 교체 기능 여부
boolean bUserChange = true;
gameParam.setFeatureSwitch(new FeatureSwitch(bPayHistory, bUserChange));

// 계정 교체 기능이 가능하다면 SDK 초기화 전에 로그아웃 리스너를 설정해준다.
if(bUserChange == true) {
try {
LogoutListener();
} catch (UCCallbackListenerNullException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

try {
/*
* UCLogLevel.ERROR ERROR, WARN, DEBUG 세가지 로그 레벨이 있다.
* bDebugMode 디버그 모드 유무. true면 테스트 환경인 sdk.test4.g.uc.cn에 false면 정ㅅ힉서비스인 sdk.g.uc.cn에 접속
*/
UCGameSDK.defaultSDK().initSDK(UnityPlayer.currentActivity, UCLogLevel.ERROR
, bDebugMode, gameParam, new UCCallbackListener<String>() {

@Override
public void callback(int arg0, String arg1) {
// TODO Auto-generated method stub
JSONObject jsonObj = new JSONObject();

switch(arg0) {
case UCGameSDKStatusCode.SUCCESS:
Log.d(LOG_TAG, "initSDK SUCCESS");
break;
case UCGameSDKStatusCode.INIT_FAIL:
Log.d(LOG_TAG, "initSDK INIT_FAIL");
break;
default:
Log.d(LOG_TAG, "initSDK Error" + arg0);
break;
}

try {
jsonObj.put("resultCode", arg0);
jsonObj.put("message", arg1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

UnityPlayer.UnitySendMessage("PluginUCGameManager", "UCGameInitResult_J", jsonObj.toString());
}
});
} catch (UCCallbackListenerNullException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
 안드로이드 플러그인 부분입니다. 신텍스 하이라이터가 버그가 있는지 템플릿 부분이 제대로 되지않아 그냥 붙여넣기 했네요.

 public void UCGameInit(bool bDebugMode)
 {
  curActivity.Call("UCGameInit_U", bDebugMode);
 }

 void UCGameInitResult_J(string strResult)
 {
  JsonData jData = JsonMapper.ToObject(strResult);
  int iResult = Convert.ToInt32(jData["resultCode"].ToString());
  string strMessage = jData["message"].ToString();
  
  switch(iResult)
  {
  case 0:
   //  public static final int SUCCESS = 0;
   break;
  case -100:
   //  public static final int INIT_FAIL = -100;
   break;
  default:
   break;
  }
  
  SetLog("UCGame Init " + strMessage);
 }
 PluginUCGameManager 컴포넌트 입니다. 안드로이드 플러그인으로부터 넘어온 JSON 포맷의 초기화 결과값을 Log로 세팅하고 있습니다.

  float fYpos = 0;
  GUI.Label(new Rect(0, fYpos, 400, 100), PluginUCGameManager.GetInstance().strLog);
  
  fYpos += 50;
  if (GUI.Button (new Rect(0, fYpos, 100, 50), "Init") == true)
  {
   bool bDebugMode = true;
   PluginUCGameManager.GetInstance().UCGameInit(bDebugMode);
  }
 TestGUI 컴포넌트 입니다.

 Init 버튼을 누렀을 때 결과 화면입니다. 다 만들고 나서 찍은 스샷이라 나머지 버튼들도 있습니다.


2. Login

public void UCGameLogin_U() {
try {
UCGameSDK.defaultSDK().login(UnityPlayer.currentActivity, new UCCallbackListener<String>() {

@Override
public void callback(int arg0, String arg1) {
// TODO Auto-generated method stub
JSONObject jsonObj = new JSONObject();

switch(arg0) {
case UCGameSDKStatusCode.SUCCESS:
String sid = UCGameSDK.defaultSDK().getSid();
Log.d(LOG_TAG, "login SUCCESS " + sid);
      try {
jsonObj.put("sid", sid);
      } catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
      }
break;
case UCGameSDKStatusCode.LOGIN_EXIT:
// 로그인 페이지 종료. 게임에서는 로그인 성공 여부를 확인하고 관련 처리를 진행한다.
Log.d(LOG_TAG, "login LOGIN_EXIT");
break;
case UCGameSDKStatusCode.NO_INIT:
Log.d(LOG_TAG, "login NO_INIT");
break;
default:
Log.d(LOG_TAG, "login Error" + arg0);
break;
}

try {
jsonObj.put("resultCode", arg0);
jsonObj.put("message", arg1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
UnityPlayer.UnitySendMessage("PluginUCGameManager", "UCGameLoginResult_J", jsonObj.toString());
}
});

} catch(Exception e) {
e.printStackTrace();
Log.e(LOG_TAG, e.getMessage(), e);
}
}

 안드로이드 플러그인 부분입니다.

 public void UCGameLogin()
 {
  curActivity.Call("UCGameLogin_U");
 }

 void UCGameLoginResult_J(string strResult)
 {
  JsonData jData = JsonMapper.ToObject(strResult);
  int iResult = Convert.ToInt32(jData["resultCode"].ToString());
  string strMessage = jData["message"].ToString();
  
  string strLog = "UCGame Login " + strMessage;
  
  switch(iResult)
  {
  case 0:
   //  public static final int SUCCESS = 0;
   string strSid = jData["sid"].ToString();
   strLog += strSid;
   break;
  case -10:
   //  public static final int NO_INIT = -10;
   strLog += "NO_INIT";
   break;
  case -11:
   //  public static final int NO_LOGIN = -11;
   strLog += "NO_LOGIN";
   break;
  case -2:
   //  public static final int FAIL = -2;
   strLog += "FAIL";
   break;
  case -600:
   //UCGameSDKStatusCode.LOGIN_EXIT = -600 
   strLog += "LOGIN_EXIT";
   break;
  default:
   strLog += iResult.ToString();
   break;
  }
  
  SetLog(strLog);
 }
 PluginUCGameManager 컴포넌트 입니다.

  fYpos += 50;
  if (GUI.Button (new Rect(0, fYpos, 100, 50), "Login") == true)
  {
   PluginUCGameManager.GetInstance().UCGameLogin();
  }
 TestGUI 컴포넌트 입니다.

 Login 버튼을 누르면 UCGame 플랫폼의 로그인 창이 뜹니다.

 로그인 성공 후 스샷입니다.


3. Logout

public void UCGameLogout_U() {
try {
UCGameSDK.defaultSDK().logout();
} catch (UCCallbackListenerNullException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private void LogoutListener() throws UCCallbackListenerNullException {
UCGameSDK.defaultSDK().setLogoutNotifyListener(new UCCallbackListener<String>() {

@Override
public void callback(int arg0, String arg1) {
// TODO Auto-generated method stub
JSONObject jsonObj = new JSONObject();

switch(arg0) {
case UCGameSDKStatusCode.NO_INIT:
Log.d(LOG_TAG, "LogoutListener NO_INIT");
break;
case UCGameSDKStatusCode.NO_LOGIN:
Log.d(LOG_TAG, "LogoutListener NO_LOGIN");
break;
case UCGameSDKStatusCode.SUCCESS:
Log.d(LOG_TAG, "LogoutListener SUCCESS");
break;
case UCGameSDKStatusCode.FAIL:
Log.d(LOG_TAG, "LogoutListener FAIL");
break;
default:
Log.d(LOG_TAG, "LogoutListener Error" + arg0);
break;
}

try {
jsonObj.put("resultCode", arg0);
jsonObj.put("message", arg1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

UnityPlayer.UnitySendMessage("PluginUCGameManager", "UCGameLogoutResult_J", jsonObj.toString());
}
});
}
 안드로이드 플러그인 부분입니다.

 public void UCGameLogout()
 {
  curActivity.Call("UCGameLogout_U");
 }

 void UCGameLogoutResult_J(string strResult)
 {
  JsonData jData = JsonMapper.ToObject(strResult);
  int iResult = Convert.ToInt32(jData["resultCode"].ToString());
  string strMessage = jData["message"].ToString();
  
  switch(iResult)
  {
  case 0:
   //  public static final int SUCCESS = 0;
   break;
  case -10:
   //  public static final int NO_INIT = -10;
   break;
  case -11:
   //  public static final int NO_LOGIN = -11;
   break;
  case -2:
   //  public static final int FAIL = -2;
   break;
  default:
   break;
  }
  
  SetLog("UCGame Logout " + strMessage);
 }
 PluginUCGameManager 컴포넌트 입니다.

  fYpos += 50;
  if (GUI.Button (new Rect(0, fYpos, 100, 50), "Logout") == true)
  {
   PluginUCGameManager.GetInstance().UCGameLogout();
  }
 TestGUI 컴포넌트 입니다.

 로그아웃 결과 모습입니다.

 다음 포스팅은 유니티3D 안드로이드 UCGame SDK 게임 머니 결제 및 U포인트 충전을 정리해보겠습니다.

댓글

이 블로그의 인기 게시물

라즈베리파이 라즈비안 한글 입력하기 - IBus

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

라즈베리파이 라즈비안 한글 깨짐 수정하기