# 公共跳转参数

## 地址

无。

这不是一个接口，是后台运营配置、H5 bridge、IM custom data 共用的一套 App 跳转参数。

## 用在哪里

- Admin Banner：`type` 选 `APP`，`param` 填下面的 JSON。
- Admin 开屏配置：`type` 选 `APP`，`param` 填下面的 JSON。
- Admin 弹窗配置：`跳转类型` 选 `APP`，使用公共跳转组件生成下面的 JSON。
- H5 bridge：通过 `taskAction` 或其它业务 action 传下面的 JSON。
- 全服飘窗 IM：传 `jump_type`、`jump_param` 或 `jump_payload`。

## 参数

### 钱包

打开钱包页。

```json
{"type":"wallet"}
```

### 指定房间

进入指定房间。

```json
{"type":"room","room_id":"ROOM_ID"}
```

### 随机房间

进入一个随机公开房间。

```json
{"type":"room_random"}
```

### 指定房内拉起窗口

进入指定房间后打开房内窗口。

```json
{"type":"room_window","room_id":"ROOM_ID","window":"gift_panel"}
```

### 随机房内拉起窗口

进入随机公开房间后打开房内窗口。

```json
{"type":"room_random_window","window":"gift_panel"}
```

### 指定房内拉起游戏

进入指定房间后打开指定游戏。

```json
{"type":"room_game","room_id":"ROOM_ID","game_id":"GAME_ID"}
```

### 随机房内拉起游戏

进入随机公开房间后打开指定游戏。

```json
{"type":"room_random_game","game_id":"GAME_ID"}
```

### Explore 游戏 H5

App 先切到 Explore tab，再打开对应的 H5。

```json
{"type":"explore_game","game_code":"game_dice"}
```

`game_code` 可填：

- `game_dice`：打开 Explore 的 Dice Battle H5，对应 Flutter H5 key `game_dice`。
- `game_rock`：打开 Explore 的 Rock Paper Scissors H5，对应 Flutter H5 key `game_rock`。

## window 可填值

### 游戏窗口

打开房内游戏窗口。带 `game_id` 时直接打开这个游戏；不带 `game_id` 时打开游戏菜单。

```json
{"type":"room_window","room_id":"ROOM_ID","window":"game_window","game_id":"GAME_ID"}
```

### 礼物面板

打开礼物面板。带 `gift_id` 时预选这个礼物。

```json
{"type":"room_window","room_id":"ROOM_ID","window":"gift_panel","gift_id":"GIFT_ID"}
```

### 领红包弹窗

打开领红包弹窗。带 `red_packet_no` 时打开指定红包。

```json
{"type":"room_window","room_id":"ROOM_ID","window":"red_packet_claim","red_packet_no":"RED_PACKET_NO"}
```

### 转盘窗口

打开房内转盘窗口。

```json
{"type":"room_window","room_id":"ROOM_ID","window":"wheel"}
```

## Admin 配置方式

后台公共跳转组件里：

- `跳转类型` 选 `APP`。
- `APP 目标` 选需要的目标。
- 目标是 `Explore 游戏 H5` 时，继续选择 `Game Code`。
- 保存后后台会生成 `param` JSON。

Explore 游戏 H5 的后台示例：

```json
{"type":"explore_game","game_code":"game_rock"}
```

## 返回值

无。

这是 App 内部跳转参数，没有服务端返回值。

## 相关 IM

全服飘窗使用 IM custom message。App 会解析 `jump_type`、`jump_param`、`jump_payload`。

指定房间的 `game_win`、`super_gift` 和 `lucky_gift_big_win` 必须在顶层携带布尔字段 `room_locked`。App 用该字段在首页点击飘屏时先弹出房间密码输入；真正是否允许进房仍以 Room Cell 的 `JoinRoom` 校验为准。

当 `jump_payload` 跳转到与中奖事件不同的房间时，`jump_payload.room_locked` 必须与该目标房间对应；否则使用顶层的 `room_locked` 作为默认值。

### 指定 jump_payload

```json
{
  "broadcast_type": "game_win",
  "room_id": "ROOM_ID",
  "room_locked": true,
  "game_id": "GAME_ID",
  "coins": 1000,
  "jump_type": "room_window",
  "jump_payload": {
    "room_id": "ROOM_ID",
    "room_locked": true,
    "window": "gift_panel",
    "gift_id": "GIFT_ID"
  }
}
```

### 跳钱包

```json
{
  "broadcast_type": "game_win",
  "coins": 1000,
  "jump_type": "wallet",
  "jump_payload": {}
}
```

### 随机房拉起游戏

```json
{
  "broadcast_type": "game_win",
  "coins": 1000,
  "jump_type": "room_random_game",
  "jump_payload": {
    "game_id": "GAME_ID"
  }
}
```

### 跳 Explore 游戏 H5

```json
{
  "broadcast_type": "game_win",
  "coins": 1000,
  "jump_type": "explore_game",
  "jump_payload": {
    "game_code": "game_dice"
  }
}
```

也可以把 `game_code` 放在 `jump_param`：

```json
{
  "broadcast_type": "game_win",
  "coins": 1000,
  "jump_type": "explore_game",
  "jump_param": "game_rock"
}
```

没有 `jump_type` 时，App 使用 IM 里的 `room_id` 和 `game_id` 作为默认跳转。
