微信小程序和百度小程序的登录 wx.login() swan.login() , 以及存在的问题处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cvper/article/details/86568313

一说到小程序,很多人都知道 微信小程序,但是如果你是小程序开发者,那么也可能知道百度小程序;

有一句开发者的至理名言,如果你在开发百度小程序中遇到了问题,那么第一时间不是取看文档,逛社区论坛,

因为你找不到相关的问题,最正确的做法是 在你的问题前面加上微信小程序,这样就能解决问题了;

上面是个笑话,我们知道小程序的开放接口中有一个登陆功能,使用很简单,就是一个请求,

微信的是 wx.login  ,  百度的是 swan.login() , 其实没什么区别,都一样,

只要你请求了这个接口,那么就能返回一个 code 值;

然后我们拿着这个获取到的 code ,再去请求 我们自己项目的服务器接口,在微信中就可以返回一个登陆的状态,

简单来说就是一个字符串,标识这个用户状态,然后我们还可以使用这个字符串作为参数去请求我们后台的

相关的数据; 在百度小程序中也是同样的原理;

我们假设获取到的用户标识是 usertoken 或者简单一点  uk ;

我们知道,小程序中动态的数据是要请求接口的,从服务器返回我们需要的请求,

那么我们需要把这个 usertoken 或者 uk 作为参数传递过去,这样,后台就会把数据返回给前端了;

这就是一般的小程序的开发的步骤;

但是,其中有个问题是,假设我们在小程序启动的时候,也就是 AppLaunch 的时候去获取 usertoken ;

这个使用code 换取 usertoken 的请求不能确定什么时候返回我们 usertoken ,

也就是说我们可能在 100ms 内可以拿到这个 usertoken ,也可能在 1000ms 后拿到usertoken ;

但是小程序执行完 AppLaunch 之后就会显示第一个页面,index.wxml ;

假设我们需要在 index.html 中显示请求来的数据,但是这个请求又需要usertoken 作为参数,

最要命的是这个时候 usertoken 还没有获取到,那就很尴尬了,肯定有人遇到过这样的情况吧;

我看到网上有人提出类似的问题,并且本人也遇到过这样的问题;

那么有什么解决办法呢?

第一种,放弃首页带 usertoken 参数的请求

分析:一般情况下,在进入首页之后,usertoken 都是可以获取进来了,所以说,如果首页需要usertoken 

           作为参数去请求接口,那么是不是可以放弃这个带usertoken 参数的请求,如果请求的参数和用户

             没有直接关系,那么是不是可以放弃携带 usertoken 参数,直接请求接口数据;

             上面的做法可以视为一种解决方案,但是问题也很明显, usertoken 万一返回的时间稍长,等用户

              进入其它页面的时候还是没有获取到 usertoken 怎么办,这就是个问题了;

第二种,加loading,如果返回 usertoken 的时间不是巨长无比,那么我们在发起请求之前判断 usertoken 

              是否已经获取到,如果没有,那么在需要请求接口的数据进行渲染的部分加上一个微信默认的loading

               是不是也是OK的呢?

第三种,这种方式也挺狠的,我们无法阻止 AppLaunch 的进行,但是却可以阻止首页的渲染,

               在首页展示页面之前判断 usertoken 是否已经获取到,如果没有,那么首页加上一个进度条,加载条都行,

               获取成功之后再显示页面,然后保存 usertoken 到全局或者storage都行;

 第四种,上面的方法都是存在问题的,第四种算是一个补充吧,当用户通过分享进入小程序,也就是说用户可以跳过

               首页,直接进入到某一个确定的页面中,那么这个页面也是需要对 usertoken 进行判断和处理的,

               但是,无论从什么地方进入,都会触发  AppLaunch 的这个函数 ,但是AppLaunch 这个函数不能阻止其执行,

                也就是说,如果可以阻止执行,我们就能够在获取到 usertoken 之后再显示页面,无论是正常进入还是通过

                分享的入口进入;  还有一点需要我们注意下,如果多次请求usertoken 一定要使用最新的 usertoken ;否则

                会因为使用上一次产生的 code 和 usertoken 出现一定的问题;

上面简单的描述了登陆应用中的一点问题,有点乱,仅作参数;

猜你喜欢

转载自blog.csdn.net/cvper/article/details/86568313