跳转到主要内容

概述

OneSignal 支持在 Android 和 iOS 平台上发送 VoIP 通知。但是,OneSignal SDK 目前不支持 VoIP 令牌注册。本指南介绍如何使用 OneSignal 的 API 和平台设置手动配置 VoIP 通知。

Android VoIP 设置

与 iOS 不同,Android 不使用专用的”VoIP 推送”类型。您可以使用仅数据推送通知启动 Activity 或呈现自定义 UI 来实现类似 VoIP 的行为。 如果您想启动原生 UI(例如来电屏幕),请使用 Android 的 NotificationExtenderService 来覆盖通知行为。 进一步指导:

iOS VoIP 设置

1

将 PushKit 添加到您的应用

使用 Apple 的 PushKit API 来注册和接收 VoIP 令牌。实施技巧请参考 Apple 的 VoIP 最佳实践
2

为 VoIP 用户创建新的 OneSignal 应用

您必须维护两个独立的 OneSignal 应用
  • 主推送应用:用于标准推送通知
  • VoIP 应用:用于 VoIP 特定通知
确保为 VoIP 应用上传 VoIP 服务证书(.p12),使用与主应用相同的包 ID。

钥匙链访问中的 p12

VoIP 证书截图

3

使用 VoIP 令牌注册设备

使用创建用户 API 向您的专用 VoIP OneSignal 应用注册 VoIP 令牌。注意: 如果您在开发/沙盒环境中注册设备,请包含 "test_type": 1 属性。省略此属性可能导致 "Mismatched Subscription Environment" 错误或通知失败。
curl --request POST \
     --url https://api.onesignal.com/apps/YOUR_VOIP_APP_ID/users \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "subscriptions": [
    {
      "type": "iOSPush",
      "token": "your-voip-token",
      "test_type": 1 // omit in production
    }
  ]
}
'
稍后要更新令牌,请使用更新订阅 API。
4

发送 VoIP 通知

使用创建通知 API 并包含以下参数:
  • "apns_push_type_override": "voip"
  • 您的 VoIP 应用的 app_id
curl --include \
     --request POST \
     --header "Content-Type: application/json; charset=utf-8" \
     --header "Authorization: key YOUR_REST_API_KEY" \
     --data-binary '{
  "app_id": "YOUR_VOIP_APP_ID",
  "contents": {"en": "English Message"},
  "apns_push_type_override": "voip",
  "include_subscription_ids": ["YOUR_VOIP_SUBSCRIPTION_ID"]
}' \
https://api.onesignal.com/notifications

常见问题

不,VoIP 推送不跟踪确认投递。它们依赖于通知服务扩展,该扩展不会为 VoIP 通知触发。相反,通过原生 iOS PushKit 事件跟踪接收:
pushRegistry(_:didReceiveIncomingPushWith:for:completion:)
此事件是您主应用目标的一部分,不需要单独的扩展。了解更多请参阅 Apple 的 VoIP 文档

I