业务情景:
客户同时开发了App和小程序,都是用uniapp开发的,都绑定在了一个微信开放平台下面。
App端想要和小程序端的用户打通,用户手机号注册App登录后,会在进行提现到微信零钱这个功能时,跳转微信小程序中授权,然后拿到用户的openid,绑定微信跳转回App。
先说App跳转小程序:
- 先在manifest.json中 “App模块配置” share分享中配置 开放平台的appid (iOS端还需要配置universallink)
uniapp的写法:
onLoad(){
//获取当前显示的webview
var pages = getCurrentPages()
var page = pages[pages.length - 1]
var currentWebview = page.$getAppWebview()
//调用H5+APP的扩展API
var shares = null;
let that = this
var pusher = plus.share.getServices(function(s) {
shares = {};
for (var i in s) {
var t = s[i];
shares[t.id] = t;
}
that.sweixin = shares['weixin'];
}, function(e) {
console.log("获取分享服务列表失败:" + e.message);
});
//放入当前的webview
currentWebview.append(pusher);
},
}
methods:{
//跳转方法
okBut() {
//调用微信小程序
this.sweixin.launchMiniProgram({
id: 'gh_xxxxxxxxx', //要跳转小程序的原始ID
path: '/pages/index/index?sq=true&a=' + 参数,//跳转到小程序的制定路径,以及可以携带的参数
type: 2, //正式版:0,测试版:1,体验版:2
})
}
}
App跳转小程序,在小程序指定的页面,在onLoad中接收传递的参数
二:小程序跳转回App
官方文档
//**小程序中button 的open-type="launchApp" 触发跳转回App**
<button type="primary" open-type="launchApp" :app-parameter="appParameter" binderror="launchAppError" class="sqbtn f13" v-if="!isShouquan">点击返回APP </button>
在这里重点说一下小程序跳转回App携带的这个参数问题:
小程序携带参数跳转回App用 app-parameter 来进行携带,这个参数的值最好使用JSON.stringfy()来 变成字符串进行传递,可以传任何类型的数据,但是最好转变成字符串进行传递,重点是在App的哪里来接收传递的数据
//在App.vue中的onShow里面来接收这个数据
// #ifdef APP-PLUS
var param = plus.runtime.arguments;
if (param != '') {
try {
// console.log("1")
// console.log(param);
// console.log("2");
//获取小程序传输到app的数据方法
var token = param;
// console.log("3");
// console.log(token);
if (token == "" || token == null || token == undefined) {
// console.log("4")
return;
}
// console.log("5");
// 缓存用户信息,跳转到我的页面
// that.showSuccesToast('登陆成功');
// // 将用户信息保存进缓存
uni.setStorageSync('token', token);
plus.runtime.arguments = "";
// console.log("清除plus.runtime.arguments数据成功")
// 跳转进入小程序首页
uni.switchTab({
url: '/pages/index/index'
});
} catch (e) {
// 若传入的参数不是JSON格式字符,需处理异常情况
// console.error(e);
// console.log('若传入的参数不是JSON格式字符,需处理异常情况。');
}
}
// #endif
这里我只是进行了我自己的例子,这个方法目前适用于安卓端,苹果端是不适用的。