Uniapp API 调用:网络请求、本地存储、设备信息

一、网络请求 uni.request

核心方法:异步HTTP请求,支持Promise和Callback两种模式

// 示例:GET请求获取天气数据
uni.request({
  url: 'https://api.weather.com/v3/now',
  method: 'GET',
  data: {
    location: 'beijing',
    key: 'YOUR_API_KEY'
  },
  success: (res) => {
    console.log('当前温度:', res.data.temperature)
    uni.showToast({ title: '获取成功' })
  },
  fail: (err) => {
    console.error('请求失败:', err)
    uni.showModal({ content: '网络异常' })
  }
})

// 示例:POST提交表单数据
const postData = {
  username: 'user123',
  password: '******'
}

uni.request({
  url: 'https://api.example.com/login',
  method: 'POST',
  header: { 'Content-Type': 'application/json' },
  data: JSON.stringify(postData),
  success: (res) => {
    uni.setStorageSync('token', res.data.token)
  }
})

二、本地存储 uni.setStorage / uni.getStorage

数据持久化方案,支持同步/异步操作

// 存储用户配置
const userConfig = {
  theme: 'dark',
  fontSize: 16,
  notify: true
}

// 异步存储
uni.setStorage({
  key: 'userConfig',
  data: userConfig,
  success: () => console.log('配置已保存')
})

// 同步存储(立即生效)
uni.setStorageSync('lastLogin', new Date().toISOString())

// 数据读取示例
const loadConfig = () => {
  try {
    const config = uni.getStorageSync('userConfig')
    if(config) {
      console.log('主题模式:', config.theme)
      return config
    }
  } catch (e) {
    console.error('读取失败:', e)
  }
  return null
}

三、设备信息 uni.getSystemInfo

获取设备基础信息和能力检测

// 获取设备信息
uni.getSystemInfo({
  success: (res) => {
    console.log('设备型号:', res.model)
    console.log('操作系统:', res.platform)
    console.log('屏幕尺寸:', res.screenWidth, '×', res.screenHeight)
    
    // 功能检测
    if(res.platform === 'android') {
      console.log('Android版本:', res.osVersion)
    }
    
    // 存储空间检测
    if(res.storageSize && res.storageSize < 1024) {
      uni.showModal({ content: '存储空间不足' })
    }
  }
})

// 快捷方式(同步获取)
const sysInfo = uni.getSystemInfoSync()
console.log('DPI:', sysInfo.pixelRatio)

四、实战组合示例:用户登录流程
// 1. 网络请求登录
function login(username, password) {
  uni.request({
    url: 'https://api.example.com/auth',
    method: 'POST',
    data: { username, password },
    success: (res) => {
      if(res.statusCode === 200) {
        // 2. 存储令牌
        uni.setStorageSync('authToken', res.data.token)
        
        // 3. 获取设备信息并上报
        const deviceInfo = uni.getSystemInfoSync()
        reportDeviceInfo(deviceInfo)
        
        uni.navigateTo({ url: '/pages/home' })
      }
    }
  })
}

// 设备信息上报
function reportDeviceInfo(info) {
  const { model, platform, osVersion } = info
  uni.request({
    url: 'https://api.example.com/device',
    method: 'POST',
    header: {
      'Authorization': `Bearer ${uni.getStorageSync('authToken')}`
    },
    data: { model, platform, osVersion }
  })
}

关键注意事项:
  1. 网络请求安全

    • 务必配置合法域名白名单(manifest.json)
    • 敏感数据使用HTTPS传输
    • 添加请求超时处理:timeout: 10000
  2. 存储限制

    • 单条数据最大10MB
    • 总存储空间约10MB(不同平台有差异)
    • 敏感数据避免明文存储
  3. 设备能力检测

    // 检测功能可用性
    if(uni.canIUse('getSystemInfoSync.pixelRatio')) {
      console.log('支持DPI检测')
    }
    

  4. 跨平台差异

    • iOS存储有沙盒限制
    • Android设备信息字段更丰富
    • 小程序环境需注意网络请求域名配置

完整API文档参考:Uniapp官方API文档

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值