点点阅读app正版
24.91MB · 2025-10-31
核心思路:
用 uni.setStorageSync 存一个布尔值标志,判断是否第一次进入。
// App.vue
export default {
  onLaunch() {
    const firstEnter = uni.getStorageSync('firstEnter')
    if (!firstEnter) {
      console.log(' 首次进入应用')
      uni.setStorageSync('firstEnter', true)
      // 比如跳转到引导页
      uni.reLaunch({ url: '/pages/guide/guide' })
    } else {
      console.log(' 已经进入过')
    }
  }
}
// App.vue
import { onLaunch } from '@dcloudio/uni-app'
export default {
  setup() {
    onLaunch(() => {
      const hasEntered = uni.getStorageSync('hasEntered')
      if (!hasEntered) {
        console.log(' 首次进入')
        uni.setStorageSync('hasEntered', true)
        uni.reLaunch({ url: '/pages/guide/guide' })
      } else {
        console.log(' 非首次进入')
      }
    })
  }
}
优点:
缺点:
适用场景:
大部分项目的启动引导页、功能介绍页。
核心思路:
通过 plus.io(仅 App 端可用)在本地文件系统中保存标志文件,能防止被清除缓存影响。
// App.vue
export default {
  onLaunch() {
    // 仅在 App 端有效
    #ifdef APP-PLUS
    console.log('App 启动,检测是否首次进入...')
    plus.io.resolveLocalFileSystemURL('_doc/', (entry) => {
      // 尝试获取 firstEnter.txt 文件(create:false 表示不自动创建)
      entry.getFile(
        'firstEnter.txt',
        { create: false },
        (fileEntry) => {
          // 文件存在 → 非首次进入
          console.log(' 已存在文件 -> 非首次进入')
          // 你可以在这里执行“老用户逻辑”
        },
        (error) => {
          // 文件不存在 → 首次进入
          console.log(' 文件不存在 -> 首次进入')
          // 创建文件以记录状态
          entry.getFile('firstEnter.txt', { create: true }, (newFile) => {
            console.log(' 已创建标记文件,记录首次进入')
            // 执行首次进入逻辑,比如引导页
            uni.reLaunch({ url: '/pages/guide/guide' })
          })
        }
      )
    }, (err) => {
      console.error(' resolveLocalFileSystemURL 解析失败:', err)
    })
    #endif
  }
}
// App.vue
import { onLaunch } from '@dcloudio/uni-app'
export default {
  setup() {
    onLaunch(() => {
      // 仅在 App 端有效
      #ifdef APP-PLUS
      console.log('App 启动,检测是否首次进入...')
      plus.io.resolveLocalFileSystemURL(
        '_doc/',
        (entry) => {
          entry.getFile(
            'firstEnter.txt',
            { create: false },
            (fileEntry) => {
              console.log(' 已存在文件 -> 非首次进入')
              // 老用户逻辑放这里
            },
            (error) => {
              console.log(' 文件不存在 -> 首次进入')
              entry.getFile('firstEnter.txt', { create: true }, (newFile) => {
                console.log(' 已创建标记文件,记录首次进入')
                // 首次进入逻辑,例如跳转引导页
                uni.reLaunch({ url: '/pages/guide/guide' })
              })
            }
          )
        },
        (err) => {
          console.error(' resolveLocalFileSystemURL 解析失败:', err)
        }
      )
      #endif
    })
  }
}
_doc/ 是 App 本地的持久化文件目录;resolveLocalFileSystemURL 是解析逻辑路径的入口;entry 是文件或目录对象,可以用来创建、读取、删除文件;| 目录 | 说明 | 可写 | 是否清除 | 
|---|---|---|---|
| _doc/ | App 数据存储目录(推荐) | ×(仅卸载清除) | |
| _downloads/ | 下载文件保存目录 | × | |
| _www/ | 打包资源目录(App 安装包内) | × | × | 
| _documents/ | 公开文档目录(用户可见) | × | × | 
| _temp/ | 临时目录 | √(系统可能清理) | 
_doc/ 是什么?
plus.io.resolveLocalFileSystemURL() 是什么?
entry 是什么?
优点:
适用场景:
需要高持久性首次检测(比如 App 引导页、注册流程控制)。
核心思路:
当用户登录后,通过服务器接口判断该用户是否第一次使用该账号登录
// login.vue
uni.login({
  success: async (res) => {
    const userInfo = await uni.request({
      url: 'https://api.xxx.com/checkFirstEnter',
      method: 'POST',
      data: { userId: res.userInfo.id }
    })
    if (userInfo.data.isFirstEnter) {
      console.log(' 该账号首次登录')
    } else {
      console.log(' 老用户')
    }
  }
})
优点:
缺点:
适用场景:
需要区分新老用户的业务场景(如营销活动、统计分析)。
 
                    