跳转到正文

iOS

GitHub

iOS 行为的工作原理

“iOS 行为机制”章节

在 iOS 上,该插件会将来电上报给 CallKit。这样你无需自行构建原生来电 UI,就能获得系统来电界面和标准通话操作。

requestPermissions() 在 iOS 上会立即 resolve,因为 CallKit 本身不需要运行时权限弹窗。

import { IncomingCallKit } from '@capgo/capacitor-incoming-call-kit';
await IncomingCallKit.showIncomingCall({
callId: 'call-42',
callerName: 'Ada Lovelace',
handle: '+1 555 010 020',
ios: {
handleType: 'phoneNumber',
supportsHolding: true,
supportsDTMF: false,
},
});

使用 ios.handleType 用于控制 CallKit 如何格式化 handle:

  • generic 用于应用专属标识符
  • phoneNumber 用于真实电话号码
  • emailAddress 用于基于电子邮件的身份标识

此插件不会为你注册 PushKit 或 APNs。

若要在 iOS 上实现真正的后台或终止状态响铃,你的宿主 App 仍需配置与你的传输策略相匹配的 Apple 原生推送设置:

  1. 当你的传输方式使用 Apple 推送时,请启用 Push Notifications。
  2. 当你的 App 使用 VoIP 推送流程时,请启用 Voice over IP background mode。
  3. 一旦 Capacitor bridge 可用,请立即将 incoming-call 事件传递给你的 App 并调用此插件。

如果你的响铃事件仅存在于 JavaScript 中,那么在 App 已处于前台运行时,你将获得最佳体验。

CallKit 并不会取代你的媒体 SDK。如果实际通话会话需要使用麦克风或摄像头权限,你仍需在 App 中配置这些使用说明:

<key>NSMicrophoneUsageDescription</key>
<string>This app uses the microphone for calls.</string>
<key>NSCameraUsageDescription</key>
<string>This app uses the camera for video calls.</string>

只添加实际通话流程所需的 key。

  • PushKit 和 APNs 注册
  • 身份验证和 token 刷新
  • 随后加入真实的房间或 VoIP 会话 callAccepted
  • 当插件发出事件时,结束或同步远程通话状态 callDeclined, callEnded,或 callTimedOut

如果你正在使用 iOS 要规划原生插件工作,请将其与 使用 @capgo/capacitor-incoming-call-kit 用于“使用 @capgo/capacitor-incoming-call-kit”中的原生功能, Capgo 插件目录 查看 Capgo 插件目录中的产品工作流, Capgo 提供的 Capacitor 插件 查看由 Capgo 提供的 Capacitor 插件中的实现细节, 添加或更新插件 关于“添加或更新插件”中的实现细节,以及 Ionic Enterprise 插件替代方案 关于“Ionic Enterprise 插件替代方案”中的产品工作流。