公告
Unity3D
概述
接入向导
隐藏滚动公告
获取公告数据
常见问题
Android
概述
接入向导
隐藏滚动公告
获取公告数据
常见问题
IOS
概述
接入向导
隐藏滚动公告
获取公告数据
常见问题
其他
数据结构
系统工具
公告 / Android / 概述

概述

公告模块是MSDK为游戏提供的信息通知系统,可以通过MSDK公告管理端完成可视化操作。 通过公告系统您可以在游戏过程中对所有或者指定用户进行事件周知:

显示详情

接入向导

1 前置条件

1)游戏已经在msdk配置文件msdkconfig.ini中打开公告needNotice=true

注意事项

1)管理端配置公告(可能要等5min钟左右才会生效)

2)启动或登录游戏拉取公告;此外,公告模块还有定时拉取机制(默认10分钟拉取一次)

2 MSDK管理端配置公告

MSDK管理端地址: http://dev.ied.com

以MSDKDemo公告为例:

1)进入飞鹰系统首页->公告配置

2)MSDK V3 公告管理 -> 公告(测试环境/正式环境)—>添加公告

3)添加公告界面输入公告对应的参数点击添加公告按钮完成公告配置

3 参考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)接口声明
void WGHideScrollNotice();
3)参数说明

4)返回值

无,隐藏正在展示的滚动公告界面

  • 代码示例
WGPlatform::GetInstance()->WGHideScrollNotice();
6)特殊说明

7)名称解释

获取公告数据

1 概要说明

从本地数据库读取指定的有效公告数据返回给调用者

2 注册回调

3 接口调用

1)功能描述

从本地数据库读取指定的有效公告数据返回给调用者。
MSDK3.2版本之后公告支持自定义透传字符串,您可以在飞鹰平台上进行配置自定义字符串参数,公告下发后,在NoticeInfo.mNoticeCustom中获取。自定义字符串参数为小于512字节的utf8编码的字符串。
自定义字符串游戏可根据需求进行配置,如:游戏想实现分区服发送公告,则游戏客户端同配置同学约定好该字段配置内容,通过mNoticeCustom字段获取配置信息,根据该信息来匹配,确认是否展示即可。

2)接口声明
std::vector<NoticeInfo> WGGetNoticeData(unsigned char *scene)
3)参数说明
参数名称 类型 说明
scene unsigned char * 公告栏ID,不能为空, 这个参数和公告管理端的“公告栏”设置对应
4)返回值

List:NoticeInfo结构的List详情参考NoticeInfo

NoticeInfo定义说明

5)示例代码
std::vector<NoticeInfo> noticeVector = 
            WGPlatform::GetInstance()->WGGetNoticeData((unsigned char *)(cScene.c_str()));
6)特殊说明

在调用接口时使用的公告栏id(scene)公告管理端设置的“公告栏”ID对应,请不要使用公告ID(msgid)代替公告栏ID PicInfo中图片路径为本地绝对路径

7)名称解释

常见问题

游戏公告不能正常展示检查步骤

  1. 公告模块开关是否开启:

    检查游戏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.

  2. 查看公告环境是否对应:

    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

  3. 查看调用接口是否有有效内容:

    查看MSDK的日志,看调用接口的日志里是否有公告。如果不是0,找MSDK相关开发确认;如果是0,则继续往下检查。检查方法:

    在MSDK日志中看noticeVector size的值:

    WeGame NoticeDBModel.getNoticeRecordBySceneAndType   query result:0
    WeGame NoticeManager.getNoticeFromDBBySceneAndType   noticeVector size:0
  4. 查看获取公告的appid是否正确:

    查看MSDK的日志,看获取公告时的appid是否正确,登录前公告为手Q和微信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
  5. 查看公告是否从管理端下发到客户端:

    清空游戏本地数据,然后重新启动游戏,然后查看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一个换行符,\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一个换行符,\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& && 关于特殊字符*&……¥%……@#——+()?》《,我应该出现在滚动公告栏里,我旁边应该还有一个滚动公告,在我前面还是后面呢?","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":"微信+手Q+android+滚动","msgUrl":"","msgid":"514","noticeType":1,"openid":"","picUrlList":[],"scene":"4","title":""}],"msg":"success","ret":0,"sendTime":"1403777179"}

    里面会包含所有公告的内容,游戏可以根据后台配置公告的id等缩小搜索范围,查看公告是否下发。

  6. 检查公告是否在本地时间的有效期:

    检查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

    对比获取公告的时候取得的本地时间,然后对比查看本地时间是否在公告有效期内(公告的开始与结束时间的区间内)。

  7. 检查调用接口参数是否正确:

    对比MSDK日志和游戏在公告管理端的配置,看公告接口调用的配置与后台是否一致。如果不一致,修改以后再调试;如果一致,继续往下看。检查方法:

    在MSDK日志中看类似下面的日志:

    WeGame NoticeDBModel.getNoticeRecordBySceneAndType   appId:100703379|wxcde873f99466f74a,openid:,scene:11,noticetype:eMSG_NOTICETYPE_SCROLL,currentTimeStamp:1409632268

    查看调用公告的时候传递的scene值和noticetype是否和游戏在公告管理端配置的一致,尤其scene值对应的是管理端配置公告的公告栏ID。

  8. 检查游戏的appid配置是否正确:

    对比游戏在onCreate里面配置的appid是否和在开放平台注册的一样,如果不一致,修改一致以后再调试,如果一致,找MSDK开发解决。