개요
MSDK for Android는 로그인, 친구 관계 사슬, 공유, 그룹 결합 기능 이외에도 공지 시스템, 내장 브라우저, 전서구 푸시, 데이터 보고, LBS, Crash 분석 등과 같은 다채로운 부가가치 확대 기능을 제공합니다. 이러한 부가가치 모듈은 게임 개발자들이 손쉽게 게임의 추가 기능을 구축할 수 있게 함으로써 게임 자체 경험에 집중할 수 있도록 해 주어, 플레이어들에게 보다 우수한 품질의 게임을 제공하는 것이 가능해 집니다.
액세스 내비게이션
1 사전 요구 사항
1) 먼저 MSDK Android 버전 획득 여부를 확인하고, 획득하지 않은 경우에는 아래 링크를 클릭해 다운로드하십시오.
2) Java 환경이 설치되어 있어야 하며 환경 변수를 설정해야 합니다.
시스템 변수 설정(참고)
JAVA_HOME : D:/Program Files/java/jdk1.6.0_25
Path : C:\Windows\system32;C:\Windows;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
CLASSPATH : .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
보다 상세한 절차에 대해서는 인터넷에서 "java 환경 변수 설정”을 검색해 주시기 바랍니다.
3) MSDK for Android는 JDK1.7 이상, build-tools 22.0.1 이상.
4) 적합한 버전은 최저 요구 사항 8, 컴파일링 타겟 버전은 22.
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="22" />
2 MSDK 불러들이기
MSDK의 Android 버전 패키지 내에는 예시 프로젝트 MSDKDemo
가 포함되어 있으며, 버전은 프로젝트MSDKLibrary
에 따라 다릅니다. 다음 절차에 따라 MSDK를 신속히 불러들일 수 있습니다.
1) eclipse 메뉴 내에서 다음과 같이 클릭: Project->Properties->Add...
2) MSDK의 필수 프로젝트 패키지:MSDKLibrary
3 MSDK 설정 추가
MSDKDemo 프로젝트를 열어 assets 디렉토리에 진입해 msdkconfig.ini
, msdk_agreement.txt
, channel.ini
3개 파일을 게임 프로젝트 디렉토리의 assets 디렉토리 아래에 copy합니다.
4 AndroidManifest.xml 파일을 수정합니다.
1) MSDK 관련 권한을 게임 AndroidManifest.xml 파일의 manifest 태그 아래에 copy합니다.
<!-- TODO SDK 액세스 필수 권한 모듈 START -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 로그인 보고 시에 기기 이름이 포함되어야 하며, 블루투스 모듈을 통해 기기 이름을 획득 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- 선택 가능한 권한: 이상 보고 시스템 log, XG도 필요 -->
<uses-permission android:name="android.permission.READ_LOGS" />
<!-- qxiaomi permission start -->
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- qxiaomi permission end -->
<!-- 전서구에 필요한 다른 권한에 액세스 -->
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- TODO SDK 액세스 필수 권한 모듈 END -->
2) MSDK 관련 구성 요소를 게임 AndroidManifest.xml 파일의 application 태그 아래에 copy합니다.
<!-- 6.0 시스템 권한 설정 activity, 2.18.0 새로 추가-->
<activity
android:name="com.tencent.msdk.PermissionActivity"
android:excludeFromRecents="true"
android:exported="true"
android:label="PermissionActivity"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:screenOrientation="behind"
<!-- [필수]게임 패키지 이름으로 변경해 주십시오.diff -->
android:taskAffinity="com.example.wegame.diff" />
<activity
android:name="com.tencent.msdk.NameAuthActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="sensor"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- TODO SDK 액세스 QQ 액세스 설정 START -->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- [필수] tencent 게임의 모바일QQ appidfh qusrud -->
<data android:scheme="tencent100703379" />
<!-- 100703379가 게임의 appid가 되어야 함 -->
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- TODO SDK 액세스 QQ 액세스 설정 END -->
<!-- TODO SDK 액세스 위챗 액세스 설정 START -->
<activity
<!-- [필수]이곳에는 게임 패키지 이름이 와야 합니다.wxapi.WXEntryActivity -->
android:name="com.example.wegame.wxapi.WXEntryActivity"
android:excludeFromRecents="true"
android:exported="true"
android:label="WXEntryActivity"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:screenOrientation="portrait"
<!-- [필수] ㅡㄱ 밖에도 게임 패키지 이름.diff로 변경해야 함 -->
android:taskAffinity="com.example.wegame.diff" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<!-- [필수] 그 밖에도 게임 위챗 appid로 변경해야 함 -->
<data android:scheme="wxcde873f99466f74a" />
<!-- scheme의 값은 게임의 위챗 appid로 변경되어야 함 -->
</intent-filter>
</activity>
<!-- TODO SDK 액세스 위챗 액세스 설정 END -->
<!-- TODO SDK 액세스 위챗 코드 스캔 로그인 설정 START -->
<activity
android:name="com.tencent.msdk.weixin.qrcode.WXQrCodeActivity"
android:excludeFromRecents="true"
android:exported="true"
android:label="WXQrCodeActivity"
android:launchMode="singleTask"
<!-- [필수] 여기에는 게임 패키지 이름이 와야 합니다.diff -->
android:taskAffinity="com.example.wegame.diff"
android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:screenOrientation="portrait">
<!-- taskAffinity의 값은 게임의 패키지 이름.diff로 변경되어야 함 -->
</activity>
<!-- TODO SDK 액세스 위챗 코드 스캔 로그인 설정 END -->
<!-- TODO Notice 공지 설정 START -->
<activity
android:name="com.tencent.msdk.notice.AlertMsgActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="sensor"
android:theme="@style/NoticeAlertTheme" >
</activity>
<service android:name="com.tencent.msdk.notice.RollFloatService" >
</service>
<!-- TODO Notice 공지 설정 END -->
<!-- TODO 브라우저 관련 START -->
<activity
android:name="com.tencent.msdk.webview.JumpShareActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
</activity>
<activity
android:name="com.tencent.msdk.webview.WebViewActivity"
android:process=":msdk_inner_webview"
android:hardwareAccelerated="true"
android:configChanges="orientation|screenSize|keyboardHidden|navigation|fontScale|locale"
android:screenOrientation="unspecified"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" >
<meta-data android:name="titlebar_hideable" android:value="false"/>
<meta-data android:name="toolbar_portrait_hideable" android:value="false"/>
<meta-data android:name="toolbar_landscape_hideable" android:value="false"/>
</activity>
<!-- TODO 브라우저 관련 END -->
<!-- TODO 잉용바오 데이터 절약 업데이트 관련 START -->
<service
android:name="com.tencent.tmdownloader.TMAssistantDownloadService"
android:exported="false"
android:process=":TMAssistantDownloadSDKService" >
</service>
<!-- TODO 잉용바오 데이터 절약 업데이트 END -->
<!-- 전서구 설정START -->
<!-- [필수] 전서구 알림창 -->
<activity
android:name="com.tencent.android.tpush.XGPushActivity"
android:theme="@android:style/Theme.NoDisplay"
android:exported="false" >
<intent-filter>
<!-- AndroidStudio를 사용할 경우, android:name="android.intent.action"을 설정하십시오.-->
<action android:name="" />
</intent-filter>
</activity>
<!-- [필수] 전서구 receiver 알림 수신 -->
<receiver
android:name="com.tencent.android.tpush.XGPushReceiver"
android:process=":xg_service_v2" >
<intent-filter android:priority="0x7fffffff" >
<!-- [필수] 전서구 SDK의 내부 알림 -->
<action android:name="com.tencent.android.tpush.action.SDK" />
<action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
<!-- [필수] 시스템 알림: 화면 열기 및 네트워크 변환 -->
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<!-- [필수] 전서구 service -->
<service
android:name="com.tencent.android.tpush.service.XGPushService"
android:exported="true"
android:persistent="true"
android:process=":xg_service_v2" />
<!-- [필수 ] 통지 service, 이 선택항은 도착률 향상에 도움이 됨 -->
<service
android:name="com.tencent.android.tpush.rpc.XGRemoteService"
android:exported="true" >
<intent-filter>
<!-- [필수] 현재 APP 패키지 이름.PUSH_ACTION으로 변경하십시오.-->
<action android:name="com.example.wegame.PUSH_ACTION" />
</intent-filter>
</service>
<!-- 전서구 설정 END -->
<!-- msdk httpdns 네트워크 모니터링 2.18.0 새로 추가 -->
<receiver
android:name="com.tencent.special.httpdns.Cache$ConnectReceiver"
android:label="NetworkConnection" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
3.0.8 이상 버전을 사용하는 경우, 다음의 전서구(信鸽) 설정을 활용해, 본래의 전서구(信鸽)을 변경해 주십시오.
<!-- 전서구 설정 START -->
<!-- [필수](2.30 이상 버전 새로 추가) 디스플레이 알림 activity -->
<activity
android:name="com.tencent.android.tpush.XGPushActivity"
android:theme="@android:style/Theme.Translucent"
android:exported="false" >
<intent-filter>
<!-- AndroidStudio를 사용할 경우, android:name="android.intent.action"을 설정하십시오.-->
<action android:name="android.intent.action" />
</intent-filter>
</activity>
<!-- [필수] 전서구 receiver 알림 수신 -->
<receiver
android:name="com.tencent.android.tpush.XGPushReceiver"
android:process=":xg_service_v3" >
<intent-filter android:priority="0x7fffffff" >
<!-- [필수] 전서구 SDK의 내부 알림 -->
<action android:name="com.tencent.android.tpush.action.SDK" />
<action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
<!-- [필수] 시스템 알림: 네트워크 변환 -->
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<!-- [선택 가능] 시스템 알림: 화면 열기 -->
<action android:name="android.intent.action.USER_PRESENT" />
<!-- [선택 가능] 일부 자주 사용하는 시스템 알림은, 전서구 서비스의 부활 가능성을 높입니다. 필요에 따라 선택하십시오. 물론, 귀하는 APP 자체 정의에 의한 일련의 알림을 추가해 service를 활성화할 수 있습니다. -->
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
<!-- [선택 가능] usb 관련 시스템 알림은, 전서구 service의 부활 가능성을 높입니다. 필요에 따라 추가하십시오. -->
<intent-filter android:priority="0x7fffffff" >
<action android:name="android.intent.action.MEDIA_UNMOUNTED" />
<action android:name="android.intent.action.MEDIA_REMOVED" />
<action android:name="android.intent.action.MEDIA_CHECKING" />
<action android:name="android.intent.action.MEDIA_EJECT" />
<data android:scheme="file" />
</intent-filter>
</receiver>
<!-- [필수] 전서구 service -->
<service
android:name="com.tencent.android.tpush.service.XGPushServiceV3"
android:exported="true"
android:persistent="true"
android:process=":xg_service_v3" />
<!-- [필수] xg_service 부활 가능성 상승 -->
<service
android:name="com.tencent.android.tpush.service.XGDaemonService"
android:process=":xg_service_v3" />
<!-- [필수] [주의] authorities를 패키지 이름.AUTH_XGPUSH로 변경해야 하며, demo 패키지 이름인 경우 com.example.wegame이 됨-->
<provider
android:name="com.tencent.android.tpush.XGPushProvider"
android:authorities="com.example.wegame.AUTH_XGPUSH"
android:exported="true"
/>
<!-- [필수] [주의] authorities를 패키지 이름.TPUSH_PROVIDER, demo 패키지 이름인 경우 com.example.wegame이 됨-->
<provider
android:name="com.tencent.android.tpush.SettingsContentProvider"
android:authorities="com.example.wegame.TPUSH_PROVIDER"
android:exported="false" />
<!-- [필수] [주의] authorities를 패키지 이름.TENCENT.MID.V3, demo 패키지 이름인 경우 com.example.wegame이 됨-->
<provider
android:name="com.tencent.mid.api.MidProvider"
android:authorities="com.example.wegame.TENCENT.MID.V3"
android:exported="true" >
</provider>
<!-- 전서구 설정 END -->
3) 게임의 메인 Activity의 기동 방식 launchmode를 singleTask로 수정합니다. 설정 예시는 다음과 같음:
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="sensor"
android:launchMode="singleTask"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
...
</activity>
5 게임 설정 정보 편집
게임 프로젝트 assets 디렉토리 아래 msdkconfig.ini 파일을 열면 MSDK 설정 정보를 편집할 수 있습니다.
MSDK 설정 페이지 설명
필드 | 플랫폼 | 설명 |
---|---|---|
MSDK_ENV | Android | MSDK 환경 선택, 통합 및 테스트 시에 테스트 환경 test를 선택할 수 있으며, 정식 발표 시에는 반드시 정식 release를 선택해야 합니다. |
WXTOKEN_REFRESH | Android | MSDK 위챗에서 자동으로 토큰 새로고침을 켜고 끕니다. 상세 정보는 로그인 모듈 |
PUSH | Android | 전서구(信鸽) 푸시 기능 스위치 |
needNotice | Android | MSDK 공지 기능 스위치 |
noticeTime | Android | MSDK 공지 시스템이 데이터 갱신 시간(네트워크 접속 공지 데이터 요청)을 공지하고, 단위는 분/초(최소 5분)가 됩니다. |
MSDK_REAL_NAME_AUTH_SWITCH | Android | 실명 인증 설정, 0: MSDK 실명 인증 UI를 사용해 인증 후에 로그인 페이지로 돌아갑니다. 1: MSDK 실명 인증 UI를 사용하며, 인증 후에 게임에 로그인 진입합니다. 2: 게임 자체 정의 인증 UI를 사용하며 인증 후에 게임으로 돌아갑니다. |
BETA | Android | 잉용바오(应用宝) 번호 획득 기능 스위치 |
STAT_LOG | Android | 등대 및 MTA 로그 스위치는, true 설정 시에 상세 로그를 인쇄할 수 있으며, 정식 온라인 시에 false로 설정할 것을 권장합니다. |
CLOSE_BUGLY_REPORT | Android | bugly 보고서 스위치를 끄고, true로 설정하면 crash 보고 기능이 꺼집니다. |
SAVE_UPDATE | Android | 잉용바오(应用宝) 데이터 절약 업데이트 다운로드 기능 스위치 |
GRAY_TEST_SWITCH | Android | 화이트 리스트 제한번호 스위치, 번호 파악 예약은 계약 작성 팀에 신청해야 합니다. |
localLog | Android | SDKLog 스위치 0: 인쇄 안 함, 1: logcat 인쇄, 2: 로컬 파일에 인쇄, 3: logcat 및 로컬 파일 동시 인쇄, 로컬 인쇄 저장, 2.15.1 이전 버전: SDCard/MSDK/msdk.log 2.15.1 이상 버전: /sdcard/Android/data/게임 패키지 이름/files/MSDK |
SCOPE | Android | 위챗 scope 필드를 열고, 여러 scope는 “,”으로 구분, 2.18.0 버전부터 지원 |
V2SIGNING_ENABLED | Android | V2 서명 스위치, v2 서명 패키지는 반드시 이 스위치 켜야 하며(켜지 않으면 채널 번호 읽기 오류가 발생할 수 있음), 기본 스위치를 입력하지 않습니다. |
2.16.0 이상 버전 주의사항:
2.16.0 이전 버전에서 2.16.0으로 업그레이드할 경우, 설치 파일 msdkconfig.ini이 다음과 같은 변경을 실시합니다.
1. MSDK 도메인 네임 설정 추가(게임은 수정할 필요 없이 직접 설정 파일 안에 copy)
;이하 설정은 msdk 내부 사용을 위한 것이며 게임에서는 주의할 필요 없음
MSDK_ENV_TEST_URL=http://msdktest.qq.com
MSDK_ENV_RELEASE_URL=http://msdk.qq.com
2. 도메인 네임 선택 설정 추가(게임이 상황에 따라 정확한 환경을 선택)
;정식 환경과 테스트 환경 선택, test는 테스트 환경, release는 정식 환경 MSDK_ENV=test
3. 본래 도메인 네임 설정 솔루션 삭제(MSDK_URL=xxxxx 삭제)
;정식 환경과 테스트 환경을 선택, msdktest.qq.com은 테스트 환경 도메인 네임, msdk.qq.com은 정식 환경 도메인 네임
MSDK_URL=http://msdktest.qq.com(삭제)
MSDKDemo 설정 파일을 참조할 수 있습니다.
2.18.0 이상 버전 주의사항:
2.16.0 이전 버전에서 2.18.0으로 업그레이드할 경우, 설치 파일 msdkconfig.ini은 다음과 같이 변경해야 합니다.
1. 도메인 네임 선택 설정 추가(게임이 상황에 따라 정확한 환경을 선택)
;정식 환경과 테스트 환경 선택, test는 테스트 환경, release는 정식 환경 MSDK_ENV=test
2. 본래 도메인 네임 설정 솔루션 삭제(MSDK_URL=xxxxx 삭제)
;정식 환경과 테스트 환경을 선택, msdktest.qq.com은 테스트 환경 도메인 네임, msdk.qq.com은 정식 환경 도메인 네임
MSDK_URL=http://msdktest.qq.com(삭제)
3. MSDKLibrary 프로젝트 res/values/msdk_properties.xml이 파일을 추가합니다. 업데이트 통합에 주의하십시오.
2.16.0에서 2.18.0로 업그레이드할 경우, 2, 3 단계를 수행하면 됩니다.
MSDKDemo 설정 파일을 참조할 수 있습니다.
6 초기화 코드
1) MSDK 패키지 불러들이기
MSDK 인터페이스를 사용해야 하는 java 코드 내에 MSDK 패키지를 불러들입니다.
import com.tencent.msdk.api.WGPlatform;
2) 로그인 콜백, 플랫폼 풀업 콜백 등록
로그인 콜백, 플랫폼 풀업 콜백은 게임이 관련 인터페이스를 호출하지 않았을 때 촉발할 수 있으므로 게임이 MSDK를 초기화하기 전에 등록해야 합니다.
- 로그인 콜백: 로그인 이벤트 결과 통지, 게임이 모바일QQ/위챗의 로그인 상태에서 로그인 콜백을 기준으로 합니다. 상세 설정에 대해서는 로그인 모듈의 콜백 설정을 참조하십시오.
- 플랫폼 풀업 콜백: 모바일QQ/위챗 내에서 게임을 풀업한 후 이 콜백을 호출할 수 있으며, 풀업 계정, 플랫폼 데이터 투명 정보 등의 정보를 포함합니다. 상세 설정 정보는 로그인 모듈의 다른 계정 처리를 참조하십시오.
WGPlatform.WGSetObserver(new WGPlatformObserver() {
@Override
public void OnWakeupNotify(WakeupRet wakeupRet) {
// TODO GAME 여기에서 다른 계정의 논리를 추가 처리
if (CallbackFlag.eFlag_Succ == wakeupRet.flag || CallbackFlag.eFlag_AccountRefresh == wakeupRet.flag) {
// 로컬 계정 로그인 성공 후 직접 게임 진입 가능
// 게임 TODO: 게임 논리 진입
if(EPlatform.ePlatform_Weixin.val() == wakeupRet.platform) {
loginState = "위챗 로그인 성공";
} else if (EPlatform.ePlatform_QQ.val() == wakeupRet.platform) {
loginState = "QQ 로그인 성공";
} else if(EPlatform.ePlatform_QQHall.val() == wakeupRet.platform) {
loginState = "로비 로그인 성공";
}
} else if (CallbackFlag.eFlag_UrlLogin == wakeupRet.flag) {
// 로컬에 계정 정보가 없으며 자동 풀업 계정 로그인의 로그인 결과가 OnLoginNotify() 내에서 콜백
} else if (CallbackFlag.eFlag_NeedSelectAccount == wakeupRet.flag) {
// 게임 TODO: 다른 계정 시에, 팝업 메시지를 띄워 사용자에게 게임에서 필요한 로그인 계정을 선택하도록 하고, 사용자의 선택에 따라 WGSwitchUser 인터페이스를 호출함
message = "다른 계정입니다!" ;
} else if (CallbackFlag.eFlag_NeedLogin == wakeupRet.flag) {
// 게임 TODO: 유효한 토큰이 없음. 사용자로 하여금 게임 로그아웃 후 재로그인하게 함
//"로그인 실패";
//"재로그인하십시오.";
} else {
//"로그인되어 있지 않음";
//message = "OnWakeupNotify flag : " + wakeupRet.flag + "\ndesc : " + wakeupRet.desc;
WGPlatform.WGLogout();
}
}
@Override
public void OnShareNotify(ShareRet ret) {
// TODO Auto-generated method stub
}
@Override
public void OnRelationNotify(RelationRet relationRet) {
if (relationRet.flag == CallbackFlag.eFlag_Succ) {
// 관계 사슬 검색 성공
} else {
// 관계 사슬 검색 실패
}
}
@Override
public void OnLoginNotify(LoginRet loginRet) {
switch (loginRet.flag)
{
case CallbackFlag.eFlag_Succ:
// 로그인 성공, 각종 토큰을 읽어들일 수 있음
// 게임 TODO: 게임 진입
int platform= loginRet.platform;
if(EPlatform.ePlatform_Weixin.val() == platform) {
loginState = "위챗 로그인 성공";
} else if(EPlatform.ePlatform_QQ.val() == platform) {
loginState = "QQ 로그인 성공";
} else if(EPlatform.ePlatform_QQHall.val() == platform) {
loginState = "로비 로그인 성공";
}
break;
// 게임 TODO: 로그인 실패 상황에 대해 각각 분별하여 처리하고, 일반적으로 모두 로그인 페이지로 돌아가 사용자에게 재승인하도록 안내함
case CallbackFlag.eFlag_QQ_UserCancel:
// 플레이어가 승인 취소
case CallbackFlag.eFlag_QQ_LoginFail:
// QQ 로그인 실패
case CallbackFlag.eFlag_QQ_NotInstall:
// QQ 설치되어 있지 않음
case CallbackFlag.eFlag_Local_Invalid:
// 자동 로그인 실패, 로컬 토큰 기한 만료, 새로고침을 포함한 모든 오류
case CallbackFlag.eFlag_WX_UserCancel:
// 플레이어가 승인 취소
case CallbackFlag.eFlag_WX_NotInstall:
// 위챗 미설치
case CallbackFlag.eFlag_WX_NotSupportApi:
// 위챗 버전 지원하지 않음
case CallbackFlag.eFlag_WX_LoginFail:
//위챗 로그인 실패
default:
//"로그인 실패";
//loginRet.ToString();
break;
}
}
@Override
public void OnLocationNotify(RelationRet relationRet) {
// TODO Auto-generated method stub
}
@Override
public void OnLocationGotNotify(LocationRet locationRet) {
// TODO Auto-generated method stub
}
@Override
public void OnFeedbackNotify(int flag, String desc) {
// TODO Auto-generated method stub
}
@Override
public String OnCrashExtMessageNotify() {
// TODO Auto-generated method stub
return null;
}
@Override
public byte[] OnCrashExtDataNotify() {
// TODO Auto-generated method stub
return null;
}
@Override
public void OnAddWXCardNotify(CardRet ret) {
// TODO Auto-generated method stub
}
});
4) MSDK 초기화 JAVA 계층 및 모바일QQ 승인 항목 권한 설정
MSDK 초기화 C# 계층 및 모바일QQ 승인 항목 권한 설정 후에 Unity 버전의 초기화 작업이 완료됩니다. 그 후에 각 모듈의 설명에 따라 MSDK의 인터페이스를 호출하여 Step5에 따라 게임 패키지를 만들고 실제 환경 결과를 검증합니다.
/***********************************************************
* TODO GAME 액세스는 반드시 baseInfo 값에 따라 게임이 달라지는 것을 확인해야 하며, 입력 시에는 다음 설명에 주의하십시오.
* baseInfo 값을 게임에서 입력 오류할 경우, QQ, 위챗 공유에서 로그인 실패를 유발할 수 있다는 점을 유의해 주십시오!!!
* 단일 플랫폼의 게임 수신의 경우 다른 플랫폼 정보를 임의로 입력하지 마십시오. 임의로 임력할 경우 공지 획득에 실패할 수 있습니다.
* offerId는 필수 입력 사항이며, 일반적으로 모바일QQAppId입니다.
***********************************************************/
MsdkBaseInfo baseInfo = new MsdkBaseInfo();
baseInfo.qqAppId = "100703379";
baseInfo.qqAppKey = "4578e54f**********c734514e";
//2.18.0 버전은 qAppKey 필드 삭제되었음
baseInfo.wxAppId = "wxcde873f99466f74a";
baseInfo.msdkKey = "5d1467a4d**********289965db335f4";
baseInfo.offerId = "100703379";
// TODO GAME은 2.7.1a부터 게임에서 msdk 초기화 시부터 변동적으로 버전 번호를 설정할 수 있으며, 등대와 bugly의 버전 번호는 msdk에서 총괄하여 설정합니다.
// 1. 버전 번호 구성 = versionName + versionCode
// 2. 게임에서 appVersionName(또는 ""로 입력)과 appVersionCode(또는 -1 입력)에 값을 부여하지 않을 경우,
// msdk 기본값은 AndroidManifest.xml 내 android:versionCode="51” 및 android:versionName="2.7.1"를 읽어들임
// 3. 여기서 appVersionName(공백 아님) 및 appVersionCode(정수)를 아래와 같이 입력할 경우, 등대와 bugly 상에서 획득하는 버전 번호는 2.7.1.271
baseInfo.appVersionName = "2.15.0";
baseInfo.appVersionCode = 68903;
// 주의: Initialized의 activity를 입력하면 곧 this이며, 게임 실행 시간에는 취소될 수 없습니다. 취소할 경우, Crash가 발생할 수 있음
WGPlatform.Initialized(this, baseInfo);
// QQ 풀업 시에 사용자 승인이 필요한 항목 설정
WGPlatform.WGSetPermission(WGQZonePermissions.eOPEN_ALL);
주의사항:
-
WGSetPermission을 호출하지 않은 경우, 모바일QQ 친구 풀업 시에 100030 오류가 발생할 수 있습니다. 상세 정보는 로그인 모듈 설명 부분의 승인 페이지 설명을 참조하십시오.
-
게임이 C++ 인터페이스를 사용할 경우, C++ 콜백 설정은 java 호출 초기화(WGPlatform.Initialized) 후에 필요합니다.
5) Android 수명 함수 호출 설정
public void onCreate(Bundle savedInstanceState) {
...
WGPlatform.Initialized(this, baseInfo);
// QQ 풀업 시 필요한 사용자 승인 항목 설정
WGPlatform.WGSetPermission(WGQZonePermissions.eOPEN_ALL);
// handleCallback이 Initialized 뒤에 오도록 해야 함
// launchActivity의 onCreat()와 onNewIntent() 내에서 호출해야 함
// WGPlatform.handleCallback(). 그렇지 않은 경우, 위챗 로그인 시에 콜백이 없을 수 있음
WGPlatform.handleCallback(getIntent());
...
}
@Override
protected void onRestart() {
super.onRestart();
WGPlatform.onRestart();
}
@Override
protected void onResume() {
super.onResume();
WGPlatform.onResume();
// TODO GAME 시뮬레이션 게임 자동 로그인, 여기서 게임에 애니메이션 로드를 추가해야 함
// WGLogin은 비동기 인터페이스로, ePlatform_None을 입력하면 로컬 토큰을 호출하고 해당 토큰의 유효 여부를 검증
// 로그인하지 않았을 경우, 즉시 onLoginNotify에서 flag를 eFlag_Local_Invalid로 반환할 수 있으며, 이때는 반드시 승인 인터페이스를 풀업해야 함
// 이때 WGLogin 호출을 권장하며, 이것은 handlecallback 뒤에서 호출을 실시해야 합니다.
if(isFirstLogin) {
isFirstLogin = false;
startWaiting();
WGPlatform.WGLogin(EPlatform.ePlatform_None);
}
}
// TODO GAME 게임은 이 메소드를 통합하고 WGPlatform.onPause()를 호출해야 함
@Override
protected void onPause() {
super.onPause();
WGPlatform.onPause();
}
// TODO GAME 게임은 이 방법을 통합하고 WGPlatform.onStop()을 호출해야 함
@Override
protected void onStop() {
super.onStop();
WGPlatform.onStop();
}
// TODO GAME 게임은 이 메소드를 통합하고 WGPlatform.onDestory()를 호출해야 함
@Override
protected void onDestroy() {
super.onDestroy();
WGPlatform.onDestory(this);
Logger.d("onDestroy");
}
// TODO GAME은 onActivityResult 내에서 WGPlatform.onActivityResult를 호출해야 함
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
WGPlatform.onActivityResult(requestCode, resultCode, data);
Logger.d("onActivityResult");
}
// TODO GAME은 onNewIntent 내에서 handleCallback을 호출해 플랫폼이 가져오는 데이터를 MSDK에 제출하여 처리해야 함
@Override
protected void onNewIntent(Intent intent) {
Logger.d("onNewIntent");
super.onNewIntent(intent);
// TODO GAME에서 게임 풀업된 상황 처리
// launchActivity의 onCreat() 및 onNewIntent()에서 테스트
// WGPlatform.handleCallback()。 그렇지 않은 경우, 위챗 로그인 콜백이 없을 수 있습니다.
if (WGPlatform.wakeUpFromHall(intent)) {
Logger.d("LoginPlatform is Hall");
Logger.d(intent);
} else {
Logger.d("LoginPlatform is not Hall");
Logger.d(intent);
WGPlatform.handleCallback(intent);
}
}
주의사항:
- 새로 생성된 Activity는 AndroidManifest.xml 내 선언을 잊어버려서는 안 됩니다.
- Override Activity 수명 주기에서는, 상위 카테고리의 수명 주기를 호출해 주십시오. 그 예는 다음과 같습니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
……
}
7 Android 위챗 로그인은 검사 절차를 거치지 않습니다.
제 1단계: Log 내 유무 확인
lauchWXPlatForm wx SendReqRet: true
이 문자 표시가 있으면 요청을 위챗에 발송 성공한 것입니다.
위챗 클라이언트를 풀될 수 없을 경우, 제 2단계를 확인하시고, 위챗 클라이언트가 풀되었지만 콜백이 없을 경우에는 제 3단계를 확인하십시오.
제 2단계: 서명 및 패키지 이름 확인
https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android2.apk를 다운로드해 이 apk을 스마트폰에 설치한 후, 입력창에 게임 패키지 이름을 입력하고 버튼을 클릭해 게임 패키지 서명을 읽습니다.
상기 도구로 획득한 서명과 위챗 백그라운드 설정 서명과 일치하는지 확인합니다.(위챗 백그라운드 설정 서명 정보 확인은 RTX에서 MSDK에 문의하십시오.)
제 3단계: WXEntryActivity.java 위치 확인(이 파일은 MSDKSample 내에 있음)
이 문서는 게임+.wxapi 아래에 위치시켜야 하며, 게임 패키지 이름이 com.tencent.msdkgame일 경우, WXEntryActivity.java는 반드시 com.tencent.msdkgame.wxapi 아래에 있어야 합니다. 또한 WXEntryActivity 안의 내용이 아래와 일치하는지 확인하십시오.
/**
* !!이 문서의 코드 논리 부분 사용자는 수정해서는 안 되며, MSDK는 1.7부터 상위 클래스 이름이 WXEntryActivity에서 BaseWXEntryActivity로 변경되며, 이 파일에 에러가 발생할 경우, 우선적으로 이 행목의
*/
public class WXEntryActivity extends com.tencent.msdk.weixin.BaseWXEntryActivity { }를 확인해 주십시오.
이 단계에 문제가 없으면 제 4단계를 확인하십시오.
제 4단계: handleCallback 확인
게임의 Launch Activity의 onCreate 및 onNewIntent 내에서 WGPlatform.handleCallback 호출 유무.
제 5단계: 게임의 범용 Observer 설치 유무 확인.
게임에 정확한 WGSetObserver(C++ 계층 및 Java 계층) 호출이 있는지 확인합니다.
자주 묻는 질문
위챗 액세스 시 주의사항:
- 위챗으로부터 승인 회신하게 하려면, 화이트 리스트 프레임이 경험에 영향을 비치지 않아야 하며, 주제를
"Theme.Translucent.NoTitleBar”
로 설정할 수 있으며, 이 투명 주제를 사용하면 동시에android:screenOrientation="portrait”
를 설정해야 하며, 그렇게 하지 않을 경우, 위챗 로그인에 이상이 발생할 수 있습니다. 애플리케이션 패키지 이름+.wxapi
아래에WXEntryActivity.java
파일을 위치시킵니다.- 위챗 액세스 Activity 중에
3곳을 게임에서 자체적으로 변경
(위 예시에 표시되어 있음)해야 합니다.