uni-app ios 18 拨打电话 跳转应用商店失效
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
中声明相关权限,并在运行时请求用户授权。此外,苹果可能进一步限制了这些功能的使用,因此在实际开发中,务必参考最新的苹果开发者文档和指南。