개요
공지 모듈은 MSDK에서 게임에 제공하는 정보 통지 시스템으로, MSDK 공지 관리 클라이언트를 이용해 가시적인 조작이 가능해 집니다. 공지 시스템을 통해, 귀하께서는 게임 과정에서 모든 또는 지정된 사용자에 대해 다음과 같은 이벤트 통지를 할 수 있습니다.
1) 운용 고장: 운용 과정에서 이상 상황이 발생한 경우, 귀하는 시스템을 통해 사용자에게 이상 상황을 알리고 예상되는 복원 시간을 통지할 수 있습니다.
2) 정지, 정비: 사용자에게 귀하의 정지, 정비 시간을 통지함으로써 사전에 사용자가 합리적으로 게임 시간을 계획할 수 있게 합니다.
3) 이벤트 메시지: 게임 이벤트 통지 메시지
저희가 제공하는 공지에는 다음과 같은 특징이 있습니다.
1) 정확한 타겟팅을 통한 접촉
전체 공지(모든 사용자가 수신)
구역 별 공지(지정한 대형 구역 사용자만 수신)
조작 시스템에 따른 공지(지정한 조작 시스템의 사용자만 공지를 수신하며, Android 및 iOS 시스템에 한정)
지정된 번호 공지(지정된 번호(QQ번호, 위챗 번호)만 수신)
2) 다양한 환경 지원
로그인 전 공지: 로그인 하지 않고도 전체 공지 발송 가능
로그인 후 공지: 로그인한 후에 모든 형식의 공지 발송 가능
3) 데이터 로컬라이제이션
모든 유효한 공지 클라이언트가 사전에 클라이언트에서 실행해 저장할 수 있으며, 공지 기능 사용 시에 저희가 직접 클라이언트 로컬 데이터베이스에서 귀하께서 필요로 하는 공지를 읽어 와서 표시합니다.
4) 다양한 UI 형식
팝업창 UI 공지(대화창 표시를 통해 공지 내용을 디스플레이)
스크롤 UI 공지(플로팅 윈도우 형식으로 공지 내용을 표시)
자체 정의 UI 공지(저희의 공지 데이터 베이스 디스플레이의 개성 있는 맞춤형 UI를 사용하실 수 있습니다.)
5) 다양하고 풍부한 콘텐츠
지원 콘텐츠: 문자, 이미지, 웹페이지 등 3가지 형식
다양한 형식의 공지 UI 참조사항
a) 팝업창 문자 UI 공지
b) 팝업창 이미지 UI 공지
c) 팝업창 웹페이지 UI 공지
d) 스크롤 UI 공지
이상은 모두 msdk 자체 보유 UI 공지이며, 게임에서 WGShowNotice(scene) 인터페이스를 호출하여 대응하는 공지창에 ID를 입력하면 바로 상응하는 공지를 표시할 수 있습니다.
e) 자체 정의 UI 공지
자체 정의 UI 공지를 사용해서 게임에서 WGGetNoticeData(scene)를 호출해 공지 데이터를 획득할 수 있습니다.
6) 공지 최상위 표시 기능
최상위 표시 설정이 된 공고를 우선적으로 표시합니다. 공지에 대해 최상위 표시 설정을 한 후, MSDK의 자체 공지 인터페이스를 이용해, 또는 MSDK의 공지 데이터 인터페이스 시 획득한 데이터를 사용해 아래 순서에 따라 배열할 수 있습니다.
최상위 위치 표시(우선도 가장 높음) 설정된 공지는 해당 설정이 되어있지 않은 공지(우선도 낮음)보다 앞에 표시됩니다.
같은 우선 순위의 공지(동일한 최상위 위치 표시 또는 해당 설정이 안 되어 있는)는 공지 생선 순서대로 배열되며, 생성 시간이 늦을수록 배열 위치도 더욱 앞으로 오게 됩니다.
액세스 내비게이션
1 사전 요구 사항
1) 게임에서 이미 msdk 설정 파일 msdkconfig.ini 내 공지needNotice=true를 열었습니다.
주의사항
1) 관리 클라이언트에서 공지 설정(약 5분 후 활성화될 수 있음)
2) 게임을 기동하거나 로그인해 공지를 불러옵니다. 이 외에도, 공지 모듈에는 정해진 시간 동안 불러온 상태를 유지하는 기능(기본 10분)도 있습니다.
2 MSDK 관리 클라이언트 공지 설정
MSDK 관리 클라이언트 주소: 外网:http://open.qq.com 内网:http://dev.ied.com
MSDKDemo 공지 예시:
1) MSDK 관리 클라이언트 --> MSDK 관리 -> 공지 관리
2) 공지 관리 -> 공지(테스트 환경/정식 환경 —> 공지 추가
3) 공지 인터페이스의 입력 공지에 대응하는 파라미터를 추가하고 공지 추가 버튼을 클릭하면 공지 설정 완료
외부 네트워크 개발자는 상세한 MSDK 공지 관리 클라이언트 사용 설명을 참조하십시오.
3 클라이언트 공지 액세스
공지 액세스는 공지 데이터 받기
4 Demo 예시를 참고하십시오.
예시는 com\example\module\submodule\NoticeModule.java 파일의 showAllTypeNotice()、callWGHideScrollNotice()、callWGGetNoticeData() 메소드를 참조하십시오.
통합 및 테스트 시 주의사항
1) 클라이언트 설정 스위치 확인 MSDK_URL=http://msdktest.qq.com
(선택한 환경과 관리 클라이언트 설정 공지 환경이 일치)
액세스 설정Step3 정보 설정
2) 개발 인원이 공지 관리 클라이언트에서 공지(테스트 환경)를 선택해 공지를 추가하고 통합 테스트를 실시합니다.
3) 클라이언트에서 관리 클라이언트가 설정한공지 유형(로그인 전/후, 스크롤 팝업, 번호 팩 등 테스트 여부)을 선택해 테스트를 실시하고, 공지가 표시되지 않으면, 자주 묻는 질문을 클릭해 절차에 따라 검사를 실시합니다.
공지 표시
1 개요 설명
해당 인터페이스를 호출하면 귀하께서 관리 클라이언트에서 설정한 공지를 표시할 수 있습니다.
2 콜백
없음
3 인터페이스 호출
1) 기능 설명
해당 인터페이스를 호출하면 귀하께서 관리 클라이언트에서 설정한 공지를 표시할 수 있습니다.
2) 인터페이스 선언
public static void WGShowNotice(string scene);
3) 파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
scene | string | 공지 필드 ID는 빈 칸이 될 수 없으며, 이 파라미터와 공지 관리 클라이언트의 “공지 필드” 설정은 대응되어야 합니다. |
4) 반환값
없음, 직접 공지 인터페이스에 표시
5) 예시 코드
string sceneString = "1";
WGPlatform.WGShowNotice(sceneString);
6) 특수 설명
1) 인터페이스 호출 시에 사용한 공지 필드 id(scene) 공지 관리 클라이언트에서 **설정한 “공지 필드” ID에 대응하도록 하고, 공지 ID(msgid)로 공지 필드 ID를 대체하지 마십시오.
2) WGShowNotice 호출은 MSDK 설정의 한 세트의 인터페이스를 통해 현재 유효한 공지를 표시합니다. 팝업 공지의 경우, 이동 링크 보유 여부를 설정할 수 있고, 이동 링크를 보유한 공지는 상세 정보를 클릭하면 MSDK 내장 브라우저를 풀업해 대응하는 상세 정보 URL을 엽니다.
7) 명칭 해석
없음
스크롤 공지 숨기기
1 개요 설명
이미 표시한 스크롤 공지를 숨김
2 콜백
없음
3 인터페이스 호출
1) 기능 설명
이미 표시한 스크롤 공지를 숨김
2) 인터페이스 선언
public static void WGHideScrollNotice();
3) 파라미터 설명
없음
4) 반환값
없음, 현재 표시된 스크롤 공지 인터페이스를 숨깁니다.
- 코드 예시
WGPlatform.WGHideScrollNotice();
6) 특수 설명
없음
7) 명칭 해석
없음
공지 데이터 받기
1 개요 설명
로컬 데이터베이스에서 지정된 유효한 공지 데이터를 읽어와서 호출자에게 반환합니다.
2 콜백
없음
3 인터페이스 호출
1) 기능 설명
로컬 데이터베이스에서 지정된 유효한 공지 데이터를 읽어와서 호출자에게 반환합니다. MSDK3.2 이후 버전의 공지 기능은 자체 정의 문자열 투명 전송을 지원하며, 귀하께서는 페이텅 플랫폼(dev.ied.com) 상에서 자체 정의 문자열 파라미터를 설정할 수 있으며, 공지 발송 후에, NoticeInfo.mNoticeCustom 내에서 획득합니다. 자체 정의 문자열 파라미터는 512B 이하의 utf8 코드 문자열이 됩니다.
2) 인터페이스 선언
public static List<NoticeInfo> WGGetNoticeData(string scene);
3) 파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
scene | string | 공지 필드 ID는 빈 칸이 될 수 없으며, 이 파라미터와 공지 관리 클라이언트의 “공지 필드” 설정은 대응되어야 합니다. |
4) 반환값
List
5) 예시 코드
Vector<NoticeInfo> noticeInfos = WGPlatform.WGGetNoticeData(scene);
String result = "획득 " + noticeInfos.size() + " 건의 공지 데이터.\n";
for(NoticeInfo notice : noticeInfos) {
result += "notice " + index + " :\n" +
" 공지 id: " + notice.mNoticeId + "\n" +
" 공지 필드 id: " + notice.mNoticeScene + "\n" +
" 이동 링크: " + notice.mNoticeUrl + "\n" +
" 자체 정의 파라미터: "+ notice.mNoticeCustom + "\n";
if (notice.mNoticeContentType ==
eMSG_CONTENTTYPE.eMSG_CONTENTTYPE_TEXT) {
result += " 공지 내용 유형: 문서 공지\n" +
" 공지 제목: " + notice.mNoticeTitle + "\n";
} else if (notice.mNoticeContentType ==
eMSG_CONTENTTYPE.eMSG_CONTENTTYPE_IMAGE) {
result += " 공지 내용 유형: 이미지 공지\n" +
" 가로 화면 이미지 URL: " + notice.mNoticeHImgUrl + "\n" +
" 세로 화면 이미지 URL: " + notice.mNoticeVImgUrl + "\n";
} else {
result += " 공지 내용 유형: 웹페이지 공지\n" +
" 웹페이지 주소: " + notice.mNoticeContentWebUrl + "\n";
}
}
6) 특수 설명
인터페이스 호출 시에 사용한 공지 필드 id(scene) 공지 관리 클라이언트에서 설정한 “공지 필드” ID에 대응하도록 하고, 공지 ID(msgid)로 공지 필드 ID를 대체하지 마십시오. PicInfo 내 이미지 경로는 로컬 절대 경로가 됩니다.
7) 명칭 해석
없음
자주 묻는 질문
게임 공지는 검사 절차를 정상적으로 표시할 수 없습니다.
- 공지 모듈 스위치 기동 여부:
게임 assets/msdkconfig.ini 내 NeedNotice 항목의 값이 true인지 확인하십시오. 아닐 경우, true로 수정한 후 다시 시도하고 계속 아랫쪽으로 검사합니다. 검사 방법: MSDK 로그를 검사해 아래 행과 같은 로그가 있을 경우, 공지 모듈이 종료 상태임을 나타냅니다.
WeGame NoticeManager.init notice module is closed!
아래 행과 같은 로그가 있을 경우, 공지 모듈이 기동 상태임을 나타냅니다.
WeGame NoticeManager.init notice module init start!
게임 패키지를 디컴파일링해 assets 리스트 아래의 msdkconfig.ini 파일을 찾아서, needNotice 항목이 있는지 확인하고 needNotice의 값이 true로 되어 있는지 확인합니다.
- 공지 환경의 지원 여부를 확인하십시오.
MSDK 정식 환경 및 테스트 환경의 공지 데이터는 서로 호환되지 않으므로, 게임은 공지 클라이언트 설정 환경이 클라이언트 설정 도메인 네임과 일치하는지 확인해야 합니다.
관리 클라이언트의 정식 환경에 대응하는 클라이언트 도메인 네임:MSDK_URL=http://msdk.qq.com; 2.16.0 이상 버전은 MSDK_ENV=release에 대응
관리 클라이언트의 정식 환경에 대응하는 클라이언트 도메인 네임:MSDK_URL=http://msdktest.qq.com; 2.16.0 이상 버전은 MSDK_ENV=test에 대응
- 인터페이스 호출에 유효한 내용이 포함되어 있는지 검사하십시오.
MSDK의 로그에서 인터페이스 호출 이력 내에 공지가 있는지 확인하십시오. 0이 아닐 경우, MSDK 관련 작업을 찾아 확인하십시오. 0일 경우 계속해서 아랫쪽을 검사하십시오. 확인 방법:
MSDK 로그에서 noticeVector size의 값을 확인합니다.
WeGame NoticeDBModel.getNoticeRecordBySceneAndType query result:0
WeGame NoticeManager.getNoticeFromDBBySceneAndType noticeVector size:0
- 공지를 획득한 appid가 정확한지 확인합니다.
MSDK의 로그를 확인해 공지 획득 시의 appid가 정확한지 검사합니다. 로그인 전 공지는 모바일QQ와 위챗의 appid의 조합이며, 로그인 후 공지는 대응하는 플랫폼의 appid입니다. 정확하지 않을 경우, 초기화 위치에서 수정 후에 재시도하십시오. 정확한 경우, 계속해서 아랫쪽을 검사하십시오. 확인 방법:
MSDK 로그 내에서 NoticeManager.getNoticeInfo 호출 시의 appid 값을 확인한 후에, dev 백그라운드와 공지 요구 시간(등록 여부)을 비교해 정확한지 검사합니다. 특히 자주 보게 되는 일로, 단일 플랫폼의 게임을 수신해 무작위로 다른 플랫폼의 정보를 입력하는 경우, 공지 획득 실패로 이어질 수 있습니다.
WeGame NoticeManager.getNoticeInfo appid:100703379|wxcde873f99466f74a;openid:
WeGame NoticeManager.getNoticeInfo Notice Model:mat_id may be null:860463020910104;mMatId:860463020910104
- 공지가 관리 클라이언트에서 클라이언트로 발송되었는지 확인하십시오.
게임 로컬 데이터를 지운 후에 게임을 재기동하고, MSDK 로그를 확인한 후에 백그라운드 발송된 공지 리스트에 설정된 공지가 포함되어 있는지 검사하십시오. 없을 경우, MSDK 백그라운드를 찾아 확인하십시오. 있을 경우, 계속해서 아랫쪽을 검사해 주십시오. 확인 방법:
MSDK 로그에서 /notice/gather_data/ 요청의 반환 내용을 확인해 주십시오. 예시는 다음과 같습니다.
strResult:{"appid":"100703379|wxcde873f99466f74a","invalidMsgid":[{"invalidMsgid":"499"},{"invalidMsgid":"500"},{"invalidMsgid":"483"},{"invalidMsgid":"509"},{"invalidMsgid":"513"}],"list":[{"appid":"100703379|wxcde873f99466f74a","beginTime":"1403614800","contentType":2,"contentUrl":"http://www.qq.com","endTime":"1412168400","msgContent":"","msgUrl":"http://www.baidu.com","msgid":"528","noticeType":0,"openid":"","picUrlList":[],"scene":"10","title":""},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1403614800","contentType":1,"contentUrl":"","endTime":"1412168400","msgContent":"","msgUrl":"","msgid":"527","noticeType":0,"openid":"","picUrlList":[{"hashValue":"7a7ac418fb79917875cfd80c81ee4768","picUrl":"http://img.msdk.qq.com/notice/527/20140624211729_610X900.jpg","screenDir":1},{"hashValue":"2243f401734483f09ceeffd86006262d","picUrl":"http://img.msdk.qq.com/notice/527/20140624211739_1080X440.jpg","screenDir":2}],"scene":"10","title":""},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1403573435","contentType":0,"contentUrl":"","endTime":"1412127095","msgContent":"& &&호환 테스트용 샘플, 2& && 특수 기호에 관하여","msgUrl":"","msgid":"490","noticeType":0,"openid":"","picUrlList":[],"scene":"10","title":"& && 호환 테스트 2&"},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1396575095","contentType":0,"contentUrl":"","endTime":"1412127095","msgContent":”스크롤 공지 설정 시에는 줄 바꿈 문자를 입력할 수 없습니다. 왜?\ r\n\r\n","msgUrl":"","msgid":"491","noticeType":1,"openid":"","picUrlList":[],"scene":"11","title":""},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1396575095","contentType":0,"contentUrl":"","endTime":"1412127095","msgContent":"아래는 줄 바꿈 문자야\r\n줄 바꿈 문자 1개, \r\n또 하나의 줄 바꿈 문자 \r\n아, 또 한 개\r\n좋아. 이게 마지막일 거야\r\n나는 갈게, 또 한 개 있네\r\n이게 정말 마지막일 거야","msgUrl":"","msgid":"492","noticeType":0,"openid":"","picUrlList":[],"scene":"10","title":"줄 바꿈 테스트"},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1396575095","contentType":0,"contentUrl":"","endTime":"1412127095","msgContent":"아래는 줄 바꿈 문자야\r\n줄 바꿈 문자 1개, \r\n또 하나의 줄 바꿈 문자\r\n아, 또 한개\r\n좋아. 이게 마지막일 거야\r\n나는 갈게, 또 한 개 있네\r\n이게 정말 마지막일 거야\r\n아래 상세 정보를 클릭하면 이동해. 나 간다.\r\n","msgUrl":"http://im.qq.com","msgid":"493","noticeType":0,"openid":"","picUrlList":[],"scene":"10","title":"줄 바꿈 문자+이동 테스트"},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1396575095","contentType":0,"contentUrl":"","endTime":"1412127095","msgContent":"스크롤 공지 설정 시에는 줄 바꿈 문자를 입력할 수 없습니다. 왜?\ r\n\r\n","msgUrl":"","msgid":"494","noticeType":1,"openid":"","picUrlList":[],"scene":"11","title":""},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1396575095","contentType":0,"contentUrl":"","endTime":"1412127095","msgContent":"& &&호환 테스트용 샘플,2& && 특수 문자에 관하여*&……¥%……@#——+()?》 <, 나는 스크롤 공지란 안에 출현해야 되고, 내 옆에는 스크롤 공지가 1개 있어야 하는데, 내 앞? 아니면 뒤?" ,"msgUrl":"","msgid":"495","noticeType":1,"openid":"","picUrlList":[],"scene":"11","title":""},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1403229600","contentType":0,"contentUrl":"","endTime":"1404011100","msgContent":"모든 사용자에게 이동 링크가 있는 공지를 보내고, 종료 시간은 현재 시간에서 상당히 가까움","msgUrl":"http://www.qq.com","msgid":"487","noticeType":0,"openid":"","picUrlList":[],"scene":"1","title":"종료 시간, 이동 링크 있음"},{"appid":"100703379|wxcde873f99466f74a","beginTime":"1403748000","contentType":0,"contentUrl":"","endTime":"1403834400","msgContent":"위챗+모바일QQ+android+스크롤","msgUrl":"","msgid":"514","noticeType":1,"openid":"","picUrlList":[],"scene":"4","title":""}],"msg":"success","ret":0,"sendTime":"1403777179"}
안에 모든 공지 내용이 포함되어 있을 수 있으며, 게임은 백그라운드 설정 공지의 id 등에 근거해 검색 범위를 축소한 후 공지 발송 여부를 확인합니다.
- 공지가 로컬 시간의 유효한 시기에 발송되었는지 검사합니다.
MSDK 로그를 확인하고, 공지 표시 호출 시 로컬 시간을 확인합니다. 로컬 시간이 공지의 유효한 시간 범위에 있지 않을 경우, 로컬 시간을 수정한 후 재시도하십시오. 로컬 시간이 유효한 기간일 경우, 계속해서 아랫쪽으로 검사하십시오. 확인 방법:
앞 단계에서 공지의 시작/종료 시간 등의 관련 정보를 찾았을 경우, MSDK 로그에서 NoticeDBModel.getNoticeRecordBySceneAndType 호출 시의 currentTimeStamp의 값을 확인합니다.
WeGame MsdkThreadManager.showNoticeByScene showNotice
WeGame NoticeManager.setAppinfo mAppId:wxcde873f99466f74a;mOpenId:oGRTijsKcz0dOi__dwJTZmINGfx0
WeGame NoticeDBModel.getNoticeRecordBySceneAndType appId:wxcde873f99466f74a,openid:oGRTijsKcz0dOi__dwJTZmINGfx0,scene:10,noticetype:eMSG_NOTICETYPE_ALERT,currentTimeStamp:1403835077
WeGame NoticeDBModel.getNoticeRecordBySceneAndType query result:5
공지 획득 시간을 얻은 로컬 시간을 비교한 후 로컬 시간이 공지 유효 기간 이내(공지 시작 및 종료 시간 구간 이내)에 있는지 비교 확인합니다.
- 인터페이스 호출 파라미터가 정확한지 검사합니다.
MSDK 로그와 게임의 공지 관리 클라이언트의 설정을 비교하고, 공지 인터페이스 호출 설정과 백그라운드가 일치하는지 확인하십시오. 일치하지 않을 경우, 수정한 후에 재시도하십시오. 일치할 경우, 계속해서 아랫쪽을 검사하십시오. 확인 방법:
MSDK 로그 내에서 아래와 유사한 로그를 확인합니다.
WeGame NoticeDBModel.getNoticeRecordBySceneAndType appId:100703379|wxcde873f99466f74a,openid:,scene:11,noticetype:eMSG_NOTICETYPE_SCROLL,currentTimeStamp:1409632268
공지 호출 시 전달된 scene 값과 noticetype가 게임의 공지 관리 클라이언트 내 설정과 일치하는지 확인하십시오. 특히, scene 값의 대응하는 값이 관리 클라이언트 설정 공지의 공지 필드 ID와 일치하는지 확인하십시오.
- 게임의 appid 설정이 정확한지 확인하십시오.