先来看效果
需求:在小程序或app点击跳转按钮就会打开百度网盘并且进入后自动解锁打开该页面
使用框架:uniapp
需求分解:1.在小程序中点击跳转按钮打开百度网盘
看到这个需求,第一反应肯定是打开uniapp官网,搜一搜有没有什么好用的方法可以让我嫖一嫖
嘿,没想到还真有
这个方法可以直接跳转另一个小程序(以下是使用方法)
uni.navigateToMiniProgram(OBJECT)
uni.navigateToMiniProgram({
appId: '',
path: 'pages/index/index?id=123',
extraData: {
'data1': 'test'
},
success(res) {
// 打开成功
}
})
跳转方法是解决了,可是怎么能跳到对应的小程序呢,比如说我现在要跳到百度网盘,我看了一下appId这个参数传对应的appid就行,接下来我把如何获取百度网盘的appid的教程给大家分享一下
1.首先打开百度网盘小程序
2.
3.
4.
好好好,这时候百度网盘的appid就有了
接下来就要获取页面路径了,我就不写这个过程了,过程下面文章中有(也可以直接复制我下边写好的方法)如何查看并复制小程序的页面路径? | 微信开放社区 (qq.com)https://developers.weixin.qq.com/community/develop/article/doc/000ce424104ce8a015cb6658a51413
经过对获取到的url转码得到了以下的路径url
转码:pages/netdisk_share/share?scene=1PzqiNscYrx6u8DBjmVq52s%231234%238%230
然后只需要拿链接中替换掉就可以使用
然后拿以下举例:
例:https://pan.baidu.com/s/1PzqiNscYrx6u8DBjmVq52s?pwd=1234
转码:pages/netdisk_share/share?scene=1PzqiNscYrx6u8DBjmVq52s%231234%238%230
然后就是做app跳转,这边是直接有app方法(我这边没有判断用户是否手机上有百度网盘小程序,使用这方法是直接用浏览器打开的网盘地址,你们也可以进行判断一下)
plus.runtime.openURL
到现在小程序跳转和app跳转方法都有了,就可以做跳转功能了
由于复制出来的百度网盘链接可能会有文字或者什么东西,需要先用正则给净化一下
getStrUrl(s) {
var reg = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/g;
var reg = /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
s = s.match(reg);
return (s && s.length ? s[0] : null);
},
然后拿着净化后的链接去做跳转功能,我这边直接替换过了
首先说明这个方法是网盘这个链接专用方法https://pan.baidu.com/s/*********
openurl(url) {
let cjurl = this.getStrUrl(url)//净化过后的url
if (uni.getStorageSync('isWechat') == true) {
//小程序跳转
let tzurl = cjurl.split('/s/')[1].split('?pwd')[0]//取出来链接
let pwd = cjurl.split('/s/')[1].split('?pwd=')[1]//取出来提取码
uni.navigateToMiniProgram({
appId: 'wxdcd3d073e47d1742',
path: `pages/netdisk_share/share?scene=${tzurl}%23${pwd}%238%230`,
extraData: {
foo: 'bar'
},
envVersion: 'release',
success(res) {
// 打开成功
}
})
} else {
plus.runtime.openURL(cjurl, function(res) {
//这边是app跳转
console.log(res);
});
}
},
如果要是这个链接 https://pan.baidu.com/share/init?surl=***&pwd=*** 的话请去这个方法
// 打开网盘方法
openurl(url) {
if (!url) {
this.$msgs('暂无跳转链接')
return
}
// getStrUrl这个方法去上面找一下,有的
let cjurl = this.getStrUrl(url)
console.log('cjurlcjurlcjurl', cjurl);
if (uni.getStorageSync('isWechat') == true) {
let tzurl = ''
let pwd = ''
if (cjurl.indexOf('/s/') == -1) {
// 如果链接里没有/s/的话,也就是https://pan.baidu.com/share/init?surl=***&pwd=***
// 这里链接前加一个1就行了,虽然我也不知道为什么,这个是我观察出来的
tzurl = '1'+cjurl.split('surl=')[1].split('&pwd=')[0]
pwd = cjurl.split('&pwd=')[1]
} else {
//如果链接里有/s/的话,也就是https://pan.baidu.com/s/*******?pwd=****
tzurl = cjurl.split('/s/')[1].split('?pwd')[0]
pwd = cjurl.split('/s/')[1].split('?pwd=')[1]
}
uni.navigateToMiniProgram({
appId: 'wxdcd3d073e47d1742',
path: `pages/netdisk_share/share?scene=${tzurl}%23${pwd}%238%230`,
extraData: {
foo: 'bar'
},
envVersion: 'release',
success(res) {
// 打开成功
}
})
} else {
plus.runtime.openURL(cjurl, function(res) {
//进入后台小哥哥给我的应用宝下载链接,让你们后台给你
//这链接会判断你手机是ios还是Android,Android进入应用宝下载app
//跟下面的是一个链接
console.log(res);
});
}
},
这样整个流程就都有了,可以直接跳转到百度网盘了,开心开心