保存设备信息
请求 URL: /saveDevice
请求方式: POST
请求头:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| Authorization | 否 | string | 登录成功后的通讯令牌;未传时创建或获取临时账户 |
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| appId | 是 | string | App 唯一标识 |
| udid | 是 | string | 唯一设备 ID |
| deviceName | 是 | string | 设备名称 |
| systemName | 是 | string | 系统名称 |
| systemVersion | 是 | string | 系统版本 |
| language | 是 | string | 当前使用的语言 |
| timezone | 是 | string | 时区,例如 Asia/Shanghai |
| appVersion | 否 | string | 应用版本 |
| vpn | 否 | bool | 客户端是否开启 VPN,默认 false |
| inputLanguage | 否 | string | 输入法语言,例如 zh-TW、zh-CN、zh-HK、zh |
| hasWxOrQQ | 否 | bool | 设备是否安装微信或 QQ,默认 false |
| referrerDetails | 否 | object | Google Play 安装来源信息 |
| referrerDetails.installReferrer | 否 | string | 安装来源参数,例如 utm_source=google-play&utm_medium=organic |
| referrerDetails.installBeginTimestampSeconds | 否 | int64 | 客户端记录的安装开始时间戳(秒) |
| referrerDetails.installBeginTimestampServerSeconds | 否 | int64 | 服务端记录的安装开始时间戳(秒) |
| referrerDetails.referrerClickTimestampSeconds | 否 | int64 | 客户端记录的来源点击时间戳(秒) |
| referrerDetails.referrerClickTimestampServerSeconds | 否 | int64 | 服务端记录的来源点击时间戳(秒) |
| referrerDetails.installVersion | 否 | string | 首次安装的应用版本 |
| referrerDetails.googlePlayInstantParam | 否 | bool | 是否通过 Google Play Instant 启动 |
返回示例:
{
"code": 200,
"msg": "SUCCESS",
"data": {
"accessToken": "ea9a201564ef56df7c2b40570d241086",
"userId": "A260122016769",
"role": 7,
"pageIndex": 0,
"contactUs": "https://discord.gg/WNTyxU5mHk",
"contactUsPrize": "https://discord.gg/WNTyxU5mHk",
"contactEmail": "support@example.com",
"reportLost": "https://forms.gle/6c5dh2JpfbEcZfST8",
"appUpdate": {
"content": "更新内容",
"force": false,
"link": "https://play.google.com/store/apps/details?id=com.example.app",
"version": "1.0.9"
},
"control": {
"isCheck": true
},
"packageFirst": {
"id": 135,
"price": 499,
"amount": 200,
"giftAmount": 0,
"amountFestival": 0,
"giftAmountFestival": 0,
"giftAmountThird": 0,
"raffleTicket": 0,
"productId": "com.example.app.11",
"limitBuy": 1,
"role": 0,
"roleDay": 0,
"type": 0,
"channel": 0,
"originalPrice": 3326,
"firstDouble": 0,
"firstDoubleNo": 0,
"createdAt": 1766963085,
"updatedAt": 1767580069
},
"needReturn": true,
"returnGrantAmount": 21,
"config": {
"msgCost": 5,
"showScenario": false,
"msgImgCost": 4,
"videoCreatePrice": 14,
"msgImgCount": 1,
"msgVideoCountDay": 2,
"advertiseConfig": {
"switch": true,
"interval": 50,
"playCount": 5,
"playPoint": [10, 30, 60]
},
"systemConfig": {
"perspectiveSwitch": true,
"literaryStyleSwitch": true
},
"strengthPrice": 2,
"strengthPriceNew": 0.5,
"strengthMax": 3,
"strengthBuy": 5,
"vipMsgTimes": 100,
"userMemoryLen": 400
},
"roleFreeList": [13, 14]
}
}
packageFirst 没有可购买的首充套餐时返回 null。advertiseConfig 和 systemConfig 取自 App 配置,未配置时可能返回 null。
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 状态码 |
| msg | string | 状态说明 |
| data | object | 返回数据 |
| data.accessToken | string | 通讯令牌 |
| data.userId | string | 用户业务 ID |
| data.role | uint8 | 用户角色编号 |
| data.pageIndex | uint8 | 是否强制弹窗:1 弹出,其他值不弹出 |
| data.contactUs | string | 常规联系我们地址 |
| data.contactUsPrize | string | 愿望商店联系我们地址 |
| data.contactEmail | string | 客服邮箱 |
| data.reportLost | string | 掉单反馈地址 |
| data.appUpdate | object | 应用更新配置 |
| data.appUpdate.force | bool | 是否强制更新 |
| data.appUpdate.link | string | 更新跳转地址 |
| data.appUpdate.version | string | 更新版本 |
| data.appUpdate.content | string | 更新内容 |
| data.control | object | 客户端控制配置 |
| data.control.isCheck | bool | 审核控制开关 |
| data.packageFirst | object/null | 当前可购买的首充套餐 |
| data.packageFirst.id | uint | 套餐 ID |
| data.packageFirst.price | uint | 套餐价格,单位:分 |
| data.packageFirst.amount | uint | 钻石数 |
| data.packageFirst.giftAmount | uint | 额外赠送钻石数 |
| data.packageFirst.amountFestival | uint | 节日活动钻石数 |
| data.packageFirst.giftAmountFestival | uint | 节日活动额外赠送钻石数 |
| data.packageFirst.giftAmountThird | uint | 三方支付额外赠送钻石数 |
| data.packageFirst.raffleTicket | uint | 抽奖券数量 |
| data.packageFirst.productId | string | 内购产品 ID |
| data.packageFirst.limitBuy | uint8 | 是否限购:1 是,0 否 |
| data.packageFirst.role | uint8 | 套餐对应角色编号 |
| data.packageFirst.roleDay | uint | 角色/订阅有效天数 |
| data.packageFirst.type | uint8 | 标签:0 无、1 First recharge、2 Recommend、3 Hot、4 Best Deal |
| data.packageFirst.channel | uint8 | 渠道:1 Apple、2 Pay、3 Stripe、4 V5Pay、5 Waffo |
| data.packageFirst.originalPrice | uint | 原价,单位:分 |
| data.packageFirst.firstDouble | uint | 首次购买额外赠送数 |
| data.packageFirst.firstDoubleNo | uint | 非首次购买额外赠送数 |
| data.packageFirst.createdAt | int64 | 创建时间戳(秒) |
| data.packageFirst.updatedAt | int64 | 更新时间戳(秒) |
| data.needReturn | bool | 是否为满足条件的回归用户 |
| data.returnGrantAmount | int | 回归赠送钻石数 |
| data.config | object | 全局配置 |
| data.config.msgCost | int | 发消息消耗钻石数 |
| data.config.showScenario | bool | 是否展示场景功能;当前固定为 false |
| data.config.msgImgCost | int | 消息生图价格 |
| data.config.videoCreatePrice | int | 消息生视频价格 |
| data.config.msgImgCount | int | 设备累计生图次数 |
| data.config.msgVideoCountDay | int | 设备当日生视频次数 |
| data.config.advertiseConfig | object/null | 广告配置 |
| data.config.advertiseConfig.switch | bool | 广告开关 |
| data.config.advertiseConfig.playCount | int | 广告播放次数 |
| data.config.advertiseConfig.playPoint | int[] | 广告播放节点(分钟) |
| data.config.advertiseConfig.interval | int | 广告播放间隔(秒) |
| data.config.systemConfig | object/null | 系统设置 |
| data.config.systemConfig.perspectiveSwitch | bool | 聊天视角开关 |
| data.config.systemConfig.literaryStyleSwitch | bool | 文风开关 |
| data.config.strengthPrice | uint | 旧体力售价(钻石),保留用于兼容旧版客户端 |
| data.config.strengthPriceNew | number | 新体力售价(钻石),最多两位小数;服务端购买体力时按此字段计费 |
| data.config.strengthMax | uint | 体力上限 |
| data.config.strengthBuy | uint | 单次购买体力数 |
| data.config.vipMsgTimes | uint | VIP 角色不限发送时的消息次数配置 |
| data.config.userMemoryLen | int | 当前用户权益对应的角色记忆字符长度 |
| data.roleFreeList | uint[] | 免费角色分类 ID 列表;角色卡的 pid 在此列表中即为免费角色 |
备注:
- 审核用户的
control.isCheck和appUpdate.force会被置为false,appUpdate.version会被置为1.0.0。
错误码:
| 状态码 | 说明 |
|---|---|
| 510 | 系统错误 |
| 800 | 参数错误 |