You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发送APNs VoIP通知返回InvalidPushType错误求助

解决APNs VoIP推送InvalidPushType错误

核心问题分析

你的请求存在两个关键错误:

  1. Content-Type设置错误:APNs要求推送payload为JSON格式,你当前设置的application/x-www-form-urlencoded会导致苹果服务器无法正确解析推送内容,触发InvalidPushType错误。
  2. VoIP推送的payload结构不规范:自定义字段不应嵌套在aps节点内,同时需确保apns-topic正确指向VoIP服务专用ID(App ID + .voip后缀)。

修正后的代码

if (defined("CURL_VERSION_HTTP2") && (curl_version()["features"] & CURL_VERSION_HTTP2) !== 0) {

     $device_token = "1302E8106AA322DE917B2D0F0FC4D656878F878E8E2FCEA9CEA153D3C80027C7";
     // 按苹果规范调整payload结构,自定义字段放在aps外部
     $body = [
        "aps" => [
            "alert" => "callIOS",
            "sound" => "default" // 可选:添加VoIP推送提示音
        ],
        "id" => "eabeae54-14a8-11e5-b60b-1697f925ec7b",
        "nameCaller" => "Hien Nguyen",
        "handle" => "0123456789",
        "isVideo" => true
     ];

     $header[] = "apns-topic: ao.test.app.voip"; // 确保是App ID + .voip后缀
     $header[] = "apns-expiration: 0";
     $header[] = "apns-priority: 10";
     $header[] = "apns-push-type: voip";
     $header[] = "Content-Type: application/json"; // 修正为正确的Content-Type
     $header[] = "apns-id: eabeae54-14a8-11e5-b60b-1697f925ec7b";

     $ch = curl_init();
     $url = "https://api.sandbox.push.apple.com/3/device/" . $device_token;
     curl_setopt($ch,CURLOPT_URL,$url);
     curl_setopt($ch,CURLOPT_POST, 1);             
     curl_setopt($ch,CURLOPT_HTTPHEADER, $header);
     curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($body));
     curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch,CURLOPT_SSLCERT, "VOIP.pem");
     curl_setopt($ch,CURLOPT_SSLCERTPASSWD, "");
     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); // 强制启用HTTP/2

     $response = curl_exec($ch);
     $err = curl_error($ch);

     print_r(json_decode($response));
     print_r($err); // 直接打印错误,无需json_decode
     curl_close($ch);
  } else {
     echo "No HTTP/2 support on client.";
  }

额外检查项

  • 确认VOIP.pem是专门用于VoIP推送的证书,而非普通APNs证书。
  • 验证设备token属于沙箱测试设备,与请求的沙箱环境匹配。
  • 确保App已在Xcode中开启Push Notifications和VoIP Services能力。

内容的提问来源于stack exchange,提问作者Sampaio Pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:42:04