uni-app打包H5后放入app内,无法拨号
uni-app打包H5后放入app内,无法拨号
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 10.15.5 | HBuilderX |
产品分类:uniapp/H5
PC开发环境操作系统:Mac
HBuilderX类型:正式
HBuilderX版本号:2.9.8
浏览器平台:手机系统浏览器
操作步骤:
在app内创建wkwebview,加载url,点击“呼叫”不能拨号。ios内是wkwebview。安卓内加载url的容器不知道是什么,一样不能拨号。
预期结果:
拨号
实际结果:
点击呼叫没有反应
bug描述:
uniapp打包放H5,不能拨号(号码存在,能打印),代码在47行和255行。
uni.makePhoneCall({
phoneNumber: this.listData[index].phoneNumber,
success: (res) => {
console.log('调用成功!');
console.log(res);
},
fail: (res) => {
console.log('调用失败!');
console.log(res);
}
})
更多关于uni-app打包H5后放入app内,无法拨号的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题已解决。
问题:uniapp打包H5,放app webView内不能拨号(打电话)。
真机调试机型:iPhone XR、华为。
安卓的我不太懂,说一下ios的。
uni.makePhoneCall、 a 标签、js直接拨号适合2020年10月中旬以前。
10月后,苹果官方强制要求开发人员使用WKWebView,弃用UIWebView。WKWebView不支持 a 标签、js等方式直接拨号。
解决方案:H5和ios都导入jsBridge库,H5点击按钮拨号,通过herf传出信号,比如:跳转http://www.baidu.com?mobile=1300000。
uniapp导入jsBridge库:
manifest.json>H5配置>设置index.html模板路径。
index.html模板创建:在uniapp项目根目录下创建html文件(新建自定义文件,后缀html),文件名随意。我的文件名字mould.html。通过<script></script>标签导入jsBridge库。
1、app内监听webview的url。
2、拿到http://www.baidu.com?mobile=1300000。
3、拦截跳转(我们只要拨号,不是真的跳转到百度去)。
4、解析url获得号码。
5、app调用原生方法拨号。
更多关于uni-app打包H5后放入app内,无法拨号的实战教程也可以访问 https://www.itying.com/category-93-b0.html
上面的回答没有写好,上面的回答是两个解决办法。
当时刚写完文档,神志不清。
总结一下:
方法1:herf,跳转,app内拦截url,解析url拿到参数。
方法2:导入jsbridge,发出消息并且传参,app内收到消息,拿到参数,做对应事件处理。
扫描的二维码
请问是app中嵌套h5拨打电话 是app去拦截然后再调用plus拨打手机号的吗 或者能看下代码吗 感谢
在uni-app打包H5后放入原生App内无法拨号的问题,主要是由于H5环境与原生的交互限制导致的。以下是关键点分析:
-
在纯H5环境中,uni.makePhoneCall实际是通过tel:协议触发拨号,但在App内嵌WebView中可能被拦截
-
iOS的WKWebView默认会阻止tel:等特殊协议的跳转
解决方案:
- 原生端需要处理tel协议:
- iOS需要在WKWebView中实现decidePolicyForNavigationAction代理方法
- Android需要重写WebViewClient的shouldOverrideUrlLoading方法
- 或者改用JSBridge方式:
// 判断运行环境
if(window.plus){
plus.device.dial(this.listData[index].phoneNumber, false);
}else{
window.location.href = 'tel:' + this.listData[index].phoneNumber;
}