美文网首页
小程序云开发6.我的功能实现

小程序云开发6.我的功能实现

作者: 前端辉羽 | 来源:发表于2019-12-26 09:21 被阅读0次

    本文目录:

    • 1.获取用户信息的不同方式
    • 2.小程序端的数据存储
    • 3.生成小程序码

    1.获取用户信息的不同方式

    第一种方式

    想要获取用户的头像直接显示在页面上
    <open-data type="userAvatarUrl"></open-data>
    想要获取用户的昵称直接显示在页面上
    <open-data type="userNickName"></open-data>
    国家<open-data type="userCountry"></open-data>
    城市<open-data type="userCity"></open-data>
    以上方式不需要授权,但是只能显示到页面上,不能用js进行数据操作。

    第二种方式

    获取已授权用户的信息

    wx.getUserInfo({
      success:(res)=>{
      }
    })
    

    第三种方式

    弹出授权框,让用户授权

    <button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">获取用户信息</button>
    onGetUserInfo(event){
      console.log(event)
    }
    

    第三种方式的缺点获取不到用户的openid

    第四种方式

    传统方式下(服务器用的是自己的)
    通过微信服务器调用wx.login获取code(code时效只有五分钟)
    ,用户端小程序调用wx.reuqest将code传递给后端服务器
    后端服务器使用code从微信服务器获取openid和session_key,得到后将用户标识发送给小程序本地存储。


    传统模式.png

    云开发模式:
    用户点击对应按钮,这个按钮可以是一个普通按钮,我们通过触发云函数中的代码来获取用户信息,小程序端调用云函数时,云函数端就可以很简单的获得用户信息,
    然后将用户信息返送给小程序端,小程序端可以将用户信息存储到云数据库中去。

    云开发模式.png
    实际操作:
    在小程序页面放置一个普通的按钮
    <button bind:tap="getOpenid">获取openid</button>
    在js中定义事件处理函数
    getOpenid(){
        wx.cloud.callFunction({
            name:'login'
        }).then((res)=>{
            console.log(res)
        })
    }
    

    我们可以在用户不知情的情况下获取到用户的openid,但是获取用户信息必须要弹框,用户同意才可以获取。

    有些页面我们不想要其滚动,可以在页面的json文件中添加上属性
    “disableScroll: true”

    原来的点击跳转页面是view组件,然后绑定tap事件实现页面跳转,但是小程序提供了组件navigator,点击整个区域,点击跳转界面,界面也是需要在app.json进行配置,然后添加url属性设置跳转页面,添加hover-class设置点击样式,我们可以设置hover-class:”none“来取消点击样式。

    如果要给小程序的样式设置背景图片,那么不能使用本地图片,解决方法之一是使用链接形式的网络图片,解决方法之二是将图片转换成base64格式。
    在页面的css文件中给page标签设置样式就可以对当前的整个页面起作用。

    2.小程序端的数据存储

    在app.js文件中有个onLaunch,每次小程序启动的时候都会自动调用这个回调函数。在这里我们可以定义一个方法,每次小程序启动的时候都先通过调用云函数把当前用户的OPENID获取到,并且存在手机的本地存储中,
    wx.setStorage异步的,参数对应的是两个字符串
    wx.setStorageSync同步的,参数对应的是一个对象

    在云函数中通过
    const wxContext = cloud.getWxcontext()然后
    wxContext.OPENID就可以直接拿到用户的openid

    获取小程序的全局变量:
    取到app里的全局变量,首先需要在页面的js文件中取到app
    const app =getApp()
    然后就可以通过app.的形式去拿app中的全局变量了,
    app.globalData.openid

    在小程序端初始化数据库,
    const db = wx.cloud.database()
    在云函数中初始化数据库,
    const db = cloud.database()
    从小程序端直接拿云数据库中的数据,时间是需要进行格式化处理的,如:日期格式转字符串格式
    云函数中根据OPENID查询数据库的代码

    const wxContext = cloud.getWXContext()
    app.router('getListByOpenid', async(ctx, next) => {
      ctx.body = await blogCollection.where({
        _openid: wxContext.OPENID
      }).skip(event.start).limit(event.count).orderBy('creatTime', 'desc').get().then((res) => {
        return res.data
      })
    })
    

    这个查询操作我们也可以不通过云函数,而直接在小程序端去查询数据库获取相关数据,首先将数据库的规则改为仅创建者可操作,这样我们不用传OPENID,因为只能查到自己创建的数据

    _getListByMiniprogram(){
        wx.showLoading({
            title:'加载中'
        })
        db.collection('blog').skip(this.data.blogList.length)
        .limit(MAX_LIMIT).get().then((res)=>{
            console.log(res)
        })
    }
    

    3.生成小程序码

    新创建的云函数,如果打算调用对应的开放能力,需要在云函数文件夹中新建一个config.json文件,然后添加上相应的调用权限,比如当前生成小程序码,需要在config.json文件中添加以下代码

    {
      "permissions":{
        "openapi":{
          "wxacode.getUnlimited"
        }
      }
    }
    

    调用云函数成功后,云函数返回的是一个buffer二进制数据,这个二进制数据我们是没法用来页面显示的,这时候我们在云函数里面调用云存储,通过buffer数据存储和转化为图片之后再把对应二维码图片的存储位置,也就是fileID,返回到小程序端

    exports.main = async(event, context) => {
      const wxContext = cloud.getWXContext()
      const result = await cloud.openapi.wxacode.getUnlimited({
        scene: wxContext.OPENID,
        // lineColor: {
        //   'r': 211,
        //   'g': 60,
        //   'b': 57
        // },
        //背景透明
        // isHyaline: true
        // page:'pages/blog/blog'
      })
      // console.log(result)
      const upload = await cloud.uploadFile({
        cloudPath: 'qrcode/' + Date.now() + '-' + Math.random() + '.png',
        fileContent: result.buffer
      })
      return upload.fileID
    }
    

    小程序上线之后,在云函数中可以配置pages属性,加入pages设置识别二维码跳转的是blog页面,那么我们在blog页面的onLoad生命周期的options中通过.scene就可以拿到传递过来的scene参数,这个参数的设置可以帮助我们辨别扫码入口的场景。

    接下来在小程序端调用云函数,此时能够拿到小程序码的图片
    上传图片之后进行自动预览

    wx.previewImage({
        urls: [res.result],
        current: res.result
    })
    

    相关文章

      网友评论

          本文标题:小程序云开发6.我的功能实现

          本文链接:https://www.haomeiwen.com/subject/jyhkoctx.html