概述
公告模块是MSDK为游戏提供的信息通知系统,可以通过MSDK公告管理端完成可视化操作。 通过公告系统您可以在游戏过程中对所有或者指定用户进行事件周知:
显示详情接入向导
1 前置条件
游戏已经在info.plist中设置公告功能为YES,如:
此外还可配置定时拉取公告时间(单位为秒),如:
注意事项
1)管理端配置公告(可能要等5min钟左右才会生效)
2)启动或登录游戏拉取公告;此外,公告模块还有定时拉取机制(默认10分钟拉取一次)
2 MSDK管理端配置公告
MSDK管理端地址: http://dev.ied.com
以MSDKDemo公告为例:
1)进入飞鹰系统首页->公告配置
2)MSDK V3 公告管理 -> 公告(测试环境/正式环境)—>添加公告
3)添加公告界面输入公告对应的参数点击添加公告按钮完成公告配置
3 参考Demo示例
示例参考 MSDKDemo/NoticeViewController.mm 文件的 onClickShowNotice, onClickHideScrollNotice, pickerView 方法。
4 联调测试注意事项
1) 确认客户端配置开关MSDK_URL=http://msdktest.qq.com
(选择的环境与管理端配置公告的环境一致)
参考接入配置Step3 配置信息
2) 开发人员在公告管理端选择公告(测试环境)添加公告进行联调测试
3) 客户端根据管理端配置的公告的类型(登陆前后,滚动弹出,是否号码包等测试)进行测试,如果公告无法显示,请点击常见问题,按照步骤排查。
隐藏滚动公告
概括说明
隐藏已经展示出来的滚动公告
注册回调
无
接口调用
1)功能描述
隐藏已经展示出来的滚动公告
2)接口声明
void WGHideScrollNotice();
3)参数说明
无
4)返回值
无,隐藏正在展示的滚动公告界面
5)代码示例
WGPlatform::GetInstance()->WGHideScrollNotice();
6)特殊说明
无
7)名词解释
无
获取公告数据
概括说明
从本地数据库读取指定的有效公告数据返回给调用者
注册回调
无
接口调用
1)功能描述
从本地数据库读取指定的有效公告数据返回给调用者。
MSDK3.2版本之后公告支持自定义透传字符串,您可以在飞鹰平台上进行配置自定义字符串参数,公告下发后,在NoticeInfo.msg_custom中获取。自定义字符串参数为小于512字节的utf8编码的字符串。
自定义字符串游戏可根据需求进行配置,如:游戏想实现分区服发送公告,则游戏客户端同配置同学约定好该字段配置内容,通过mNoticeCustom字段获取配置信息,根据该信息来匹配,确认是否展示即可。
2)接口声明
std::vector<NoticeInfo> WGGetNoticeData(unsigned char *scene);
3)参数说明
参数名称 | 类型 | 说明 |
---|---|---|
scene | unsigned char * | 公告栏ID,不能为空, 这个参数和公告管理端的“公告栏”设置对应 |
4)返回值
std::vector
5)代码示例
NSString *scene = @"1";
std::vector<NoticeInfo> noticeInfos = WGPlatform::GetInstance()->WGGetNoticeData((unsigned char *)[scene UTF8String]);
NSMutableArray *infosArray = [NSMutableArray new];
for (int i = 0; i < noticeInfos.size(); i++)
{
NoticeInfo noticeInfo = noticeInfos[i];
NSMutableDictionary *noticeInfoDic = [NSMutableDictionary new];
NSString *msg_id = noticeInfo.msg_id.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.msg_id.c_str() encoding:NSUTF8StringEncoding];
NSString *open_id = noticeInfo.open_id.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.open_id.c_str() encoding:NSUTF8StringEncoding];
NSString *msg_url = noticeInfo.msg_url.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.msg_url.c_str() encoding:NSUTF8StringEncoding];
NSString *msg_type = [NSString stringWithFormat:@"%d",noticeInfo.msg_type];
NSString *msg_scene = noticeInfo.msg_scene.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.msg_scene.c_str() encoding:NSUTF8StringEncoding];
NSString *start_time = noticeInfo.start_time.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.start_time.c_str() encoding:NSUTF8StringEncoding];
NSString *end_time = noticeInfo.end_time.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.end_time.c_str() encoding:NSUTF8StringEncoding];
NSString *content_type = [NSString stringWithFormat:@"%d",noticeInfo.content_type];
NSString *content_url = noticeInfo.content_url.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.content_url.c_str() encoding:NSUTF8StringEncoding];
NSMutableArray *picArray = [NSMutableArray new];
for (int j = 0; j < noticeInfo.picArray.size(); j++)
{
NSMutableDictionary *picDict = [NSMutableDictionary new];
PicInfo picInfo = noticeInfo.picArray[j];
NSString *screenDir = [NSString stringWithFormat:@"%d",picInfo.screenDir];
NSString *picPath = [NSString stringWithCString:(const char *)picInfo.picPath.c_str() encoding:NSUTF8StringEncoding];
NSString *hashValue = [NSString stringWithCString:(const char *)picInfo.hashValue.c_str() encoding:NSUTF8StringEncoding];
[picDict setObject:screenDir forKey:kScreenDir];
[picDict setObject:picPath forKey:kPicUrl];
[picDict setObject:hashValue forKey:kHashValue];
[picArray addObject:picDict];
}
NSString *msg_title = noticeInfo.msg_title.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.msg_title.c_str() encoding:NSUTF8StringEncoding];
NSString *msg_content = noticeInfo.msg_content.c_str() == NULL ? kNSNULL : [NSString stringWithCString:(const char *)noticeInfo.msg_content.c_str() encoding:NSUTF8StringEncoding];
NSString *msg_order = [NSString stringWithFormat:@"%d",noticeInfo.msg_order];
NSString *msg_custom = noticeInfo.msg_custom.c_str() == NULL ? kNSNULL:[NSString stringWithCString:noticeInfo.msg_custom.c_str() encoding:NSUTF8StringEncoding];
[noticeInfoDic setObject:msg_id forKey:kMsgId];
[noticeInfoDic setObject:open_id forKey:kopenId];
[noticeInfoDic setObject:msg_url forKey:kMsgUrl];
[noticeInfoDic setObject:msg_type forKey:kMsgType];
[noticeInfoDic setObject:msg_scene forKey:kMessageScene];
[noticeInfoDic setObject:start_time forKey:kBeginTime];
[noticeInfoDic setObject:end_time forKey:kEndTime];
[noticeInfoDic setObject:content_type forKey:kContentType];
[noticeInfoDic setObject:content_url forKey:kContentUrl];
[noticeInfoDic setObject:picArray forKey:kPicArray];
[noticeInfoDic setObject:msg_title forKey:kMsgTitle];
[noticeInfoDic setObject:msg_content forKey:kMsgContent];
[noticeInfoDic setObject:msg_order forKey:kMsgOrder];
[noticeInfoDic setObject:msg_custom forKey:kMsgCustom];
[infosArray addObject:noticeInfoDic];
}
NSLog(@"\n\n\nDidGetNoticeData:\n%@\n\n\n",infosArray);
self.apiTitle = @"公告数据";
self.apiMethod = @"WGGetNoticeData";
self.apiDesc = @"success";
self.apiResult = [NSString stringWithFormat:@"%@",infosArray];
6)特殊说明
在调用接口时使用的公告栏id(scene)公告管理端设置的“公告栏”ID对应,请不要使用公告ID(msgid)代替公告栏ID PicInfo中图片路径为本地绝对路径
7)名词解释
无
常见问题
1.调用公告时发生Crash
1) 如果没有将WGPlatformResources.bundle正确导入工程的”Copy Bundle Resources“,将会在展示公告时出现crash
2) 如果没有在AppDelegate(AppController)创建window属性,也可能会导致调用公告时crash
[AppController window]: unrecognized selector sent to instance 0x17fa7130
解决方法:在AppDelegate(AppController)增加一个window的property,指向它创建的keywindow
注意: 公告的展示界面是通过plist定制的。目前有弹出提示公告有“白底、蓝底、黑底、自定义”四种模版,这些模版及对应的资源文件放在WGPlatformResources.bundle/AnnouncementResources下对应的子目录中。
备注:3.2.7之后为了codesize优化,删除了这部分资源文件,游戏可根据需求自己画UI