概述
Apple 对 VoIP 推送通知的处理方式与标准推送通知不同。由于这些平台限制,OneSignal 支持发送 VoIP 通知,但不会为您管理 VoIP 令牌注册。 您必须:- 使用 Apple PushKit 自行注册 VoIP 令牌
- 上传 VoIP 专用的 APNs 证书
- 使用 OneSignal 的 API 注册令牌并发送通知
平台差异一览
| 平台 | 是否支持 VoIP 推送 | 工作原理 |
|---|---|---|
| iOS | ✅ 是 | 使用 Apple PushKit 和 VoIP APNs 证书 |
| Android | ❌ 否 | 使用纯数据推送模拟通话样式行为 |
如果您正在构建跨平台通话应用,则需要针对不同平台使用不同的方法。
Android:模拟 VoIP 样式行为(非真正的 VoIP)
Android 不支持 VoIP 推送通知。没有与 Apple PushKit 相当的功能。 相反,Android 通话应用使用以下方式模拟 VoIP 行为:- 纯数据推送通知
- 前台服务
- 自定义通话样式 UI
- 发送纯数据通知
- 在您的应用中处理它们以:
- 启动前台服务
- 启动通话 UI 活动
- 显示自定义来电通知
Android 设置并非 OneSignal 特定的。OneSignal 仅传递推送负载;您的应用处理通话行为。
iOS:发送真正的 VoIP 推送通知
在 iOS 上,VoIP 通知使用 Apple PushKit,并具有与标准推送通知不同的特殊传递规则。 iOS VoIP 如何与 OneSignal 配合使用: 对于 iOS VoIP 通知:- 您的应用使用 PushKit 注册 VoIP 令牌
- 您将 VoIP Services APNs 证书上传到 OneSignal
- 您使用 API 向 OneSignal 注册 VoIP 令牌
- 您使用 apns_push_type_override: “voip” 发送 VoIP 推送
1. 使用 PushKit 注册 VoIP 令牌
使用 Apple 的 PushKit 框架注册 VoIP 通知并接收 VoIP 令牌。- 在您的应用中实现 PushKit
- 在 Apple 轮换时存储并刷新 VoIP 令牌
- 严格遵守 Apple 的 VoIP 策略
2. 为 VoIP 用户创建新的 OneSignal 应用
您必须维护两个独立的 OneSignal 应用:- 主推送应用:用于标准推送通知
- VoIP 应用:仅用于 VoIP 通知
- 使用相同的 iOS Bundle ID
- 与同一原生 iOS 应用关联
3. 上传 VoIP Services 证书
在您的 VoIP OneSignal 应用中:- 上传 VoIP Services 证书(.p12)
- 不要重复使用您的标准 APNs 证书

钥匙串访问中的 VoIP 证书

在 OneSignal 仪表板中上传的 VoIP 证书
4. 向 OneSignal 注册 VoIP 令牌
使用 Create User API 向您的 VoIP OneSignal 应用注册 VoIP 令牌。5. 发送 VoIP 通知
使用 Create Notification API 并包含以下参数:"apns_push_type_override": "voip"- 您的 VoIP 应用的
app_id - 您注册的 VoIP 令牌的
subscription_id
6. 验证您的 VoIP 设置
如果满足以下条件,则您的 iOS VoIP 集成正在工作:- VoIP 令牌在您的 VoIP 应用中显示为 iOS 推送订阅
- VoIP 推送触发
pushRegistry(_:didReceiveIncomingPushWith:for:completion:) - 应用即使在终止或后台运行时也会被唤醒