Php 使用Api使用推送通知

Php 使用Api使用推送通知,php,ios,push-notification,apple-push-notifications,Php,Ios,Push Notification,Apple Push Notifications,我尝试使用Api使用推送通知,但没有收到任何错误消息,也没有收到任何响应 我查过了 并在我的代码中应用相应的更改,但仍然不起作用 我无法获取如何获取必须在中使用的serverId $device = 'fbb5a9c71066794d57fee33b4005a89f1bb8941a68660fd6e91f466be1299ab6'; // My iphone deviceToken $payload['aps'] = array( 'alert' => 'This is the a

我尝试使用Api使用推送通知,但没有收到任何错误消息,也没有收到任何响应

我查过了

并在我的代码中应用相应的更改,但仍然不起作用

我无法获取如何获取必须在中使用的
serverId

$device = 'fbb5a9c71066794d57fee33b4005a89f1bb8941a68660fd6e91f466be1299ab6'; // My iphone deviceToken
$payload['aps'] = array(
    'alert' => 'This is the alert text',
    'badge' => 1,
    'sound' => 'default'
);

$payload['server'] = array(
    'serverId' => 1,
    'name' => 'keyss.in'
);

$payload = json_encode($payload);

$apnsCert = 'apple_push_notification_production.pem';

$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);

$apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);

//socket_close($apns); seems to be wrong here ...
fclose($apns);
    
获取错误:

警告:流\u套接字\u客户端():无法连接到ssl://gateway.sandbox.push.apple.com:2195 (连接超时)

警告:fwrite()要求参数1是给定的资源布尔值

警告:fclose()要求参数1是给定的资源布尔值


您没有收到任何响应,因为您使用的是旧的二进制通知格式:

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload;
要获取响应(仅在出现错误时返回响应),请使用增强格式:

$apnsMessage = pack("C", 1) . pack("N", $apple_identifier) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n", strlen($payload)) . $payload;

您可以看到示例代码

现在,什么是$apple_identifier和$apple_expiration?@Happy
apple_identifier
是分配给消息的4字节标识符
apple_expiry
是一个4字节的整数,用于确定APNS服务器在放弃之前尝试向设备发送通知的时间。当您收到错误响应时,它将包含导致错误的通知的4字节标识符。