uni-app ios 18 拨打电话 跳转应用商店失效

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app ios 18 拨打电话 跳转应用商店失效

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

操作步骤:

1

预期结果:

正常运行

实际结果:

正常运行

bug描述:

iOS18
拨打电话:uni.makePhoneCall({phoneNumber: pPN});
升级跳转商店:plus.runtime.openURL(encodeURI(this.newVerInfo.uploadAddress));

都没反应,希望官方赶紧解决一下


3 回复

HBuilder-X 4.29 已修复


开发只需要更新下hbuilder就可以了是吗?

针对您提到的uni-app在iOS 18上拨打电话和跳转应用商店功能失效的问题,这里提供一些可能的解决方案,主要通过代码示例来展示如何在uni-app中实现这些功能,并考虑iOS 18可能引入的权限和隐私保护变化。

拨打电话

在iOS中,拨打电话功能通常需要用到tel:协议。在uni-app中,可以通过plus.runtime.openURL方法来实现。不过,iOS 18加强了对URL Scheme的管控,确保应用不会滥用系统功能。

// 拨打电话功能示例
function makePhoneCall(phoneNumber) {
    if (plus.os.name === 'iOS') {
        // iOS 18及以上版本可能需要用户授权访问电话功能
        // 这里假设已经获得了相关权限
        const url = `tel:${phoneNumber}`;
        plus.runtime.openURL(url, function(e) {
            if (e.code !== 0) {
                console.error('拨打电话失败:', e.message);
            } else {
                console.log('拨打电话成功');
            }
        });
    } else {
        // 其他平台处理逻辑
        window.location.href = `tel:${phoneNumber}`;
    }
}

// 调用示例
makePhoneCall('1234567890');

跳转应用商店

对于跳转到应用商店,iOS使用itms-apps:协议。同样,iOS 18可能加强了对这类操作的限制,确保用户隐私安全。

// 跳转到应用商店功能示例
function openAppStore(appId) {
    if (plus.os.name === 'iOS') {
        const url = `itms-apps://itunes.apple.com/app/id${appId}`;
        plus.runtime.openURL(url, function(e) {
            if (e.code !== 0) {
                console.error('跳转应用商店失败:', e.message);
            } else {
                console.log('跳转应用商店成功');
            }
        });
    } else {
        // Android或其他平台处理逻辑,可能需要使用市场特定的URL
        const androidUrl = `market://details?id=${appId}`; // 示例,具体URL根据市场调整
        window.location.href = /android/i.test(navigator.userAgent.toLowerCase()) ? androidUrl : `https://play.google.com/store/apps/details?id=${appId}`;
    }
}

// 调用示例
openAppStore('123456789'); // 替换为实际应用的App ID

注意:上述代码假设应用已经获得了必要的权限。在iOS 18及更高版本中,应用可能需要在Info.plist中声明相关权限,并在运行时请求用户授权。此外,苹果可能进一步限制了这些功能的使用,因此在实际开发中,务必参考最新的苹果开发者文档和指南。

回到顶部