背景介绍
今年6月份HDC大会在一个技术展台跟华为架构师交流时他给介绍了HarmonyOS提供的企业服务能力,在用户接听拨打电话时,页面显示已安装企业应用的联系人信息,方便用户识别来去电人信息,快速回应,增强企业内部沟通效率。由于工作场景确实2B业务挺重,听了很感兴趣,之前没有任何手机系统提供这种能力,还专门做了手环设备,用户在接听电话时,手环设备获取通知信息,提取手机号调用服务端获取同事信息提高交流效率。晚上回酒店后第一时间查看了对应文档,接入很简单,能力超强大。
系统能力介绍
HarmonyOS 从5.0.2(14)开始,提供了CallerInfoQueryExtensionAbility来去电信息查询扩展Ability,提供通话来去电页面显示企业联系人信息的能力。当有外拨电话或者接听来电时,系统回拉起自定义的CallerInfoQueryExtensionAbility,CallerInfoQueryExtensionAbility是轻量级独立子进程,不允许唤醒主进程,进程存在最长时间为2秒,超时后自动销毁。这样设计一方面是出去安全考虑,另一方面出于体验考虑,如果不是独立进程,拉起主进程如果比较耗时的话,可能电话都已经挂断了还没有开始查询用户信息。
自定义的CallerInfoQueryExtensionAbility实现CallerInfoQueryExtensionAbility中的onQueryCallerInfo方法,onQueryCallerInfo方法会传入播出或接听的手机号,根据手机号查询本地数据库或者网络接口获取手机号对应同事信息,以Promise方式异步返回CallerInfo,CallerInfo包含以下信息:
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| contactName | string | 否 | 否 | 联系人姓名:为保证页面最佳显示效果,字数建议限制在20字以内 |
| employeeId | string | 否 | 是 | 工号:为保证页面最佳显示效果,字数建议限制在20字以内 |
| department | string | 否 | 是 | 部门:为保证页面最佳显示效果,字数建议限制在20字以内 |
| position | string | 否 | 是 | 职位:为保证页面最佳显示效果,字数建议限制在20字以内 |
根据查询到的业务信息构造CallerInfo返回给系统展示,这样就可以直接看到手机号对应的用户名称等信息。
实现方案
申请权限
CallerInfoQueryExtensionAbility需求场景面向企业,仅供企业应用开发者接入。企业应用首先需要进行接入申请,企业应用开发者将申请信息发送至公共邮箱agconnect@huawei.com。
邮件标题:【申请公司名】—企业来电显示能力—Developer ID
邮件内容需包括:开发者接入企业来电显示能力的应用使用主体、应用名称、应用ID、应用包名、场景说明(具体描述该应用对应通讯录量级等使用的必要信息)。
企业联系人信息来去电页面显示能力申请成功后,需要重新申请调试Profile,在新申请Profile勾选对应权限,并且在DevEco Studio中替换新申请的调试Profile。
开发自定义CallerInfoQueryExtensionAbility
在工程内创建一个ExtensionAbility类型的自定义组件并继承CallerInfoQueryExtensionAbility,完成onQueryCallerInfo方法的复写,示例代码如下:
import { CallerInfoQueryExtensionAbility, CallerInfo } from '@kit.CallServiceKit';
export default class MainCallerInfoQueryExtAbility extends CallerInfoQueryExtensionAbility {
// 来去电时由系统通话应用主动调用该接口查询企业联系人信息
onQueryCallerInfo(phoneNumber: string): Promise<CallerInfo> {
//通过手机号请求用户信息
return httpPost<CallerInfo>({
url: 'https://wodekouwei.com/userInfoByPhone',
params: {
'phoneNumber': phoneNumber
} as Record<string, headerValueType>
})
}
}接着在应用配置文件module.json5中注册extensionAbilities,
{
"extensionAbilities": [
{
"name": "MainCallerInfoQueryExtAbility",
"srcEntry": "./ets/callerinfoquery/MainCallerInfoQueryExtAbility.ets",//表示该Ability对应代码路径
"type": "callerInfoQuery" //type标签必须设为"callerInfoQuery",表示该拓展类型为CallerInfoQueryExtensionAbility。
}
]
}打开手机设置
接着在调试设备上,前往“电话”,点击右上角的“更多”图标,前往“设置”>“陌生号码和信息识别”,打开对应企业应用的号码识别功能开关,进行调试:
注意事项
一方面,来去电页面或横幅仅展示一个联系人信息,对于多个应用里存在相同联系人的情况,按照应用包名的字典序排序,展示首个查询结果。
另一方面,关于用户信息存储问题,上述示例采用了网络接口查询方式,网络正常情况下2秒可以正常返回,官方示例给了RDB数据库查询方式,通过本地数据库查询就要求必须把所有用户信息都内置在应用中,这样不仅有安全问题而且如果企业规模较大员工较多时也是加重本地存储压力。一般采用接口请求方式,接口要做一些频次等限制也要保证响应速度。
RDB数据库场景需转化context类型 const context = (this.context as common.ExtensionContext).getApplicationContext();
转换后使用content获取RdbStore实例:let store = await relationalStore.getRdbStore(context, null);
总结
HarmonyOS 5.0.2及以上版本推出的CallerInfoQueryExtensionAbility,为企业场景提供了高效实用的来电识别解决方案——通过轻量级独立进程机制,在来去电时快速查询并展示联系人姓名、部门、职位等企业信息,精准解决了2B业务中内部沟通的身份识别痛点。该能力接入流程简洁清晰,仅需完成权限申请、扩展Ability开发与配置、手机功能开关开启三步即可落地,同时支持网络接口查询与本地数据库查询两种方式,结合多应用排序规则与响应速度优化建议(优先推荐接口查询),既保障了安全性与体验流畅度,又降低了企业落地成本。对于有内部通讯录管理需求的企业应用而言,这一系统级能力无需额外硬件支持,即可显著提升沟通效率,是鸿蒙生态在企业服务领域的又一实用创新。
参考
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。