0

0

uni-app联系人读取 uni-app App如何获取手机通讯录

幻夢星雲

幻夢星雲

发布时间:2026-03-16 22:00:44

|

440人浏览过

|

来源于php中文网

原创

plus.contacts是uni-app中唯一可批量读取通讯录的原生方案,仅限app-plus平台,需正确配置权限、字段白名单及平台差异化处理。

uni-app 里 plus.contacts 是唯一靠谱的通讯录读取方式

uni-app 官方 api(如 uni.choosecontact)只支持「选择一个联系人」,不能批量读取;真要拉整个通讯录列表,必须走 html5+ 原生能力,也就是 plus.contacts。它不是 vue 插件,也不是 npm 包,而是 hbuilderx 打包 app 时内置的 5+ 引擎提供的对象——这意味着:web 和小程序端完全不可用,只适用于 app-plus 平台。

常见错误现象:Cannot read property 'contacts' of undefined,基本都是因为没在真机或模拟器运行,或者没用 HBuilderX 打包(比如直接用 npm run dev:app 启动调试,plus 对象根本不存在)。

  • 必须在 onLoad 或用户触发事件中调用,不能在 data 初始化时就访问 plus.contacts
  • Android 6.0+ 和 iOS 都需提前声明权限,否则 plus.contacts.getAddressBook 会静默失败
  • iOS 上首次调用会弹系统授权框;Android 需先用 plus.android.requestPermissions 主动申请,不能只靠 manifest.json 声明

manifest.json 权限配置写错一行,整个功能就白搭

权限不是“写了就生效”,不同平台字段位置和格式要求极细。Android 要三组 <uses-permission>,iOS 要 NSContactsUsageDescription 描述文案,漏一不可。

典型踩坑点:"permissions": ["contacts"] 这种写法只对 uni.authorize 有效,但对 plus.contacts 完全无效——后者认的是原生权限字符串,不是 scope。

  • Android 配置必须放在 app-plus.distribute.android.permissions 下,且每项是完整 XML 字符串:"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>"
  • iOS 配置必须在 app-plus.distribute.ios.privacyDescription.NSContactsUsageDescription,值为中文字符串,不能为空或占位符
  • HBuilderX 编译后记得清缓存再真机测试,旧包可能沿用旧 manifest

plus.contacts.find 的字段参数决定你能拿到什么

很多人调用 addressbook.find 后发现 phoneNumbers 是空数组、displayNameundefined,问题往往出在字段白名单没写对。

会译·对照式翻译
会译·对照式翻译

会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译

下载

find 第一个参数是字符串数组,它不是“过滤条件”,而是“我要哪些字段”。不写,就啥都拿不到;写错大小写或嵌套路径,对应字段就为 null

  • 基础必填:["displayName", "phoneNumbers"] ——注意是复数,不是 phoneNumber
  • 想拿邮箱:"emails";地址:"addresses";头像:"photos"
  • 手机号具体类型可细化,如 "phoneNumbers.mobile"(但兼容性差,部分机型返回空),稳妥起见还是用 "phoneNumbers" 然后自己遍历 .value
  • 别传 null 或空数组,某些 Android 版本会直接报错退出

Android 和 iOS 获取逻辑不能共用一套代码

表面上看 plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, ...) 两边都能跑,但实际行为差异极大:Android 默认只读手机本地通讯录,SIM 卡需显式传 ADDRESSBOOK_SIM;而 iOS 根本不支持 SIM 卡读取,且对空联系人(无号码)处理更严格。

常见错误现象:iOS 上 contacts 数组长度远小于 Android,甚至为空——大概率是用户通讯录里有大量无号码联系人,而 find 没做数据清洗。

  • 务必在 find 成功回调里加过滤:contacts.filter(c => c.phoneNumbers && c.phoneNumbers.length)
  • Android 可额外尝试 plus.contacts.ADDRESSBOOK_SIM 读 SIM 卡,但需单独判断权限和可用性
  • iOS 不支持 multiple: false 强制单选,find 总是返回数组,哪怕只有一个匹配项
真实项目里最麻烦的从来不是“怎么读”,而是“读到一半用户拒权了怎么办”“iOS 授权后第一次返回空数组是不是 bug”“Android 12+ 隐私沙盒导致联系人数量变少”——这些没法靠一段代码解决,得结合 plus.runtime.getProperty 查版本、用 plus.android.getNativeObj 做兜底、对空结果主动提示引导重试。事情说清了就结束。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

458

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

83

2025.09.10

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

550

2023.10.23

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

474

2024.03.06

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

303

2025.12.30

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

230

2025.12.30

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号