uni-app ios判断是否有高德地图app方法一直走成功回调
uni-app ios判断是否有高德地图app方法一直走成功回调
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 7 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:windows7
HBuilderX类型:正式
HBuilderX版本号:3.1.2
手机系统:iOS
手机系统版本号:iOS 11.0
手机厂商:苹果
手机机型:iphone6
页面类型:vue
打包方式:云端
项目创建方式:HBuilderX
示例代码:
``` if(plus.runtime.isApplicationExist({
pname: 'com.autonavi.minimap',
action: 'iosamap://'
})){
console.log(1);
let url = "";
if (plus.os.name == "Android") { //判断是安卓端
url = `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
if (url != ""){
url = encodeURI(url);
//plus.runtime.openURL(url,function(e){})调起手机APP应用
plus.runtime.openURL(url, function(e){
plus.nativeUI.alert("请先安装高德地图!");
});
}
} else {
// iOS上获取本机是否安装了百度高德地图,需要在manifest里配置
// 在manifest.json文件app-plus->distribute->apple->urlschemewhitelist节点下添加
// (如urlschemewhitelist:["iosamap","baidumap"])
url = `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
if (url != ""){
url = encodeURI(url);
plus.runtime.openURL(url, (e) => {
plus.nativeUI.alert("请先安装高德地图!");
});
}
}
}else{
plus.nativeUI.alert("请先安装高德地图");
}
操作步骤:
ios 判断是否存在高德地图app 这个方法plus.runtime.isApplicationExist 他不走失败回调,一直走成功回调
ios 通过链接打开app 这个方法plus.runtime.openURL也不走失败回调,只走成功回调。
预期结果:
希望官方给出回复。并改正这个方法
实际结果:
ios 判断是否存在高德地图app 这个方法plus.runtime.isApplicationExist 他不走失败回调,一直走成功回调
ios 通过链接打开app 这个方法plus.runtime.openURL也不走失败回调,只走成功回调。
bug描述:
ios 判断是否存在高德地图app 这个方法plus.runtime.isApplicationExist 他不走失败回调,一直走成功回调
ios 通过链接打开app 这个方法plus.runtime.openURL也不走失败回调,只走成功回调。
更多关于uni-app ios判断是否有高德地图app方法一直走成功回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app ios判断是否有高德地图app方法一直走成功回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题在iOS平台上是已知的行为特性。在iOS系统中,plus.runtime.isApplicationExist
和plus.runtime.openURL
方法的回调行为与Android不同:
-
isApplicationExist
在iOS上会始终返回true,因为iOS系统没有提供直接检测应用是否安装的API。这是iOS的安全限制导致的。 -
openURL
方法在iOS上调用后,无论目标应用是否存在,都会触发成功回调。如果应用未安装,系统会静默失败(不会弹出提示)。
解决方案:
对于iOS平台,建议直接调用openURL
方法,然后在短时间内检测页面是否仍然处于活跃状态来判断是否成功跳转:
let startTime = Date.now();
plus.runtime.openURL(url, function(){
// iOS总是会进入这个回调
if(Date.now() - startTime < 100){
// 快速返回说明跳转失败
plus.nativeUI.alert("请先安装高德地图!");
}
});
或者使用更可靠的方案:先尝试跳转,设置一个超时检测:
let timer = setTimeout(()=>{
plus.nativeUI.alert("请先安装高德地图!");
}, 300);
plus.runtime.openURL(url, function(){
clearTimeout(timer);
});