Skip to content

设备存储

DeviceStorage 提供基于设备本地的持久化存储服务,数据仅存储在当前设备上,不会跨设备同步。通过 Telegram.WebApp.DeviceStorage 访问。Bot API 8.0+

限制

项目限制
最大存储容量5 MB
键名最大长度128 字符
键名字符A-Za-z0-9_-

方法

setItem

javascript
Telegram.WebApp.DeviceStorage.setItem(key, value, callback)

存储一个键值对到设备存储。

参数类型必填描述
keyString键名,1-128 字符
valueString
callbackFunction回调函数,参数 (error, success)
javascript
Telegram.WebApp.DeviceStorage.setItem('cache_data', JSON.stringify({
  timestamp: Date.now(),
  data: largeDataSet
}), (error, success) => {
  if (error) {
    console.error('存储失败:', error);
  }
});

getItem

javascript
Telegram.WebApp.DeviceStorage.getItem(key, callback)

从设备存储中读取指定键的值。

参数类型必填描述
keyString键名
callbackFunction回调函数,参数 (error, value)

removeItem

javascript
Telegram.WebApp.DeviceStorage.removeItem(key, callback)

从设备存储中删除指定键。

参数类型必填描述
keyString键名
callbackFunction回调函数,参数 (error, success)

clear

javascript
Telegram.WebApp.DeviceStorage.clear(callback)

清除设备存储中的所有数据。

参数类型必填描述
callbackFunction回调函数,参数 (error, success)

与云存储的区别

特性CloudStorageDeviceStorage
数据同步跨设备同步仅本地存储
容量限制1024 键 × 4KB 值5 MB 总容量
适用场景用户偏好、小型数据缓存、大量本地数据
最低版本Bot API 8.0+

使用示例

javascript
const deviceStorage = Telegram.WebApp.DeviceStorage;

// 缓存 API 响应
function cacheResponse(endpoint, data) {
  const cacheEntry = JSON.stringify({
    data: data,
    cachedAt: Date.now()
  });
  deviceStorage.setItem('cache_' + endpoint, cacheEntry);
}

// 读取缓存
function getCachedResponse(endpoint, maxAge, callback) {
  deviceStorage.getItem('cache_' + endpoint, (error, value) => {
    if (error || !value) {
      callback(null);
      return;
    }
    const entry = JSON.parse(value);
    if (Date.now() - entry.cachedAt > maxAge) {
      callback(null); // 缓存已过期
    } else {
      callback(entry.data);
    }
  });
}