收藏
回答

关于数据预拉取的功能设计和实现疑问?

加粗的地方是本人重点🈶️疑问或者不确定的,求详细解答!

我的需求:需要在小程序一打开获取目标数据,并根据数据向用户展示信息。且我需要小程序新用户第一次打开小程序就能拿到这个数据。我需要在onLaunch时立刻调用一个接口获取数据,在获取这个数据的时机,我还没有通过 wx.login 实现登录等逻辑,拿不到 openId 等数据。

我想通过数据预拉取实现需求。在阅读文档和社区时产生如下疑问:

1.关于token设计

文档:第一次启动小程序时,调用 wx.setBackgroundFetchToken() 设置一个 TOKEN 字符串,可以跟用户态相关,会在后续微信客户端向开发者服务器请求时带上,便于给后者校验请求合法性。

1.1. 这个和用户态关联的 token 怎么设计?我理解接口调用是在微信后台(代码包下载期间)发生的,如果我设计 token=localStorage中的session缓存字段,微信发起请求时能拿到用户本地的缓存的 session 数据吗? 如果不能,我在这个时机又没有任何用户态相关的信息,怎么传啊,我不想用 code 模式(可能导致用户重复登录)。

1.2. 如何保证接口安全?后端只能将接口设计为 get接口,且只能通过 token 字段来鉴权?比如我们接口之前还有特殊的 header实现鉴权,这些都不能实现?那这个接口也太不安全(太局限)了吧? 且基于 1.1. 我也不知道到底该咋定义这个 token 更安全。

2.关于数据获取

2.1. wx.getBackgroundFetchData我这样理解对吗?wx.getBackgroundFetchData,在冷启动下载代码包期间,微信后台会调用接口。当执行到 onLaunch 时,如接口请求完成则getBackgroundFetchData返回新数据,如接口未调用完成则返回缓存数据/空数据?

2.2. wx.onBackgroundFetchData 我这样理解对吗?用于监听backgroundFetch接口调用,如果在代码执行到 onLaunch 的wx.onBackgroundFetchData事件之前已经完成请求,则监听事件不会触发,否则当请求完成会触发监听时间获取到最新的代码。

2.3. 当我数据预拉取代码上线后,用户第一次打开,只会先setBackgroundFetchToken设置这个 token,onBackgroundFetchData和getBackgroundFetchData 都不会返回数据,用户第二次冷启动才会拿到数据对吗?

综上,如果我不需要获取最新数据,仅需调用getBackgroundFetchData即可。如果我想获取最新的数据,需要同时使用这两个方法(用户第一次访问没数据),但这可能会导致重复调用数据处理方法,我这样写对吗?能不能帮我优化下面的逻辑?

App({
  let targetData = {}
  let dataTimeStamp = 0

  onLaunch() {
    wx.onBackgroundFetchData((res) => {
      targetData = res.fetchedData
      // 判断是不是新数据
      if(res.timeStamp>dataTimeStamp){
          dataTimeStamp = res.timeStamp
          // 处理数据(新)                                
      }
    })
    wx.getBackgroundFetchData({
      fetchType: 'pre', //数据预拉取
      success(res) {
        targetData = res.fetchedData
        // 判断是不是新数据
        if(res.timeStamp>dataTimeStamp){
          dataTimeStamp = res.timeStamp
          // 处理数据(新 or 旧)                                
        }
      }
    })
  }
})







回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员--阳光
    社区技术运营专员--阳光
    2024-12-18

     wx.setBackgroundFetchToken() 设置之后,下次启动小程序生效

    2024-12-18
    有用
    回复 1
    • 隶书
      隶书
      2024-12-18
      您好,可以看看我的其他问题吗,尤其是 token 如何设计这里
      2024-12-18
      回复
  • 智能回答 智能回答 该问答由AI生成
    2024-12-18
    有用
登录 后发表内容