uniapp 打包app 如何获取通讯录权限

在uniapp中打包成APP后,如何获取用户的通讯录权限?我已经在manifest.json中配置了权限请求,但在真机测试时仍然无法调起授权弹窗。具体需要调用哪个API?是否需要额外的原生插件支持?iOS和Android的配置方法是否有区别?求详细的操作步骤和代码示例。

2 回复

manifest.json中配置通讯录权限,然后在代码中使用uni.authorize申请权限,再调用uni.choosePhoneContact选择联系人。记得在打包时勾选通讯录权限。


在 UniApp 中获取通讯录权限并访问联系人信息,需要通过以下步骤实现:

1. 配置权限

manifest.json 文件中添加 Android 和 iOS 的通讯录权限配置:

Android 配置manifest.json → App 模块权限配置):

{
  "permissions": [
    "android.permission.READ_CONTACTS"
  ]
}

iOS 配置manifest.json → App 模块权限配置):

{
  "privacies": [
    "NSContactsUsageDescription"
  ]
}

iOS 需在 NSContactsUsageDescription 中说明使用通讯录的原因(例如:“用于导入联系人信息”)。


2. 使用 UniApp API 获取权限

通过 uni.authorizeuni.getSetting 检查并请求权限:

// 检查通讯录权限状态
uni.getSetting({
  success: (res) => {
    if (!res.authSetting['scope.addressBook']) {
      // 请求通讯录权限
      uni.authorize({
        scope: 'scope.addressBook',
        success: () => {
          console.log('通讯录权限授权成功');
          this.getContacts(); // 授权后获取联系人
        },
        fail: (err) => {
          console.log('授权失败', err);
          uni.showModal({
            title: '权限提示',
            content: '需要通讯录权限才能使用此功能,请前往设置开启',
            showCancel: false
          });
        }
      });
    } else {
      this.getContacts(); // 已有权限,直接获取联系人
    }
  }
});

3. 获取联系人列表

使用 uni.chooseAddressBook 选择联系人,或通过原生插件访问完整通讯录(需额外开发):

// 选择联系人(部分平台支持)
uni.chooseAddressBook({
  success: (res) => {
    console.log('选中联系人:', res);
  },
  fail: (err) => {
    console.log('选择失败', err);
  }
});

4. 注意事项

  • 平台差异
    • 部分 Android 设备可能无需动态申请权限,但 Android 6.0+ 仍需处理。
    • iOS 必须配置隐私描述,否则审核可能被拒。
  • 扩展需求
    如需读取完整通讯录,需使用原生插件(如 DC_Contacts)或自行开发原生模块。

总结步骤:

  1. 配置权限声明。
  2. 动态请求权限(Android 6.0+ 和 iOS 必需)。
  3. 通过 API 或插件访问联系人数据。

按以上流程操作即可在 UniApp 中处理通讯录权限。

回到顶部