VoIP 推送
在 iOS 8 中,Apple 推出了 PushKit 和 VoIP 推送——一种新型的推送通知。在标准推送功能的基础上,VoIP 推送允许应用在向用户显示通知之前执行代码。
1. 将 PushwooshVoIP 模块添加到您的项目中。
Swift Package Manager

Cocoapods
# 取消注释下一行,为您的项目定义一个全局平台# platform :ios, '9.0'
target 'MyApp' do # 如果您不想使用动态框架,请注释掉下一行 use_frameworks!
pod 'PushwooshXCFramework' pod 'PushwooshFramework/PushwooshVoIP'
end2. 在 Signing & Capabilities 选项卡中,勾选复选框以添加 Voice over IP 功能,如下方截图所示:

3. 按照以下代码所示初始化 PushwooshVoIP 模块。
import UIKitimport PushwooshFrameworkimport PushwooshVoIPimport CallKitimport PushKit
@mainclass AppDelegate: UIResponder, UIApplicationDelegate, PWVoIPCallDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
/// 初始化 Pushwoosh VoIP 模块。 /// /// - 参数: /// - supportVideo: 一个布尔值,指示是否支持视频通话。 /// - ringtoneSound: 用于来电的自定义铃声文件的名称(例如 `"mySound.caf"`)。 /// - handleTypes: 支持的呼叫句柄类型。可能的值: /// - `1` – 通用 /// - `2` – 电话号码 /// - `3` – 电子邮件地址 Pushwoosh.VoIP.initializeVoIP(true, ringtoneSound: "mySound.caf", handleTypes: 1)
// 设置委托以接收 VoIP 呼叫事件 Pushwoosh.VoIP.delegate = self
return true }
// MARK: - 必需的 PWVoIPCallDelegate 回调
func voipDidReceiveIncomingCall(payload: PushwooshVoIP.PWVoIPMessage) { // 处理传入的 VoIP 推送 }
func pwProviderDidReset(_ provider: CXProvider) { // 处理提供程序重置 }
func pwProviderDidBegin(_ provider: CXProvider) { // 处理提供程序激活 }}4. PWVoIPCallDelegate 协议定义了用于处理 VoIP 呼叫生命周期和 CallKit 交互的必需和可选回调。
@objc public protocol PWVoIPCallDelegate: NSObjectProtocol {
/// 当收到传入的 VoIP 推送时调用。 @objc func voipDidReceiveIncomingCall(payload: PushwooshVoIP.PWVoIPMessage)
/// 可选:当来电成功报告给 CallKit 时调用。 @objc optional func voipDidReportIncomingCallSuccessfully(voipMessage: PushwooshVoIP.PWVoIPMessage)
/// 可选:当向 CallKit 报告来电失败时调用。 @objc optional func voipDidFailToReportIncomingCall(error: Error)
/// 可选:当开始新的去电时调用。 @objc optional func startCall(_ provider: CXProvider, perform action: CXStartCallAction)
/// 可选:当结束活动呼叫时调用。 @objc optional func endCall(_ provider: CXProvider, perform action: CXEndCallAction, voipMessage: PushwooshVoIP.PWVoIPMessage?)
/// 可选:当接听来电时调用。 @objc optional func answerCall(_ provider: CXProvider, perform action: CXAnswerCallAction, voipMessage: PushwooshVoIP.PWVoIPMessage?)
/// 可选:当呼叫静音或取消静音时调用。 @objc optional func mutedCall(_ provider: CXProvider, perform action: CXSetMutedCallAction)
/// 可选:当呼叫保持或取消保持时调用。 @objc optional func heldCall(_ provider: CXProvider, perform action: CXSetHeldCallAction)
/// 可选:当播放 DTMF 音时调用。 @objc optional func playDTMF(_ provider: CXProvider, perform action: CXPlayDTMFCallAction)
/// 当 CallKit 提供程序重置时调用。 @objc func pwProviderDidReset(_ provider: CXProvider)
/// 当 CallKit 提供程序开始时调用。 @objc func pwProviderDidBegin(_ provider: CXProvider)
/// 可选:提供 CallKit 呼叫控制器实例。 @objc optional func returnedCallController(_ controller: CXCallController)
/// 可选:提供 CallKit 提供程序实例。 @objc optional func returnedProvider(_ provider: CXProvider)
/// 可选:当音频会话被激活时调用。 @objc optional func activatedAudioSession(_ provider: CXProvider, didActivate audioSession: AVAudioSession)
/// 可选:当音频会话被停用时调用。 @objc optional func deactivatedAudioSession(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession)}5. 根据配置指南将您的 VoIP 证书上传到 Pushwoosh Control Panel,并选择 Production 网关。
就这样!
与我们分享您的反馈
Anchor link to您的反馈有助于我们创造更好的体验,因此,如果您在 SDK 集成过程中遇到任何问题,我们很乐意听取您的意见。如果您遇到任何困难,请随时通过此表格与我们分享您的想法。