微信小程序

微信小程序发布流程

1.首先在master 开发工具上传代码dev的环境

2.体验版测试

3.master 代码环境变成线上环境

4.体验线上环境的小程序,线上的数据,测试

5.提交审核

6.在发布管理平台,将ischeck改为true,目的影藏内容,在导航栏不显示,(例子,在你申请公众号,在你提交你要卖酱油,但是你在上线你要卖酒,这样审核是通过不了的,所以,你在提交审核后不卖酒的tab隐藏起来)

7.审核通过后,在微信的管理平台发布小程序

8.将审核状态ischeck改为false

9.然后在自己编写的小程序管理平台配置,小程序更新的时候是强制更新还是非强制更新,通过传递一个变量是false还是true

// app.js
App({
  env: "pro",
  onLaunch (options) {
    console.log("小程序加载",options)
    // 冷启动会执行
    // 热启动不会执行 
    // 点击右上角关闭小程序并且在30分钟内再次打开
  },
  onShow (options) {
    console.log("小程序显示")
    const updateManager = wx.getUpdateManager()

updateManager.onCheckForUpdate(function (res) {
  // 请求完新版本信息的回调
  console.log("是否有更新",res.hasUpdated)
})
 
updateManager.onUpdateReady(function () {
  const forceUpdate = false //从接口来,如果是false就不强制更新
  const isCheck = false  //通过接口修改,改成false,就可以逃过审核
  // 经营类目 日常用品  烟酒
  if(forceUpdate) {
    updateManager.applyUpdate()
  return false;
  }

  wx.showModal({
    title: '更新提示',
    content: '新版本已经准备好,是否重启应用?',
    success(res) {
      if (res.confirm) {
        // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
        updateManager.applyUpdate()
      }
    }
  })
})

updateManager.onUpdateFailed(function () {
  // 新版本下载失败
})
  },
  onHide () {
    console.log("小程序隐藏")
    // Do something when hide.
  },
  onError (msg) {
    console.log(msg)
  },
  globalData: {
    name: 123
  }
})

注意在更新请求的时候一般写在onShow生命周期里面,因为在onLaunch生命周期里面,只有冷启动才会触发,热启动不会触发

路由:

wx.switchTab

需要跳转的 tabBar 页面的路径 (代码包路径)(需在 app.json 的 tabBar 字段定义的页面),路径后不能带参数。如果没有在tabBar声明就会报错

wx.reLaunch

需要跳转的应用内页面路径 (代码包路径),路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2'

wx.redirectTo

需要跳转的应用tabBar与非tabBar都行 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔;如 'path?key=value&key2=value2'

wx.navigateTo

需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔;如 'path?key=value&key2=value2'

声明式导航

<navigator open-type="switchTab" url="/pages/logs/logs">声明式导航 switchTab</navigator>

事件:

  <view class="son" data-hehe="123" catchtap="clickSon" id="test">
//catchtap事件默认不会冒泡

微信支付的流程

 首先前端调一下我方服务器的接口,把付多少钱,传到我方服务器,我放服务器先进行预下单,将多少钱,与订单给到微信的支付系统,这时在微信支付系统将会有一个地方存着这笔订单,并把一些参数返回给我方服务器,我方服务器把这些参数返回给小程序,小程序通过wx.requestpayment()这个接口,携带我放服务器返回来的参数把钱给到微信支付系统,微信支付系统在把钱,与这笔订单返回给我方服务器,我方服务器进行一些处理

localstonge

小程序中在前台存localstonge的时候,在ios系统中,在开发版本,测试版本,还有上线版本中,他们的localstonge是公用的

解决办法:就是在存与取得时候把环境变量带上,通过环境变量,取不同环境取该环境下的对应的localstonge

function setStorage(key, value) {
  wx.setStorageSync(`${env}_key`, value) //这里env的是变量对应的该环境是哪个环境
}

webview

webvie是用来在原生上承载H5网页的,是用来在原生与h5网页进行通信,例如网页可以通过挂载在webview来调用原生app里面的功能,例如调用相机来进行扫码,在小程序中,我们在做一些活动的时候,我们可以通过把这些活动做成一个网页,挂载服务器的静态资源目录下,然后在小程序中通过web-view来访问这些活动的地址,同样用户协议也可以这样做

例子:我们首先在3001的服务器创建了一个h5网页

 webview.html

知识点:在页面可以通过 wx.miniProgram.postMessage进行传参,可以在webview 通过bindmessage事件 接受内容并做修改

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>内嵌webview的html页面</title>
    <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
    <script
      type="text/javascript"
      src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"
    ></script> <!-- 微信的接口 -->
    <script>
      // VConsole 默认会挂载到 `window.VConsole` 上
      var vConsole = new window.VConsole();
    </script>
  </head>
  <body>
    <h1>内嵌webveiw</h1>
    <button id="login">请重新登录</button>
    <script>
      const url = "https://t7.baidu.com/it/u=1831997705,836992814&fm=193&f=GIF";
      document.getElementById("login").addEventListener("click", () => {
        wx.miniProgram.reLaunch({
          url: "/pages/my/my",
        });
      });
      // console.log(window.location);
      const search = window.location.search.split("?")[1] || "";
      // 不完整的的
      const token = search.split("=")[1];
      console.log(token);
      wx.miniProgram.postMessage({ //通过postMessage进行传参
        data: {
          title: "呵呵哒",
          imagePath: url,
          hehe: 123,
        },
      });
    </script>
  </body>
</html>

在小程序的webview里面

webview.wxml文件

知识点:通过bindmessage事件 接受内容并做修改

<view>
<view>小程序中展示h5页面</view>
<web-view bindmessage="receiveMessage" src="{{url}}"></web-view>
</view>

webview.js

知识点;通过encodeURIComponent 进行解析

Page({
  data: {
    url: ''
  },
  onLoad(options) {
    const url  = decodeURIComponent(options.url)
    console.log(url)
    this.setData({url})
    //wx.hideHomeButton({})
  },
  receiveMessage(e) {
    console.log('接受post信息',e)
    const { title, imagePath } = e.detail.data[0] 
    console.log(title,imagePath)
    this.title = title,
    this.imageUrl = imagePath
  },
  onShareAppMessage() {
    return {
      title: this.title || '默认分享',
      imageUrl:this.imageUrl || 'https://t7.baidu.com/it/u=4162611394,4275913936&fm=193&f=GIF'
      
    }
  }
})

在小程序的活动页面里activelist.wxml

<view>
  <view>活动列表</view>
  <block wx:for="{{list}}" wx:key="index">
    <view data-url="{{item.url}}" data-login="{{item.isLogin}}" bindtap="jumpWebview">{{item.title}}</view>
  </block>
</view>

activelist.js

知识点:你再往webview进行跳转,携带的参数有两个?,所以用到encodeURIComponent进行操作

Page({

  /**
   * 页面的初始数据
   */
  data: {
    list: [{
      title:"幸运大转盘",
      url:"http://www.baidu.com",
      isLogin: false,
    },
    {
      title:"音乐播放器",
      url:"http://ustbhuangyi.com/music-next/#/singer",
      isLogin: false,
    },{
      title: "需要登录的活动",
      url:"http://localhost:3001/webview.html",
      isLogin: true,
    }]
  },
  jumpWebview(e) {
    console.log(e)
    const token = 'sdfmlskfjslfkjslfjkslkf'
    let {url, login } = e.target.dataset
    if(login) {
      url = `${url}?token=${token}`
    }
    console.log(login, url)
    
    wx.navigateTo({
      url: `/pages/webviewdemo/webview?url=${encodeURIComponent(url)}`,
    })
  }
})

总结:

原因1.经常改变的页面 活动页面 原生小程序开发 修改复杂 没有时效性

原因2.某些页面app和小程序通用 都做原生成本高 做成h5用webview承载

1.webview 在小程序中显示h5网页

2.只有在小程序后台配置了 webview 业务域名的才能在小程序里使用

3.h5的页面应该怎么做?

  * 静态页面 用户协议 -> 页面生成器

  * 用户状态

  小程序的token 传给h5的页面是否能用,

  我们的可用,我们的用户系统已经和微信 手机号登录 ,密码登录,实现关联统一token可用

 4.在内嵌的h5页面发现小程序的传递过来token失效如何处理

   通知小程序重新登录

5. webview 分享当前页面 分享的内容应该由内嵌的h5页面决定

   在h5页面通过postmessage 传递自定义分享内容

   小程序里通过 bindmessage 接受内容并做修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值