logo
当前页

实现 VoIP 通知

功能简介

通过 VoIP 通知,您可以在 App 上实现与运营商提供的电话功能一致的语音呼叫体验。

注意

受中国大陆政策限制,此功能仅限于中国大陆以外地区使用。

前提条件

在实现 VoIP 通知之前,请确保:

  • 已集成 ZPNs SDK 2.1.0 或以上版本 并实现离线推送,详情请参考 实现离线推送
  • 已向用户申请通知权限,并且用户同意 App 发送推送通知。
  • Xcode 工程已在 +Capability 中添加 Push Notifications。

实现流程

1
申请用于 VoIP 推送的证书

Apple developer 官网 申请用于 VoIP 推送的证书(后缀名为 .cer 证书文件),详情请参考 Apple 官方文档

2
导出 “.p12”文件

双击该证书文件,系统会把文件安装到钥匙串访问中,在如图所示位置(左侧边栏选择登录,顶部边栏选中证书),找到该证书,并导出 “.p12” 后缀的文件。

3
获取 resourceID

联系 ZEGO 技术支持配置携带 iOS VoIP 策略的 resourceID

4
添加 Background Modes Capabilities

使用 Xcode 打开工程,在 “Signing & capabilities” 页面单击 “+Capability”,并在弹窗中双击 “Background Modes”,您即可在 “Signing & capabilities” 看到 “Background Modes” 配置区域。

在 “Background Modes” 配置区域勾选 “Voice over IP”、“Background fetch” 以及 “Remote notifications”。

5
导入 PushKit 与 CallKit 库

导入 PushKit 与 CallKit 库,并在使用前声明头文件。

6
申请通知权限

调用 applyNotificationPermission 向用户申请同意 App 的通知权限。

Untitled
ZPNs.getInstance().applyNotificationPermission();
1
Copied!
7
启用 VoIP

开发者需要在使用 VoIP 之前,需要调用 registerPush,设置 iOS 当前所处环境,并设置 enableIOSVoIP 为 true。

Untitled
ZPNs.getInstance()
.registerPush(iOSEnvironment: ZPNsIOSEnvironment.Development,enableIOSVoIP: true)
.catchError((onError) {
	if (onError is PlatformException) {
    	// 开发者需要关注此处可能抛出的异常
    	log(onError.message ?? "");
   	}
});
1
Copied!
注意

请在开发环境或生产环境中输入正确的iOSEnvironment值。否则,ZPNs服务器无法选择正确的推送证书将离线通知请求发送到APNs。在打包过程中,如果使用开发证书,请选择开发环境的值;如果使用分发证书,请选择生产环境的值。在生产环境中,APNs具有更高的投递率和更低的延迟。

8
获取携带 VoIP token 的 pushID

通过 onRegistered 方法获取携带 VoIP token 的 pushID。

Untitled
ZPNsEventHandler.onRegistered = (ZPNsRegisterMessage registerMessage) {
	log(registerMessage.errorCode.toString());
};
1
Copied!
9
发送及接收 VoIP 通知
  • 发送 VoIP 通知

    说明

    请联系 ZEGO 技术支持,配置带 VoIP 策略 的 resourceID。

    发起呼叫邀请 或其他需要 VoIP 通知场景中,向 ZIMPushConfig 中传入该 resourceID,即可配置本次推送为 VoIP 类型。

    Untitled
    pushConfig.title = "系统通话标题";
    pushConfig.payload = "业务需要的透传字段";
    pushConfig.resourcesID = "联系 ZEGO 技术支持配置的 resourcesID";
    
    ZIMVoIPConfig voIPConfig = ZIMVoIPConfig();
    voIPConfig.iOSVoIPHandleType = ZIMCXHandleType.generic;
    //发送方联系人信息
    voIPConfig.iOSVoIPHandleValue = "Li hua";
    //是否为视频通话
    voIPConfig.iOSVoIPHasVideo = false;
    pushConfig.voIPConfig = voIPConfig;
    
    1
    Copied!
  • 接收到 VoIP 通知 为了方便 Flutter 开发者使用 iOS 原生的 Callkit 库接口, ZEGO 封装了相关接口到 zego_callkit 插件中。请参考 CallKit 使用指南

Previous

跨应用离线推送

Next

实现静默推送