我们正在测试一个具有 APNS 的应用程序,并注意到有时沙盒环境的 APNS 服务会停止“推送”。苹果服务器成功接收到消息,没有错误。反馈服务也没有收到任何消息(我们已成功收到关于其他事情的反馈)。我们的这个功能的代码库已经有一段时间没有改变了,并且一直在工作。
我的问题是,Apple 是否可以发送某种 ping,让我们知道沙盒 APNS 是活跃的并且正在工作?
谢谢。
我们正在测试一个具有 APNS 的应用程序,并注意到有时沙盒环境的 APNS 服务会停止“推送”。苹果服务器成功接收到消息,没有错误。反馈服务也没有收到任何消息(我们已成功收到关于其他事情的反馈)。我们的这个功能的代码库已经有一段时间没有改变了,并且一直在工作。
我的问题是,Apple 是否可以发送某种 ping,让我们知道沙盒 APNS 是活跃的并且正在工作?
谢谢。
我尝试了以下代码(PHP)
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'apple_push_notification_production.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if($apns)
{
echo "Connection Established<br/>";
$deviceToken = '**********';//masked
$body = array();
$body['aps'] = array(’alert’ => "test message");
//$body['aps']['badge'] = 1;
$payload = json_encode($body);
$apnsMessage = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
print "sending message :" . $apnsMessage . "<br/>";
print "sending payload :" . $payload . "<br/>";
//fwrite($apns, $apnsMessage);
}
else
{
echo "Connection Failed";
echo $errorString;
echo $error;
}
socket_close($apns);
fclose($apns);
回复是连接已建立发送消息:�� d^÷Îå0ZCd%1ÄuwOOYš'ÊÈ}ârðm¾Í�,{"aps":{"\u2019alert\u2019":"test message"}} 发送有效负载:{"aps":{" \u2019alert\u2019":"测试消息"}}
但我无法收到通知
有什么帮助吗?
AFAIK,判断服务是否不起作用的唯一方法是您的套接字连接是否有问题。
在测试中,我确实发现我的 deviceId 有一次不正确,并且阻止了我接收消息。
此外,并非所有消息都得到保证,我相信只有最后一个发送的消息得到保证。您是否收到来自该批次的任何消息?
最后一个问题是您正在测试的设备类型,iPod Touch 的推送方式与 iPhone 不同。
如果您身边的一切都检查了,也许您应该向苹果提交错误报告/功能请求。Apple Bug Reporter从苹果开发论坛看来,这是一个非常需要的功能。