在堆栈外的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年

下载App</div>

/div>

}