uni-app uni.makePhoneCall在自定义基座以及正式包中无法正常调用

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

uni-app uni.makePhoneCall在自定义基座以及正式包中无法正常调用

产品分类

uniapp/App

PC开发环境操作系统

Windows

PC开发环境操作系统版本号

win10

HBuilderX类型

正式

HBuilderX版本号

4.24

手机系统

Android

手机系统版本号

Android 12

手机厂商

小米

手机机型

Note 9

页面类型

vue

vue版本

vue2

打包方式

云端

项目创建方式

HBuilderX

App下载地址或H5网址

https://oa.sxsrxt.com/downloads/changtu.apk

示例代码

private telphoneClick(tel: string) {
    uni.makePhoneCall({
        phoneNumber: tel,
    });
}

操作步骤

预期结果

实际结果

bug描述

uni.makePhoneCall在标准基座运行时可以正常使用拨打电话,但是在自定义基座以及正式打包后,则无法正常使用,调用方法进入了success,但是并没有弹出权限提示,或者跳转拨打页面,增加了拨打电话权限也依旧无效。之前的HBuilder版本打包,功能是正常的,但是不知道是不是版本更新的原因,最近打包的项目都有这个问题


2 回复

用hello uni-app示例验证下是否正常呢?


在uni-app中,uni.makePhoneCall方法用于拨打电话。如果你发现该方法在自定义基座以及正式包中无法正常调用,可能的原因有多种,比如权限问题、基座配置问题或者代码实现有误。以下是一些排查和修正的代码示例,帮助你确保代码正确并实现所需功能。

1. 检查权限配置

首先,确保你的应用已经申请了拨打电话的权限。在manifest.json中配置必要的权限:

"mp-weixin": { // 示例为微信小程序配置,其他平台类似
    "appid": "your-app-id",
    "permission": {
        "scope.phone": {
            "desc": "你的位置信息将用于小程序拨打电话功能"
        }
    }
}

注意:不同平台权限配置方式不同,需根据具体平台文档配置。

2. 代码实现

确保你的调用代码正确。以下是一个简单的示例,展示如何使用uni.makePhoneCall

export default {
    methods: {
        callPhoneNumber() {
            const phoneNumber = "12345678901"; // 替换为实际电话号码
            uni.makePhoneCall({
                phoneNumber: phoneNumber,
                success: function () {
                    console.log('拨打电话成功');
                },
                fail: function (err) {
                    console.error('拨打电话失败', err);
                }
            });
        }
    }
}

3. 基座与正式包差异排查

  • 基座配置:确保自定义基座配置正确,特别是关于权限和网络的部分。
  • 调试日志:在开发者工具中查看控制台输出,检查是否有权限被拒绝或网络请求失败的错误。
  • 真机测试:在真机上测试,因为有些权限和API调用在模拟器上可能无法正常工作。

4. 额外检查

  • 系统版本:确认目标设备的系统版本是否支持该功能。
  • API限制:某些平台可能对拨打电话API有额外限制,如需要用户授权等。

示例:条件调用

为了更安全地调用uni.makePhoneCall,可以在调用前检查权限:

uni.getSetting({
    success: function(res) {
        if (res.authSetting['scope.phone']) {
            // 用户已授权,调用拨打电话
            this.callPhoneNumber();
        } else {
            // 引导用户授权
            uni.authorize({
                scope: 'scope.phone',
                success: function() {
                    this.callPhoneNumber();
                },
                fail: function() {
                    console.log('用户拒绝授权');
                }
            });
        }
    }.bind(this)
});

以上代码示例和排查步骤应该能帮助你解决uni.makePhoneCall在自定义基座以及正式包中无法正常调用的问题。如果问题依然存在,建议详细检查平台文档或联系uni-app官方支持。

回到顶部