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

1 回复

更多关于uni-app ios判断是否有高德地图app方法一直走成功回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题在iOS平台上是已知的行为特性。在iOS系统中,plus.runtime.isApplicationExistplus.runtime.openURL方法的回调行为与Android不同:

  1. isApplicationExist在iOS上会始终返回true,因为iOS系统没有提供直接检测应用是否安装的API。这是iOS的安全限制导致的。

  2. 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);
});
回到顶部