关于外展推广的那点事
背景 目前的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、文件名后面是否有当前环境 如果没有请检查第二项
4、cloudfunctions 文件下 public 中的文件内容 和 你刚刚复制的文件内容是否一致 (目前我这边 每次编译完只能生成 其中两个 解决办法就是你手动把你 缺失的文件直接丢进 对应的文件夹就好了)
检查无误 我们便可 上传 这个云函数了
第一步
微信开发者工具 打开云开发 选择=》 云函数 =》 云函数权限 =》自定义安全规则 修改 为以下内容 (目的 放开 public 云函数登录权限 支持未登录访问)
{
"*": {
"invoke": "auth != null"
},
"public": {
"invoke": true
}
}
第二步
右击 public 点击 上传并部署 :云端安装依赖不上传 node_modules
第三步
微信开发者工具 打开云开发 选择=》 云函数 =》 云函数列表 =》 查看是否有你刚刚上传的函数 函数状态是否为 已部署