Unity3D 91SDK 3.2.6.1 업데이트 변경 작업 사항

 중국 91 마켓 SDK가 3.2.6.1로 9월 4일에 업데이트 넘어왔습니다. 휴가였기 때문에 다음주인 9월 2째주에 작업을 완료하고 추억이다 뭐다해서 이제야 정리를 해봅니다. 지금은 마켓 심의 통과도 한 상태인데 아무튼 업데이트를 자주 해주네요.
  • 툴바 출력 API 추가
  • NdCommplatform.getInstance().ndAppVersionUpdate 삭제됨 NdCommplatform.getInstance().ndInit 시에 앱 업데이트 버전 체크가 자동 처리됨
  • 게임 일시정지, Exit 처리
 크게 위 2가지 처리를 해주면 됩니다. 유니티3D C#부분은 간단하므로 패스해봅니다.


1. 초기화 및 앱 업데이트 처리

// ND_VERSION_CHECK_LEVEL_STRICT - 업데이트 정보 획득 실패 시 게임 강제 종료.
// ND_VERSION_CHECK_LEVEL_NORMAL - 업데이트 정보 획득 실패 시 그냥 게임 진행.
appInfo.setNdVersionCheckStatus(NdAppInfo.ND_VERSION_CHECK_LEVEL_STRICT);

NdCommplatform.getInstance().ndInit(this, appInfo, new OnInitCompleteListener() {

@Override
protected void onComplete(int arg0) {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "ndInit onComplete " + arg0);
switch(arg0)
{
case OnInitCompleteListener.FLAG_NORMAL:
//초기화 성공
break;
case OnInitCompleteListener.FLAG_FORCE_CLOSE:
// 게임 강제 종료
/*
* - 일반 업데이트를 유저가 취소할 경우, 게임 플레이에 영향주지 않게 처리.
  - 강제 업데이트 요구를 유저가 거부할 경우 , 게임에서는 로그인을 비롯한 프로시져 진행을 거부해야 하며 , 유저에게 업데이트를 거쳐야만 게임진행이 가능하다는 점을 통보해야 함.
*/
break;
}
UnityPlayer.UnitySendMessage("Plugin91Manager", "Result91Init_J", Integer.toString(arg0));
finish();
}
});

 ndInit로 이름이 바뀌면서 마지막에 초기화 완료 후 처리할 리스너를 넘겨줍니다. 기존에는 ndAppVersionUpdate 를 통해 앱 업데이트를 처리해줘야 했으나 이번에는 ndInit에서 초기화시 내부에서 앱 업데이트 여부를 검사 후 관련 처리를 해줘야합니다. ndAppVersionUpdate 부분은 삭제하시구요.


 초기화 후 업데이트할 것이 있으면 SDK 내부에서 위와 같이 다이얼로그를 띄워줍니다. 여기서 결과로 리턴되는게 FLAG_NORMAL냐 FLAG_FORCE_CLOSE냐는 91 관리자 페이지에 해당 업데이트가 강제인지 일반 업데이트인지 설정과 위 다이얼로그의 선택에 따라 달라집니다. FLAG_FORCE_CLOSE 일때는 위에 주석과 같이 게임쪽에서 업데이트를 해야 게임이 된다고 유저에게 알려주고 더이상 진행이 안되게 해줘야합니다. 업데이트는 안드로이드 서비스를 통해서 백그라운드로 다운받더군요.

 구버전에서는 초기화 잘 되던 91이 3.2.5 버전부터는 방식이 바뀌었는데요, 초기화때 오류가 나거나 91 초기화 창이 닫히지 않는 증상이 있습니다. 따로 정리 했으니 링크를 참고 하시기 바랍니다.

2. 퀵메뉴(툴바) 처리

private NdToolBar toolBar = null;

/*
 *  NdToolBarPlace.NdToolBarTopLeft value=1;좌측 상단
NdToolBarPlace.NdToolBarTopRight value=2;우측 상단
NdToolBarPlace.NdToolBarLeftMid value=3;좌측 가운데
NdToolBarPlace.NdToolBarRightMid value=4;우측 가운데
NdToolBarPlace.NdToolBarBottomLeft value=5;좌측 하단
NdToolBarPlace.NdToolBarBottomRight value=6;우측 하단
 */
public void CreateToolBar(int iPlace) {
if(this.toolBar == null) {
this.toolBar = NdToolBar.create(UnityPlayer.currentActivity, iPlace);
Log.d(LOG_TAG, "CreateToolBar");
}
}

public void ShowToolBar(boolean bShow) {
if(this.toolBar != null) {
if(bShow == true) {
this.toolBar.show();
} else {
this.toolBar.hide();
}

Log.d(LOG_TAG, "ShowToolBar " + bShow);
}
}
 툴바를 생성하고 보여주는 자바딴 부분입니다.

 왼쪽위에 91 툴바가 생겼습니다. 퀵 메뉴를 통해서 이전에 따로 버튼으로 작업했던 몇몇 기능들을 바로 호출할 수 있게 됩니다. 스샷은 GameNoll, 91, 바이두, UCGame 마켓 4개를 통합한 플러그인에서 찍어서 버튼들이 많네요.


3. 게임 일시정지 및 종료 팝업 처리

 이건 3.2.5에서 업데이트 된 내용인데 이제 정리를 해보네요.

// 게임 일시 정지시 일시정지 페이지가 노출 되어야 한다.
public void Pause91() {
NdCommplatform.getInstance().ndPause(new OnPauseCompleteListener(UnityPlayer.currentActivity) {

@Override
public void onComplete() {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "Pause91");
UnityPlayer.UnitySendMessage("Plugin91Manager", "Pause91Result_J", "");
}
});
}
 게임을 일시 정시시 ndPause를 호출해서 일시정지 페이지를 띄워줘야합니다. onComplete가 호출되어 유니티3D에 넘어가면 다시 게임을 활성화 해주면 되구요. 또한 Home 버튼이나 전화가 오는등의 이슈 발생 후 다시 게임으로 복귀시에도 일시정지 팝업이 보여져야 하므로 유니티에서는 OnApplicationPause 를 활용해서 처리해주면 되겠습니다.

// 게임 종료시 종료페이지가 노출 되어야 한다.
public void Exit91() {
NdCommplatform.getInstance().ndExit( new OnExitCompleteListener(UnityPlayer.currentActivity) {

@Override
public void onComplete() {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "Exit91");
if(toolBar != null) {
toolBar.recycle();
toolBar = null;
}
UnityPlayer.UnitySendMessage("Plugin91Manager", "Exit91Result_J", "");
}
});
}
 게임 종료시에도 91 전용 종료 팝업을 띄워줘야합니다. onComplete를 받고 게임 종료 처리를 하면 되겠습니다. 툴바도 생성되었다면 삭제하는 것을 잊으면 안되겠죠.

 이게 Pause 팝업이고

 이건 Exit 팝업입니다. 중간에 이미지는 내부에서 알아서 바뀌는 듯 합니다.


4. AndroidManifest.xml

<!-- 91.com -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<!-- 91.com -->
<!-- 초기화 전용 액티비티. 각 개발 환경에 맞게 변경 -->
<activity android:name="com.wwforever.china91.New91SDKActivity" />
<activity android:name="com.nd.commplatform.activity.SNSControlCenterActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="adjustPan"
android:windowBackground="@null"
android:launchMode="singleTask"/>
<activity android:name="com.nd.commplatform.activity.SNSLoginActivity"
  android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="adjustPan"
android:windowBackground="@null"
android:launchMode="singleTask"/>
<activity android:name="com.nd.commplatform.gc.activity.ForumActivity"
  android:screenOrientation="landscape"
  android:configChanges="orientation"/>
<service android:name="com.nd.commplatform.service.NdDownloadService"
  android:process=":com.nd.commplatform.download"
  android:enabled="true"
  android:exported="false"/>
<receiver android:name="com.nd.commplatform.versionupdate.ND2VersionUpdateNotify"
android:process="android.intent.nd.sns.commplatform.versionupdate"
android:exported="false"/>
<service android:name="com.nd.commplatform.versionupdate.ND2VersionUpdateService"
android:process="android.intent.nd.sns.commplatform.versionupdate"
android:exported="false"/>
<service android:name="com.nd.commplatform.service.NdNewMessageNotification"
  android:enabled="true"
  android:exported="false"/>

그외 위와같이 AndroidManifest.xml도 추가 변경 되었습니다.

이 블로그의 인기 게시물

CMake Windows에 설치하기

Unity3D 안드로이드 Keystore 생성하기

Unity3D iOS Plugin 만들어 연동하기