Skip to content

应用更新信息接口

用于获取指定应用的更新信息,返回数据包含应用版本、更新内容、下载地址及强制更新状态,支持根据配置启用用户令牌校验。

请求地址 GET / POST

http
https://nobase.cn/api/app/update

请求参数

参数名类型必需说明
appidstring✅ 是应用唯一标识,从后台获取的应用ID
signaturestring✅ 是应用签名,从后台直接获取

返回示例

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"
  }
}

返回数据结构

参数名类型说明
codenumber状态码:200=成功,其他为错误码
msgstring状态描述,错误时返回具体原因
dataobject更新数据(仅code=200时返回)
data.versionstring应用最新版本号,如“1.2.0”
data.contentstring更新内容说明,支持换行符分隔
data.appurlstring应用安装包下载地址
data.appforcestring强制更新标识: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"]);
}
?>

注意事项

  1. 签名获取signature 需从后台直接获取(无需手动生成),确保与 appid 绑定的签名一致,否则会返回签名验证失败。
  2. 强制更新逻辑:当 appforce = 1 时,建议在客户端阻断用户操作,强制引导至更新页面;appforce = 2 时可提供可选更新按钮。
  3. 版本对比:客户端需自行实现版本号对比逻辑(如按“主版本.次版本.修订号”拆分比较),避免重复提示已安装的版本。
  4. 安全建议:建议使用HTTPS协议请求,防止 appidsignature 等关键参数被明文窃取;定期从后台更新 signature 以提升安全性。