Appearance
应用更新信息接口
用于获取指定应用的更新信息,返回数据包含应用版本、更新内容、下载地址及强制更新状态,支持根据配置启用用户令牌校验。
请求地址 GET / POST
http
https://nobase.cn/api/app/update请求参数
| 参数名 | 类型 | 必需 | 说明 |
|---|---|---|---|
| appid | string | ✅ 是 | 应用唯一标识,从后台获取的应用ID |
| signature | string | ✅ 是 | 应用签名,从后台直接获取 |
返回示例
json
{
"code": 200,
"msg": "success",
"data": {
"version": "1.2.0",
"content": "1.修复首页加载缓慢问题;2.新增消息推送功能;3.优化用户登录体验",
"appurl": "https://download.nobase.cn/app/v1.2.0.apk",
"appforce": "1"
}
}返回数据结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | number | 状态码:200=成功,其他为错误码 |
| msg | string | 状态描述,错误时返回具体原因 |
| data | object | 更新数据(仅code=200时返回) |
| data.version | string | 应用最新版本号,如“1.2.0” |
| data.content | string | 更新内容说明,支持换行符分隔 |
| data.appurl | string | 应用安装包下载地址 |
| data.appforce | string | 强制更新标识:1=开启,2=关闭 |
代码示例
javascript
// 配置参数(替换为实际值,signature从后台获取)
const appid = "your_app_id";
const signature = "your_signature_from_backend"; // 直接使用从后台获取的签名
// 拼接请求参数
const params = new URLSearchParams({
appid,
signature
});
// 发起请求
const requestUrl = `https://nobase.cn/api/app/update?${params.toString()}`;
fetch(requestUrl)
.then(response => {
if (!response.ok) throw new Error(`HTTP错误:${response.status}`);
return response.json();
})
.then(res => {
if (res.code === 200) {
const { version, content, appurl, appforce } = res.data;
console.log("最新版本:", version);
console.log("更新内容:", content);
console.log("下载地址:", appurl);
console.log("是否强制更新:", appforce === "1" ? "是" : "否");
} else {
console.error("接口错误:", res.msg);
}
})
.catch(error => console.error("请求失败:", error));python
import requests
# 配置参数(替换为实际值,signature从后台获取)
appid = "your_app_id"
signature = "your_signature_from_backend" # 直接使用从后台获取的签名
# 构造请求参数
params = {
"appid": appid,
"signature": signature
}
# 发起请求
url = "https://nobase.cn/api/app/update"
try:
response = requests.get(url, params=params, timeout=5)
response.raise_for_status() # 抛出HTTP错误
res_data = response.json()
if res_data["code"] == 200:
update_info = res_data["data"]
print(f"最新版本:{update_info['version']}")
print(f"更新内容:{update_info['content']}")
print(f"下载地址:{update_info['appurl']}")
print(f"是否强制更新:{'是' if update_info['appforce'] == '1' else '否'}")
else:
print(f"接口错误:{res_data['msg']}")
except requests.exceptions.RequestException as e:
print(f"请求失败:{str(e)}")java
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class AppUpdateApiDemo {
public static void main(String[] args) {
// 配置参数(替换为实际值,signature从后台获取)
String appid = "your_app_id";
String signature = "your_signature_from_backend"; // 直接使用从后台获取的签名
try {
// 拼接请求参数
StringBuilder params = new StringBuilder();
params.append("appid=").append(URLEncoder.encode(appid, "UTF-8"))
.append("&signature=").append(URLEncoder.encode(signature, "UTF-8"));
// 发起请求
String urlStr = "https://nobase.cn/api/app/update?" + params;
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
// 解析响应
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)
);
StringBuilder response = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
response.append(line);
}
in.close();
conn.disconnect();
JsonObject resJson = JsonParser.parseString(response.toString()).getAsJsonObject();
if (resJson.get("code").getAsInt() == 200) {
JsonObject data = resJson.getAsJsonObject("data");
System.out.println("最新版本:" + data.get("version").getAsString());
System.out.println("更新内容:" + data.get("content").getAsString());
System.out.println("下载地址:" + data.get("appurl").getAsString());
System.out.println("是否强制更新:" + (data.get("appforce").getAsString().equals("1") ? "是" : "否"));
} else {
System.out.println("接口错误:" + resJson.get("msg").getAsString());
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("请求失败:" + e.getMessage());
}
}
}php
<?php
// 配置参数(替换为实际值,signature从后台获取)
$appid = "your_app_id";
$signature = "your_signature_from_backend"; // 直接使用从后台获取的签名
// 构造请求参数
$params = [
"appid" => $appid,
"signature" => $signature
];
// 拼接URL并发起请求
$url = "https://nobase.cn/api/app/update?" . http_build_query($params);
$response = @file_get_contents($url);
if ($response === false) {
die("请求失败:无法获取更新数据");
}
// 解析响应
$data = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
die("请求失败:接口返回无效JSON");
}
if ($data["code"] == 200) {
$updateInfo = $data["data"];
echo "最新版本:" . htmlspecialchars($updateInfo["version"]) . "<br>";
echo "更新内容:" . nl2br(htmlspecialchars($updateInfo["content"])) . "<br>"; // 处理换行
echo "下载地址:<a href='" . htmlspecialchars($updateInfo["appurl"]) . "' target='_blank'>点击下载</a><br>";
echo "是否强制更新:" . ($updateInfo["appforce"] == "1" ? "是" : "否");
} else {
echo "接口错误:" . htmlspecialchars($data["msg"]);
}
?>注意事项
- 签名获取:
signature需从后台直接获取(无需手动生成),确保与appid绑定的签名一致,否则会返回签名验证失败。 - 强制更新逻辑:当
appforce = 1时,建议在客户端阻断用户操作,强制引导至更新页面;appforce = 2时可提供可选更新按钮。 - 版本对比:客户端需自行实现版本号对比逻辑(如按“主版本.次版本.修订号”拆分比较),避免重复提示已安装的版本。
- 安全建议:建议使用HTTPS协议请求,防止
appid、signature等关键参数被明文窃取;定期从后台更新signature以提升安全性。

