在堆栈外的h5打开App,或跳到商城下载
浏览:1543 次

当App在终端外共享时,用户单击共享页面按钮以激活App。如果App已安装,请调用并跳转到App中的指定页面,否则跳转到手机商店下载。
1.获取终端的外部统一跳地址
最终开发者需要以以下格式提供:
/**
*协议是一个统一的跳协议(每个App都有一个特定的协议)
*Path是App中的页面路径(可以是“”)
*Params是一个跳转参数(例如:id=123&from=web)
*/
const schemeUrl=`${protocol}://${path}?${params}`
2.获取应用商店的地址
常量defaultUrl='https://a.app.qq.com/o/simple.jsp?pkgname=xxx“//App地址或App的官方下载地址可以用作封面(http协议地址)
const iosAppStore='https://apps.apple.com/cn/app/idxxx'//ios存储地址
函数getAndriShop(){//获取Android商城的地址
设hreff=“”;
如果(ua.isVivo){
hreff='活着arket://details?id=xxx '
}否则如果(ua.isoppo){
hreff=否ppomarket://details?packagename=xxx '
}否则(ua.isHuawei){
hreff='appmarket://details?id=xxx '
}否则(ua.is小米){
hreff='mimarket://details?id=xxx '
}else if(ua.is魅族){
hreff='mstore://details?id=xxx '
}其他{

hreff=年
}
3具体实施
实现原理:使用窗口位置执行跳转,然后使用setTimeout进行异步处理。如果跳转成功,setTimeout中的代码不需要注意,因为它是异步的;如果跳转失败,将执行setTimeout中的代码。
代码如下:
const jumpOutOpenApp=()=>{
干杯信息('链接加载,请稍候',3)
Const openAppUrl=schemeUrl//堆栈外跃点地址
窗location=openAppUrl//打开App(如果已安装)
/**
*如果已安装,则跳转已在上一步中完成。是否执行以下代码并不重要
*如果未安装,则上一次跳转失败,并异步执行以下代码
*/
窗setTimeout(函数(){
如果(ua.isIos){
窗位置=iosAppStore//ios商城
回来
}
窗位置=getAndriAddr()//Android商城
/**
*对于Android设备,一些浏览器无法跳转到其他协议的地址,因此需要特殊处理
*/
窗setTimeout(函数(){
窗位置=默认URL
}, 1000)

}, 3000)
},
这种方法可能会导致问题:
App的唤醒时间过长(超过3秒),App将与商场同时打开。用户体验不是很好。
思考了很久之后,你可以尝试以下方法来改善用户体验:
单击按钮后,跳转到新页面或在此页面上打开一个弹出窗口(称为过渡页面)。可以将下载按钮添加到过渡页面,以便用户手动单击跳转下载。页面在渲染过程中唤醒App(默认操作,用户没有意识),并在App唤醒时直接跳转到App。否则,请停留在过渡页面上,等待用户手动单击下载以跳转。
常量模态下降=()=>{
使用效果(()=>{
窗位置=openAppUrl//打开App(如果已安装)
}, [])
常量handleJumpShop=()=>{
如果(ua.isIos){
窗位置=iosAppStore//ios商城
回来
}
窗位置=getAndriAddr()//Android商城
窗SetTimeout(function(){//如果Android商城无法跳转,请异步跳转到底部地址(应用商店)
窗位置=默认URL
}, 1000)
}
返回
xxx年
/div>
}