查看: 28322|回复: 15

【SDK接入】安卓SDK必须调用扩展数据提交接口的说明

[复制链接]

28

主题

5

魅力

3万

经验

网游运维

发表于 2014-4-29 15:07:04 |显示全部楼层
本帖最后由 106563120 于 2017-1-16 18:56 编辑

接入安卓SDK的时候我方需要合作方接入扩展数据提交接口,传入游戏信息,以便双方对游戏内容进行更深度的运营,支持调用通过调用客户端服务端接口方式实现,采用任一方式均可(推荐使用服务端接口模式,请不要客户端、服务端同时接入),接入完成后请对照FAQ16条进行自测
(注:常见问题FAQ于本帖最后,请拉到最后查看)

字段说明:
category为loginGameRolecontent中只有一条记录,各字段说明如下:
字段名
字段类型
是否为空
字段描述
提交时机
zoneId
string
必填
区服ID,一个服务器对应一个ID,长度不超过50
1、用户登录游戏成功后创建角色或使用已存在的角色进入游戏后调用
2、当用户的角色等级发生变化后调用
(注:必填参数必须传真实数据)
zoneName
string
必填
区服名称,要求与游戏界面展示的服务器名保持一致,长度不超过50
roleId
string
必填
角色ID,一个角色同一个服ID保持唯一,长度不超过50
roleName
string
必填
角色昵称,长度不超过50
roleCTime
long
必填
角色创建时间(单位:秒 即10位数),必须传服务器时间
roleLevel
long
必填
角色等级级,如游戏存在转生,转职等,等级需累加,长度不超过10
os
string
可选
游戏平台
android或者ios,小写字母。
默认为android(客户端接入不需要此参数)
roleLevelMTime
long
可选
角色等级变化时间(单位:秒 即10位数),必须传服务器时间
游戏内如果没有相应的字段:可选参数int传-1,string传"不存在",必填字段不可传-1或空,必须传真实的数据,不可传其它如null\0\空串等,否则无法参与活动


调用时机:
1、用户创建角色或使用已存在的角色进入游戏,可获取到角色信息时传递,必填参数全部都需要传,并且为真实数据,只需要调用一次
2、用户在游戏内等级发生变化时传递新的等级及服区信息,必填参数全部都需要传,并且为真实数据,只需要调用一次

【服务端接口说明】
具体说明请查看:03文件夹-服务端接口文档-1.3.3 扩展数据提交接口说明  
androidSDK接入资料下载地址
阿里游戏SDK file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image(1).pnghttp://down0.game.uc.cn/cpss/SDK/AligamesSDK.zip
如上线过豌豆荚,请使用下载地址:http://down0.game.uc.cn/cpss/SDK/Aligames_WdjSDK.zip
请求地址:(原)http://collect.sdknc.g.uc.cn:8080/ng/cpserver/gamedata/ucid.game.gameData
新地址(请使用新地址):
测试环境:http://gamedata.sdk.test4.9game.cn/ng/cpserver/gamedata/ucid.game.gameData正式环境:http://collect.sdkyy.9game.cn:8080/ng/cpserver/gamedata/ucid.game.gameDataHTTP 请求的body 内容:
{
"id":1330395827,
"service":"ucid.game.gameData",
"data":{ "accountId":"a5016eb86fe2f760db852bb140477efa",
"gameData":"%7b%22category%22%3a%22loginGameRole%22%2c%22content%22%3a%7b%22roleLevel%22%3a88%2c%22roleName%22%3a%22+%e8%af%b7%e2%88%9d+%e5%86%8d%e7%bb%99%e6%88%91%e4%b8%80%e6%94%af%e7%83%9f%22%2c%22zoneName%22%3a%22%e7%bb%88%e5%8d%97%e5%b1%b1%e4%b8%8b-%e5%85%b5%e4%b8%b4%e5%9f%8e%e4%b8%8b%22%2c%22roleId%22%3a%2253568193%22%2c%22zoneId%22%3a2705%2c%22roleCTime%22%3a1353271378%2c%22os%22%3a%22android%22%2c%22roleLevelMTime%22%3a1456380919%7d%7d"},
"game":{"gameId":12345},
"sign":"6e9c3c1e7d99293dfc0c81442f9a9984"
}
假如gameData 的数据为:
{"category":"loginGameRole","content":{"roleLevel":88,"roleName":" 请∝ 再给
我一支烟","zoneName":"终南山下-兵临城下","roleId":"53568193","zoneId":2705,"roleCTime":1353271378,"os":"android","roleLevelMTime":1456380919}}

那么经过UrlEncode 后的字符串为(注:该字符串也是作为计算MD5 签名的原文内容)

%7b%22category%22%3a%22loginGameRole%22%2c%22content%22%3a%7b%22roleLevel%22%3a88%2c%22roleName%22%3a%22+%e8%af%b7%e2%88%9d+%e5%86%8d%e7%bb%99%e6%88%91%e4%b8%80%e6%94%af%e7%83%9f%22%2c%22zoneName%22%3a%22%e7%bb%88%e5%8d%97%e5%b1%b1%e4%b8%8b-%e5%85%b5%e4%b8%b4%e5%9f%8e%e4%b8%8b%22%2c%22roleId%22%3a%2253568193%22%2c%22zoneId%22%3a2705%2c%22roleCTime%22%3a1353271378%2c%22os%22%3a%22android%22%2c%22roleLevelMTime%22%3a1456380919%7d%7d
sign 的签名规则:MD5(accountId=....gameData=...+apiKey)(去掉+;替换...为实际值)

收到响应:
{
"id":1330395827,
"state":{"code":1, "msg":"操作已完成"},
"data":{}
}


自测方法:打印请求日志,查看参数类型为loginGameRole,数据内容为:roleId、roleName、roleLevel、zoneId、zoneName、roleCTime、roleLevelMTime传递的内容是否正确无误,即可

客户端接口说明

//用户创建角色或使用已存在的角色进入游戏
//用户在游戏内等级发生变化时传递新的等级及服区信息

安卓原生:
               long zoneId = 111 ;
               long mlevel = 1;
               long mroleCTime = 1456397360;
                SDKParams sdkParams = new SDKParams();
                sdkParams.put(SDKParamKey.STRING_ROLE_ID, "R0010");
                sdkParams.put(SDKParamKey.STRING_ROLE_NAME, "令狐一冲");
                sdkParams.put(SDKParamKey.LONG_ROLE_LEVEL, mlevel);
                sdkParams.put(SDKParamKey.STRING_ZONE_ID, ""+zoneId);
                sdkParams.put(SDKParamKey.STRING_ZONE_NAME, "游戏一区-逍遥谷");
                sdkParams.put(SDKParamKey.LONG_ROLE_CTIME,mroleCTime);

                try {
                    UCGameSdk.defaultSdk().submitRoleData(me, sdkParams);
                } catch (AliNotInitException e) {
                    e.printStackTrace();
                } catch (AliLackActivityException e) {
                    e.printStackTrace();
                }


主要需要传入的数据类型为loginGameRole,数据内容为:roleId、roleName、roleLevel、zoneId、zoneName、roleCTime、roleLevelMTime(注意:以上7项数据均需要真实数据,中文需检查有没乱码,"roleLevelMTime"非必填,建议可获取到尽量传
自测方法:接入后请在开放平台-游戏管理-进入对应的游戏-SDK接入-联调工具自测数据正常后再提包,具体位置如图:http://image.9game.cn/2016/12/29/15469537.png  


【常见问题】
1、接口由客户端接入还是服务端
优先使用服务端方式接入,如服务接入难度过大,或造成压力过大,可以走客户端(客户端接入相于安全性较低),但请不要客户端及服务端同时接入

2、扩展数据接口是否必接,在什么时候调用
必接,如无特殊情况游戏无接入则无法上线
调用时机:
1、用户创建角色后,进入游戏,可获取到角色信息时传递
1、用户每次登录游戏服务器后,可获取到角色信息时传递
2、用户在游戏内等级发生变化时,传递新的等级及服区信息


3、等级变化时,提交的数据跟用户登录时提交的数据有什么不同
用户登录及角色变化时要求传递(类型loginGameRole)
必传参数:roleId(角色ID)、roleName(角色名)、roleLevel(角色等级)、zoneId(服务器ID)、zoneName(服务器名称)、roleCTime(角色创建时间)
选传参数:roleLevelMTime(可选参数,等级变化时间)、os(可选参数,服务端接入需要传递平台android或ios【ios平台必传】)
注:roleLevelMTime等级变化时如游戏有记录,尽量传递,用户登录时可传当前等级变化的时候,或不传,或传-1

4、zoneId跟初始化时传的serverId是一样的吗

不同的,初始化传递的severId是SDK以前分配的参数,现在默认为0,zoneId传递的是游戏内的服区ID

5、zoneName传递的数据是服务器名还是大区名?
zoneName传递当前用户选择进入的游戏服务器名,要求跟用户在界面上看到的名字一致,不要增加其它信息,如【火爆、流畅】,或颜色等,如不同的大区内有相同的服务器名,需要将大区名加上,如“第一大区-xxxx”

6、游戏属于棋牌或类似单机,没有服区信息的,要怎么传递呢
无服区信息或角色信息的游戏,可以不用接,但是上传游戏包时请备注说明好,QA审核时会根据游戏实际情况判断是否可以不接

7、某些字段游戏内没有如何处理
必填参数,不可传-1或空,必须传真实的数据,如不满足无法开展等级活动,可选参数游戏内如果没有相应的字段:(int/long)传-1,string传"不存在",或不传该参数

8、要求long类型,可以修改为string类型吗
不可以,参数的类型按文档要求传,如游戏存储的类型与文档要求不一致,请转换后传递

9、roleCTime字段游戏内没有保存如何处理
历史创建的角色roleCTime传-1(历史创建的角色是指接口接入前,接入后新创建的角色登录,升级必须要传真实数据),新创建的角色需要保存好创建时间,且以后每次提交数据需要传正确的创建时间,且一个角色的角色时间是唯一的,不允许同一个角色出现多个不同的创建时间,不可传-1或空
另需要注意:游戏客户端接入时创建时间需要服务器存储,客户端传递的时间戳必须为服务器时间,不允许本地缓存,或获取手机系统时间,否则会造成活动期间如用户删包重装、或清除数据导致数据丢失

10、roleLevelMTime角色等级没有变化时,如何传递
roleLevelMTime在等级变化时传,如当前提交数据时等级未发生变化,如用户登录或创建角色时,可以传当前等级变化时的时间,或-1

11、os参数是否可不传
该参数默认为android,客户端接入不需要传递,如游戏服务器接入,如不传,我们服务器默认接收到的数据来源是android平台,但如游戏有接入ios的SDK,需要对ios的数据传递参数为ios,否则我们活动无法区分数据来源

12、服务端请求串data内的accountId的值是传什么
accountId用户登录后服务端验证verifySession后获取到的参数,该参数是用户账号的唯一标识,提交数据时需要传对应玩家真实的accountId值(如游戏在参数前有加渠道标识如“UC_”或ID之类的,请去掉,要求传递登录验证时返回的accountId),否则SDK无法判断传递的数据对应哪个用户

13、服务端扩展数据接口请求到哪个地址
请求地址:
测试环境:http://gamedata.sdk.test4.9game.cn/ng/cpserver/gamedata/ucid.game.gameData
正式环境:http://collect.sdkyy.9game.cn:8080/ng/cpserver/gamedata/ucid.game.gameData
14、服务端获取用户信息的时候返回“code:10,无效的请求数据,校验签名失败”
1、sign拼接组成是否为“accountId=...gameData=...+apikey值”,并且sign需要用小写
2、检查游戏客户端与服务器请求串中使用的gameId\apikey参数是否正常

15、服务端获取用户信息的时候返回“code:11,用户未登录”
请检查请求数据内的accountId是否为真实用户数据,gameId是否与accountId对应同一个游戏,无不是的话服务器无法正常处理

16、如何测试数据提交成功,提交的数据有没问题
测试步骤:
1、创建角色后进入游戏,查看调用的数据日志是否正确无误
2、在游戏内提升等级后,查看是否有提交最新的等级数据
3、退出游戏重进,查看重新登录后提交的数据是否正确无误
4、切换新服务器,查看最新提交的数据是否为新的服务器数据
5、游戏内存在“切换账号”、“更换服务器、“更换角色”等功能,需要查看更换后的角色提交数据是否正确
数据查看方法:
接入完成后,请在开放平台-游戏管理-进入对应的游戏-SDK接入-联调工具自测数据正常后再提包,具体位置如图:

http://image.9game.cn/2016/12/29/15469260.png(注意添加账号后需等1分钟再跑数据)
日志查看方法:
提供游戏gameId给技术接口人添加日志查看权限,添加后通过logcat运行日志查看tag"ucgamesdk" 关键字“gameData”内日志

17、客户端数据接口调用成功了,但是看不到提交日志
检查是否执行了数据接口调用,或调用后是否有异常报错日志,通常如果传递的数据格式,或编码问题,可能会影响接口数据提交失败

18、notifyZone、submitExtendData接口里的”createGameRole”需要接入吗

这两个属于选接接口,不要求接入

19、其它userInfo或榜单数据是否需要传递
目前不强制要求,后续如有特殊要求,会另外说明

9

主题

0

魅力

705

经验

官方客服

发表于 2014-10-14 14:32:48 |显示全部楼层
C++的调用怎么搞
回复 推荐

举报

0

主题

0

魅力

274

经验

Lv2初学乍练

Rank: 2

发表于 2015-8-27 17:42:04 |显示全部楼层
有03文件夹-服务端接口文档-1.3.3 扩展数据提交接口说明 这个文件么
为啥不直接 附上 文档下载 链接
回复 推荐

举报

40

主题

0

魅力

2万

经验

网游运维

发表于 2015-8-28 14:32:41 |显示全部楼层
373596283 发表于 2015-8-27 17:42
有03文件夹-服务端接口文档-1.3.3 扩展数据提交接口说明 这个文件么
为啥不直接 附上 文档下载 链接 ...

友友您好。SDK下载地址已增加,感谢您的建议
回复 推荐

举报

0

主题

0

魅力

152

经验

Lv1新手上路

Rank: 1

发表于 2016-5-11 14:59:38 |显示全部楼层
roleCTime 和 roleLevelMTime 这个以秒为单位的10位数时间是怎么换算来的?
回复 推荐

举报

1

主题

0

魅力

172

经验

Lv1新手上路

Rank: 1

发表于 2016-5-24 09:06:09 |显示全部楼层
到底是accountId 还是 sid ?????
回复 推荐

举报

40

主题

0

魅力

2万

经验

网游运维

发表于 2016-5-24 11:03:01 |显示全部楼层
882068873 发表于 2016-5-11 14:59
roleCTime 和 roleLevelMTime 这个以秒为单位的10位数时间是怎么换算来的?

将毫秒/1000
回复 推荐

举报

40

主题

0

魅力

2万

经验

网游运维

发表于 2016-5-24 11:03:24 |显示全部楼层
783871696 发表于 2016-5-24 09:06
到底是accountId 还是 sid ?????

均可,建议使用accountid,sid有时效性
回复 推荐

举报

0

主题

0

魅力

154

经验

Lv1新手上路

Rank: 1

发表于 2016-6-29 19:23:24 |显示全部楼层
06-29 19:20:26.598: D/UCGameSdk(27547): SdkHttpWorker`parsePost`response: url=http://sdk.test4.g.uc.cn/cs/ucid/ucid.game.gameData,service=ucid.game.gameData,content={"id":1467199226516,"state":{"code":99,"msg":"系统繁忙,请稍后再试","updateFreq":1},"data":""}
06-29 19:20:26.608: W/UCGameSdk(27547): ExternalDataCtrl`submitExternalData`游戏数据收集接口出错,出错代码:99,出错信息:系统繁忙,请稍后再试

收集数据的接口一直提示系统繁忙是什么原因呢

回复 推荐

举报

0

主题

0

魅力

154

经验

Lv1新手上路

Rank: 1

发表于 2016-6-29 19:23:38 |显示全部楼层
06-29 19:22:49.048: D/UCGameSdk(27906): SdkHttpWorker`parsePost`request: url=http://sdk.test4.g.uc.cn/cs/ucid/ucid.game.gameData,service=ucid.game.gameData,content={"id":1467199369015,"service":"ucid.game.gameData","data":{"sid":"ssh1game9ddec132e7114a41a0e1cf854ac809b0195171","gameData":{"content":{"roleId":"1170","roleName":"阎鹰绯","roleLevel":"2","zoneId":"1","zoneName":"1","roleCTime":1467199368,"roleLevelMTime":1467199368},"category":"loginGameRole"}},"game":{"cpId":0,"gameId":729841,"channelId":"JY_2","serverId":0,"serverName":"","roleId":"1170","roleName":"阎鹰绯","roleLevel":"2","zoneName":"1","zoneId":"1"},"client":{"ex":"imei:860962032207425|imsi:460012188613980|model:HUAWEI TAG-AL00|net:wifi|mobi:|resX:1196|resY:720|mac:dc:09:4c:d2:8a:63|orient","fr":"API Level-22 - HUAWEI-5.1","os":"android","si":"1Zsa4zr\/1dh00OukozR9KzqubtJns7dYtpIVJ2LSJNypITw0O\/1TE6U0fZTLsuDnU","ve":"3.5.3.1","mve":"core_3.5.3.1"}}

这个是发送的收集数据
回复 推荐

举报

12下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

站点地图| 帮助中心| 微信客服| 九游手机游戏论坛 ( 粤ICP备13078412号-3 粤网文[2014]0209-059号 广州爱九游信息技术有限公司 )

GMT+8, 2017-8-19 21:07 , Processed in 0.076065 second(s), Total 22, Slave 21 queries , Memcache On.

回顶部