外部浏览器 H5 跳转小程序 (mpvue 踩坑 云函数)

关于外展推广的那点事
背景 目前的vue公众号项目 有个投放需求 投放位置 在非微信端 为了转化效率 我们使用了 小程序 要在用户购买后 可以直接跳转 小程序 使得用户的流程更加顺畅 但是在 H5 跳转小程序的时候 尤其是在建立云函数的时候 踩了很多坑

期望效果:https://postpay-2g5hm2oxbbb721a4-1258211818.tcloudbaseapp.com/jump-mp.html

开发环境 H5 (vue) ; 小程序(mpvue);

H5 代码如下

// index.html 文件还需要引入一下 云开发文件哦

//<!-- 云开发Web SDK -->
<script src="https://res.wx.qq.com/open/js/cloudbase/1.1.0/cloud.js"></script>
<template>
  <div class="page full">
    <div id="public-web-container" class="hidden">
      <p class="">正在打开 “小程序”...</p> <!-- replace -->
      <a id="public-web-jump-button" href="javascript:" class="weui-btn weui-btn_primary weui-btn_loading" @click="openWeapp()">
        <span id="public-web-jump-button-loading" class="weui-primary-loading weui-primary-loading_transparent"><i class="weui-primary-loading__dot"></i></span>
        打开小程序
      </a>
    </div>
  </div>
</template>

<script>
export default {
  name: "h5Tomimidemo",
  data(){
    return{
      cloudData:null
    }
  },
  mounted() {
    let that = this
      this.docReady(async function() {

          that.cloudData = new cloud.Cloud({
            // 必填,表示是未登录模式
            identityless: true,
            // 资源方 AppID
            resourceAppid: '小程序ID', // <!-- replace -->
            // 资源方环境 ID
            resourceEnv: '云开发环境ID', // <!-- replace 云开发环境ID 所在位置在 微信开发者工具 =》 云开发 =》 设置 =》 环境设置 =》 环境ID  -->
          })
          await that.cloudData.init()  /// 初始化 cloud
          try {
            await that.openWeapp(() => {})   // 自动触发
          } catch (e) {
            throw e
          }
      })
  },
  methods:{

    docReady(fn) {
      if (document.readyState === 'complete' || document.readyState === 'interactive') {
        fn()
      } else {
        document.addEventListener('DOMContentLoaded', fn);
      }
    },


    async openWeapp(onBeforeJump) {
      const res = await this.cloudData.callFunction({
        name: 'public',  //  要调用的云函数 名称
        data: {
          action: 'getUrlScheme',
          pageInfo:{  ///  这是你要跳转的 小程序页面信息
            path:'/pages/FundCalculator/main',
            query:'qqq=123'
          }
        },
      })
      console.warn(res)   /// res 则为返回值
      if (onBeforeJump) {
        onBeforeJump()
      }
      location.href = res.result.openlink  /// openlink 就是生成的 小程序链接
    }
  }
}
</script>

mpvue 小程序代码如下

//  小程序我们 需要在 main.js 文件中 新增
wx.cloud.init({ // 我查的意思是开启 云函数功能 但是不写能不能成 我也不清楚了 感觉和这个关系不大 望读者可以测试一下
  traceUser: true
})

接下来我们去下载 微信提供的云函数 进行导入 下载地址为 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html

如果找不到下载按钮可以 ctrl + f 搜索 云函数 有个 云函数 public: 点击下载 即可 我们需要的 是
cloudfunctions 这个文件夹 把这个文件夹复制丢到 src 文件

注: 直接下载下来的 是不支持 自定义跳转地址的 如果想实现 动态 小程序地址 把 public/index.js 文件内容修改如下

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  console.log(event, context,123)
  const wxContext = cloud.getWXContext()

  switch (event.action) {
    case 'getUrlScheme': {
      return getUrlScheme(event)
    }
  }

  return 'action not found'
}

async function getUrlScheme(event) {
  return cloud.openapi.urlscheme.generate({
    jumpWxa: {
      path: event.pageInfo && event.pageInfo.path?event.pageInfo.path:'', // <!-- replace -->
      query: event.pageInfo && event.pageInfo.query?event.pageInfo.query:'',
    },
    // 如果想不过期则置为 false,并可以存到数据库
    isExpire: false,
    // 一分钟有效期
    expireTime: parseInt(Date.now() / 1000 + 60),
  })
}

然后配置 云函数列表

//  小程序我们 在 project.config.json 文件中 新增

  "cloudfunctionRoot": "cloudfunctions", // cloudfunctions 这个就是你 刚刚复制的那个文件的文件名
//  和你的appID 同级

然后 你就可以npm run dev 跑一下你的 小程序 需要查看 四个地方 生成的 dist文件
1、是否有 生成了project.config.json
2、是否有 生成了project.config.json 是否包含你设置的 “cloudfunctionRoot” 参数 (大多数情况没有生成此参数)
3、外部浏览器 H5 跳转小程序 (mpvue 踩坑 云函数)文件名后面是否有当前环境 如果没有请检查第二项
4、cloudfunctions 文件下 public 中的文件内容 和 你刚刚复制的文件内容是否一致 (目前我这边 每次编译完只能生成 其中两个 解决办法就是你手动把你 缺失的文件直接丢进 对应的文件夹就好了)

检查无误 我们便可 上传 这个云函数了
第一步
微信开发者工具 打开云开发 选择=》 云函数 =》 云函数权限 =》自定义安全规则 修改 为以下内容 (目的 放开 public 云函数登录权限 支持未登录访问)

{
  "*": {
    "invoke": "auth != null"
  },
  "public": {
    "invoke": true
  }
}

第二步
右击 public 点击 上传并部署 :云端安装依赖不上传 node_modules

第三步
微信开发者工具 打开云开发 选择=》 云函数 =》 云函数列表 =》 查看是否有你刚刚上传的函数 函数状态是否为 已部署外部浏览器 H5 跳转小程序 (mpvue 踩坑 云函数)

上一篇:SSM+PageHelper实现分页查询


下一篇:PageInfo自动分页超简单让你掌握,凸显逼格