# Game数据协议说明 ## Native To Game ### 方法调用 ``` java JsbBridge.sendToScript(methodName, dataJson) ``` ### dataJson数据结构 ```json { "callback_id": "123456789", "data": {} } ``` 数据描述: * callback_id:回调方法名,Game如果判断有callback_id则需要在完成逻辑处理后触发该方法回调 * data:json object格式数据,根据场景解析具体数据内容 如果data是Game To Native调用的callback数据结构: ```json { "code": 0, //0: 成功,其他:错误码 "data": {} } ``` ## Game To Native ### 方法调用 ``` javascript native.bridge.sendToNative(methodName, dataJson); ``` ### dataJson数据结构 ```json { "callback_id": "123456789", "data": {} //具体数据 } ``` 数据描述: * callback_id:回调方法名,Native如果判断有callback_id则需要在完成逻辑处理后触发该方法回调 * data:json object格式数据,根据场景解析具体数据内容 如果data是Native To Game调用的callback数据结构: ```json { "code": 0, //0: 成功,其他:错误码 "data": {} } ``` ## 网络请求数据 ### 请求数据 ```json { "type": 0, //0: http,1: socket "path": "/game/op", //协议path "data": { "code": 0, "message": "", "data": {} } } ``` ### 通知数据 uri格式:game_<游戏编号>_<业务> dataJson数据: ```json { "data": "" //服务端下发数据的json string } ``` # Ludo数据协议说明 ## Native To Game ### 开始游戏 JsbBridge.sendToScript("startGame", dataJson); //在onGetGameView之后调用 dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "channel": "10000", "game_id": "ludo_game:111", "uid": 1001, //用户自己uid "game_meta_data": { "serviceInstanceId": 1, "serviceRegion": "2" }, "game_players": [ { "playerId": 1234, //玩家uid "playerName": "", //玩家名 "playerAvatarUrl": "", //playerAvatarPath为空时,从网络加载 "playerAvatarPath": "" //玩家头像本地图片路径,不为空时优先展示 } ], "game_config": { "gameMode": 0, //游戏模式 0:经典模式 1:快速模式 "gameFee": 500, //游戏参与费用 "magicMode": 0, //是否道具场 0:关闭道具模式,1:开启道具模式 "maxPlayerCount": 2, //参与人数 }, "local": false, //是否本地模式,0: 不是, 1: 是 "game_record": "" //local游戏记录 } } ``` ### 网络下行通知 JsbBridge.sendToScript("networkNotify", dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": "{"uri":"game_1_init","data":{}}" //服务端下发数据的json string,直接透传 } ``` ### 网络状态通知 JsbBridge.sendToScript("networkStatus", dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "available": true } } ``` ### 操作游戏 JsbBridge.sendToScript("opGame", dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "op": 1, //操作码 "data": {} //操作数据 } } ``` 操作说明: * 说话状态:op=2,data={"uid": 1001, "volume":0} ### 重置游戏为初始状态 JsbBridge.sendToScript("resetGame", dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "channel": "10000", } } ``` ### 获取玩家游戏内状态 JsbBridge.sendToScript("getPlayerGameStatus", dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "uid": 1001 } } ``` callback数据: ```json { "callback_id": "678912345", //回调的方法名,每次调用生成,确保全局唯一 "data": { "code": 0, //0:成功,其他:错误码 "data": { "uid": 1001, "status": 0 //0: 已退出游戏,1: 游戏中 } } } ``` ### 获取玩家头像坐标 JsbBridge.sendToScript("getPlayerAvatarView", dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "uid": 1001 } } ``` callback数据: ```json { "callback_id": "678912345", //回调的方法名,每次调用生成,确保全局唯一 "data": { "code": 0, //0:成功,其他:错误码 "data": { "postion": { //左上角坐标 "x": 0, "y": 0 }, "size": { //视图大小 "width": 0, "height": 0 } } } } ``` ## Game To Native ### 获取游戏视图信息 native.bridge.sendToNative('onGetGameView', dataJson); //游戏需要初始化数据时调用 dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": {} } ``` callback数据: ```json { "code": 0, "data": { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "lang_code": "ar", //语言码 "sound_open": true, //音效是否打开 "vibrate_open": true, //振动是否打开 "view_size": { //游戏区域size "width": 0, "height": 0 }, "safe_area": { //游戏安全区域 "postion": { //左上角坐标 "x": 0, "y": 0 }, "size": { //安全区域大小 "width": 0, "height": 0 } } } } } ``` ### 获取用户货币数量 native.bridge.sendToNative('onGetCurrency', dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "type": 0 //0: 金币,1: 钻石 } } ``` callback数据: ```json { "code": 0, "data": { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "count": 1000, //货币数量 } } } ``` ### 通知Native游戏已开始 native.bridge.sendToNative('onGameStart', dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": {} } ``` ### 通知Native游戏已结束 native.bridge.sendToNative('onGameEnd', dataJson); dataJson数据: ```json { "callback_id": "123456789", "data": {} } ``` ### 操作Native native.bridge.sendToNative('onGameOp', dataJson); dataJson数据: ```json { "callback_id": "123456789", //回调的方法名,每次调用生成,确保全局唯一 "data": { "op": 1, //操作码 "data": {} //操作数据 } } ``` 操作说明: * 点击头像:op=1,data={"uid":1001} * 点击音效开关:op=2,data={} * 点击振动开关:op=3,data={} * 点击退出:op=4,data={} * 振动:op=6,data={"duration": 50} //duration振动时长,单位ms,-1: 长振动,0: 短振动 * 播放音效:op=7,data={"sound_name": "dice.mp3"} //sound_name 音效名带拓展名 * 振点击音效开关:op=8,data={} * 点击振动开关:op=9,data={} ### 网络请求 native.bridge.sendToNative('onNetworkRequest', dataJson); dataJson数据: ```json { "callback_id": "123456789", "data": {"type":0,"path":"game/carrom","data":{}} //type(0:http, 1:socket), path(协议路径), data(传输数据) } ``` 响应数据: ```json { "callback_id": "123456789", "data": { "code": 0, //0:成功,其他:错误码 "data": "{}" //服务端返回数据的json string,直接透传 } } ``` ### Native日志 native.bridge.sendToNative('log', dataJson); dataJson数据: ```json { "callback_id": "123456789", "data": { "tag": "tag_ludo", "msg": "error:1001", "xlog": true //是否输出 } } ``` ### 展示弹窗 native.bridge.sendToNative('onShowDialog', dataJson); dataJson数据: ```json { "callback_id": "123456789", "data": { "type": 1, //弹窗类型 "id": 1234, //弹窗id "data" {} //弹窗数据,根据类型定义不同数据 } } ``` type说明: * 1: 退出游戏弹窗, data:{"game_record": ""} //退出游戏,local场有game_record * 2: 结束托管提示弹窗, data:{} * 3: 游戏结果弹窗, data:{"is_over":1,"plays":[{"id":1018,"coin":0,"win":1},{"id":5005,"coin":0,"win":0}]} * 4: 货币不足弹窗, data:{"type":0} //type 0:金币 1:钻石 ### 关闭弹窗 native.bridge.sendToNative('onDismissDialog', dataJson); dataJson数据: ```json { "callback_id": "123456789", "data": { "id": 1234 //弹窗id } } ``` ## Native错误码 * 0: 成功 * 10001: 请求方法名为空 * 10002: Native没有注册处理方法 * 10003: Native处理方法实例化异常 * 10004: 数据解析错误 * 10005: 回调超时 * 10006: 数据转换成json错误 * 10007: 回调数据为null * 10008: 未知的网络类型 * 10009: 数据为null * 10010: http请求路径为空错误